我正在使用pipe-android-sdk
开发视频录制应用程序。我已经实现了他们的TestApp代码,但是当我运行该应用程序并按“记录”按钮时,出现了错误(下面的日志),我已经尝试过,但是由于它是我的第一个Android应用程序,所以无法解决该错误。
MainActivity After Pressing RECORD VIDEO button of activity and press record button of mobile error come Application Stop
MainActivity.java
package com.example.admin.myapplication;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.android.pipe.pipeandroidsdk.PipeRecorder;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button_recordVideoCustomUI;
private Button button_recordVideo;
private Button button_useExistingVideo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_recordVideoCustomUI = (Button)findViewById(R.id.button_recordVideoCustomUI);
button_recordVideo = (Button)findViewById(R.id.button_recordVideo);
button_useExistingVideo = (Button)findViewById(R.id.button_useExistingVideo);
button_recordVideoCustomUI.setOnClickListener(this);
button_recordVideo.setOnClickListener(this);
button_useExistingVideo.setOnClickListener(this);
if (Build.VERSION.SDK_INT >= 23) {
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA);
if (permissionCheck == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
2);
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.RECORD_AUDIO}, 3);
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
1);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();
}
return;
}
case 2: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "Permission denied to use Camera", Toast.LENGTH_SHORT).show();
}
return;
}
case 3: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "Permission denied to record audio", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
public void onClick(View v) {
final PipeRecorder recorder = new PipeRecorder(this, "7e63bc4603355074d371ec74e01f8b2a");
recorder.setOnUploadedListener(new PipeRecorder.OnUploadListener() {
@Override
public void onUploadSucceed(String result) {
Toast toast = Toast.makeText(getActivity(), "Success", Toast.LENGTH_LONG);
toast.show();
}
@Override
public void onUploadFailed(String result) {
Toast toast = Toast.makeText(getActivity(), "Network Connection Error", Toast.LENGTH_LONG);
toast.show();
}
});
switch (v.getId()) {
case R.id.button_recordVideoCustomUI:
recorder.maxDuration = 60;
recorder.recordHD = false;
recorder.payload = "Test payload for recording with customUI";
recorder.showCameraControls = false;
LayoutInflater inflater;
inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View controlLayout = (View)inflater.inflate(R.layout.control_layout, null);
Button button_record = (Button)controlLayout.findViewById(R.id.button_record);
Button button_stop = (Button)controlLayout.findViewById(R.id.button_stop);
Button button_cancel = (Button)controlLayout.findViewById(R.id.button_cancel);
button_record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recorder.startVideoCapture();
}
});
button_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recorder.stopVideoCapture();
}
});
button_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recorder.hide();
}
});
recorder.controlsLayout = controlLayout;
recorder.show();
break;
case R.id.button_recordVideo:
recorder.maxDuration = 5;
recorder.recordHD = false;
recorder.payload = "Test payload for recording with normalUI";
recorder.showCameraControls = true;
recorder.show();
break;
case R.id.button_useExistingVideo:
recorder.payload = "Test payload with existingVideo";
recorder.useExistingVideo();
break;
default:
break;
}
}
public Activity getActivity() {
return this;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Record Video Custom UI"
android:id="@+id/button_recordVideoCustomUI" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Record Video"
android:id="@+id/button_recordVideo" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Use Existing Video"
android:id="@+id/button_useExistingVideo"
android:gravity="center_vertical|center_horizontal" />
</LinearLayout>
</RelativeLayout>
control_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id = "@+id/controlsLayout"
android:orientation="vertical"
android:gravity="center_vertical|center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="record"
android:id="@+id/button_record"
android:layout_weight="1"
tools:ignore="ButtonStyle" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop"
android:id="@+id/button_stop"
android:layout_weight="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="cancel"
android:id="@+id/button_cancel"
android:layout_weight="1" />
</LinearLayout>
错误输出:
09-04 19:26:18.455 4387-4400/com.example.admin.myapplication E/Surface: getSlotFromBufferLocked: unknown buffer: 0xae6b05a0
09-04 19:26:22.385 1262-4465/? E/OMXNodeInstance: getParameter(3e:google.mpeg4.encoder, ParamVideoErrorCorrection(0x6000007)) ERROR: NotImplemented(0x80001006)
09-04 19:26:22.385 1262-4465/? E/OMXNodeInstance: setConfig(3e:google.mpeg4.encoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
09-04 19:26:22.417 1262-4466/? E/SoftMPEG4Encoder: Failed to initialize the encoder
09-04 19:26:22.417 1262-4465/? E/ACodec: [OMX.google.mpeg4.encoder] ERROR(0x80001001)
signalError(omxError 0x80001001, internalError -2147483648)
09-04 19:26:22.417 1262-4471/? E/OMXNodeInstance: setConfig(3f:google.amrnb.encoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
09-04 19:26:22.417 1262-4464/? E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
09-04 19:26:22.419 1262-4463/? E/MediaCodecSource: Encoder (video) reported error : 0x80001001
09-04 19:26:23.007 1262-4478/? E/MPEG4Writer: The number of recorded samples is 0
09-04 19:26:23.138 1262-4482/? E/OMXNodeInstance: setConfig(40:google.vorbis.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
09-04 19:26:23.245 1262-4483/? E/MPEG4Writer: The number of recorded samples is 0
09-04 19:26:23.556 4387-4387/com.example.admin.myapplication E/MediaRecorder: stop failed: -1007
09-04 19:26:23.557 4387-4387/com.example.admin.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.admin.myapplication, PID: 4387
java.lang.RuntimeException: stop failed.
at android.media.MediaRecorder.stop(Native Method)
at com.android.pipe.pipeandroidsdk.Preview.stopVideo(Preview.java:477)
at com.android.pipe.pipeandroidsdk.Preview.onVideoError(Preview.java:2275)
at com.android.pipe.pipeandroidsdk.Preview.access$1500(Preview.java:53)
at com.android.pipe.pipeandroidsdk.Preview$8$1.run(Preview.java:2376)
at android.app.Activity.runOnUiThread(Activity.java:5511)
at com.android.pipe.pipeandroidsdk.Preview$8.onError(Preview.java:2373)
at android.media.MediaRecorder$EventHandler.handleMessage(MediaRecorder.java:1029)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-04 19:26:24.399 1633-2958/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
09-04 19:26:24.402 1633-2958/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824