录像开始时我的应用程序停止

时间:2018-09-04 14:09:49

标签: java android

我正在使用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

0 个答案:

没有答案