打开应用程序时如何自动录制视频?

用户名

这是我的代码,当我打开应用程序时我试图录制视频,但是当我尝试打开应用程序时它给我错误.......使用按钮录制视频没有问题,但是当我添加(在start)方法上它开始给我那个错误....

private Camera myCamera;
private MyCameraSurfaceView myCameraSurfaceView;
private MediaRecorder mediaRecorder;

Button myButton;
SurfaceHolder surfaceHolder;
boolean recording;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    recording = false;

    setContentView(R.layout.main);

    //Get Camera for preview
    myCamera = getCameraInstance();
    if(myCamera == null){
        Toast.makeText(AndroidVideoCapture.this, 
                "Fail to get Camera", 
                Toast.LENGTH_LONG).show();
    }

    myCameraSurfaceView = new MyCameraSurfaceView(this, myCamera);
    FrameLayout myCameraPreview = (FrameLayout)findViewById(R.id.videoview);
    myCameraPreview.addView(myCameraSurfaceView);

    myButton = (Button)findViewById(R.id.mybutton);
    myButton.setOnClickListener(myButtonOnClickListener);



}


@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();

        if(!prepareMediaRecorder()){
        mediaRecorder.start();
}
}


Button.OnClickListener myButtonOnClickListener
= new Button.OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(recording){
            // stop recording and release camera
            mediaRecorder.stop();  // stop the recording
            releaseMediaRecorder(); // release the MediaRecorder object

            //Exit after saved
            finish();
        }else{

            //Release Camera before MediaRecorder start
            releaseCamera();

            if(!prepareMediaRecorder()){
                Toast.makeText(AndroidVideoCapture.this, 
                        "Fail in prepareMediaRecorder()!\n - Ended -", 
                        Toast.LENGTH_LONG).show();
                finish();
            }

            mediaRecorder.start();
            recording = true;
            myButton.setText("STOP");
        }
    }};

private Camera getCameraInstance(){
    // TODO Auto-generated method stub
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    }
    catch (Exception e){
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}

private boolean prepareMediaRecorder(){
    myCamera = getCameraInstance();
    mediaRecorder = new MediaRecorder();

    myCamera.unlock();
    mediaRecorder.setCamera(myCamera);

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

    mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
    mediaRecorder.setMaxDuration(6000); // Set max duration 60 sec.
    mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M

    mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface());

    try {
        mediaRecorder.prepare();

    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        releaseMediaRecorder();
        return false;
    }
    return true;

}

@Override
protected void onPause() {
    super.onPause();
    releaseMediaRecorder();       // if you are using MediaRecorder, release it first
    releaseCamera();              // release the camera immediately on pause event
}

private void releaseMediaRecorder(){
    if (mediaRecorder != null) {
        mediaRecorder.reset();   // clear recorder configuration
        mediaRecorder.release(); // release the recorder object
        mediaRecorder = null;
        myCamera.lock();           // lock camera for later use
    }
}

private void releaseCamera(){
    if (myCamera != null){
        myCamera.release();        // release the camera for other applications
        myCamera = null;
    }
}









public class MyCameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback{

    private SurfaceHolder mHolder;
    private Camera mCamera;

    public MyCameraSurfaceView(Context context, Camera camera) {
        super(context);
        mCamera = camera;

        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        mHolder = getHolder();
        mHolder.addCallback(this);
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int weight,
            int height) {
        // If your preview can change or rotate, take care of those events here.
        // Make sure to stop the preview before resizing or reformatting it.

        if (mHolder.getSurface() == null){
          // preview surface does not exist
          return;
        }

        // stop preview before making changes
        try {
            mCamera.stopPreview();
        } catch (Exception e){
          // ignore: tried to stop a non-existent preview
        }

        // make any resize, rotate or reformatting changes here

        // start preview with new settings
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();

        } catch (Exception e){
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        // The Surface has been created, now tell the camera where to draw the preview.
        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }
}

}

这是我的logcat:

01-30 07:42:20.244:D / AndroidRuntime(267):关闭VM

01-30 07:42:20.244:W / dalvikvm(267):threadid = 1:线程以未捕获的异常退出(group = 0x4001d800)

01-30 07:42:20.254:E / AndroidRuntime(267):致命异常:主要

01-30 07:42:20.254:E / AndroidRuntime(267):java.lang.RuntimeException:无法启动活动ComponentInfo {com.exercise.AndroidVideoCapture / com.exercise.AndroidVideoCapture.AndroidVideoCapture}:java.lang.NullPointerException

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

01-30 07:42:20.254:E / AndroidRuntime(267):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.os.Handler.dispatchMessage(Handler.java:99)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.os.Looper.loop(Looper.java:123)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.ActivityThread.main(ActivityThread.java:4627)

01-30 07:42:20.254:E / AndroidRuntime(267):at java.lang.reflect.Method.invokeNative(本机方法)

01-30 07:42:20.254:E / AndroidRuntime(267):at java.lang.reflect.Method.invoke(Method.java:521)

01-30 07:42:20.254:E / AndroidRuntime(267):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)

01-30 07:42:20.254:E / AndroidRuntime(267):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

01-30 07:42:20.254:E / AndroidRuntime(267):在dalvik.system.NativeStart.main(本机方法)

01-30 07:42:20.254:E / AndroidRuntime(267):由以下原因引起:java.lang.NullPointerException

01-30 07:42:20.254:E / AndroidRuntime(267):在com.exercise.AndroidVideoCapture.AndroidVideoCapture.prepareMediaRecorder(AndroidVideoCapture.java:115)

01-30 07:42:20.254:E / AndroidRuntime(267):在com.exercise.AndroidVideoCapture.AndroidVideoCapture.onStart(AndroidVideoCapture.java:62)

01-30 07:42:20.254:E / AndroidRuntime(267):在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.Activity.performStart(Activity.java:3781)

01-30 07:42:20.254:E / AndroidRuntime(267):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)

01-30 07:42:20.254:E / AndroidRuntime(267):...还有11个

01-30 07:42:23.314:I / Process(267):发送信号 PID:267 SIG:9

吉隆

在您的onStart()方法中,为什么要使用NOT运算符?

使用prepareMediaRecorder()代替!prepareMediaRecorder()

您要检查prepareMediaRecorder()返回的TRUE(这意味着您已准备好进行记录),而不是“ not true” ...

尝试删除“!”

希望这可以帮助!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何阻止我的应用程序进行视频录制

来自分类Dev

关闭android应用程序时如何播放视频

来自分类Dev

用户每次打开应用程序时如何调用函数

来自分类Dev

打开应用程序时如何显示密码弹出窗口?

来自分类Dev

如何在首次打开应用程序时显示视图?

来自分类Dev

用户每次打开应用程序时如何调用函数

来自分类Dev

打开应用程序时如何显示已保存的号码?

来自分类Dev

打开应用程序时如何消除黑屏

来自分类Dev

每次打开应用程序时如何调用片段?

来自分类Dev

打开应用程序时如何专注于文本字段?

来自分类Dev

如何再次打开应用程序时显示应用程序Qt

来自分类Dev

ServletException当打开我的应用程序时

来自分类Dev

打开应用程序时的调用方法

来自分类Dev

当应用程序在后台iOS中时如何录制视频

来自分类Dev

当应用程序在后台ios中时如何录制视频

来自分类Dev

奇怪的行为:保存在应用程序中录制的视频?

来自分类Dev

切换到打开的应用程序时,停止自动更改工作区

来自分类Dev

Android:首次运行应用程序时,共享选项菜单会自动打开

来自分类Dev

在Windows上运行应用程序时使文件夹自动打开

来自分类Dev

切换到打开的应用程序时停止自动更改工作区

来自分类Dev

我的应用程序如何打开 Siri 快捷方式录制短语视图

来自分类Dev

如何阻止推送通知自动打开应用程序?

来自分类Dev

通过Firebase动态链接打开应用程序后,打开应用程序时,片段会自动跳至导航图的startdestination片段

来自分类Dev

如何仅在首次运行应用程序时在我的iOS应用程序中打开页面视图控制器?

来自分类Dev

如何仅在首次运行应用程序时在我的iOS应用程序中打开页面视图控制器?

来自分类Dev

错误:在 angular6 中第一次加载应用程序时,视频不会自动播放

来自分类Dev

使用Heroku,如何在部署应用程序时自动启动不绑定到端口的Java应用程序?

来自分类Dev

配置dwm以自动打开应用程序

来自分类Dev

杀死应用程序时如何调试

Related 相关文章

  1. 1

    如何阻止我的应用程序进行视频录制

  2. 2

    关闭android应用程序时如何播放视频

  3. 3

    用户每次打开应用程序时如何调用函数

  4. 4

    打开应用程序时如何显示密码弹出窗口?

  5. 5

    如何在首次打开应用程序时显示视图?

  6. 6

    用户每次打开应用程序时如何调用函数

  7. 7

    打开应用程序时如何显示已保存的号码?

  8. 8

    打开应用程序时如何消除黑屏

  9. 9

    每次打开应用程序时如何调用片段?

  10. 10

    打开应用程序时如何专注于文本字段?

  11. 11

    如何再次打开应用程序时显示应用程序Qt

  12. 12

    ServletException当打开我的应用程序时

  13. 13

    打开应用程序时的调用方法

  14. 14

    当应用程序在后台iOS中时如何录制视频

  15. 15

    当应用程序在后台ios中时如何录制视频

  16. 16

    奇怪的行为:保存在应用程序中录制的视频?

  17. 17

    切换到打开的应用程序时,停止自动更改工作区

  18. 18

    Android:首次运行应用程序时,共享选项菜单会自动打开

  19. 19

    在Windows上运行应用程序时使文件夹自动打开

  20. 20

    切换到打开的应用程序时停止自动更改工作区

  21. 21

    我的应用程序如何打开 Siri 快捷方式录制短语视图

  22. 22

    如何阻止推送通知自动打开应用程序?

  23. 23

    通过Firebase动态链接打开应用程序后,打开应用程序时,片段会自动跳至导航图的startdestination片段

  24. 24

    如何仅在首次运行应用程序时在我的iOS应用程序中打开页面视图控制器?

  25. 25

    如何仅在首次运行应用程序时在我的iOS应用程序中打开页面视图控制器?

  26. 26

    错误:在 angular6 中第一次加载应用程序时,视频不会自动播放

  27. 27

    使用Heroku,如何在部署应用程序时自动启动不绑定到端口的Java应用程序?

  28. 28

    配置dwm以自动打开应用程序

  29. 29

    杀死应用程序时如何调试

热门标签

归档