【问题标题】:MediaRecorder start called in invalid state: 4MediaRecorder start 在无效状态下调用:4
【发布时间】:2020-08-26 19:29:49
【问题描述】:

我刚刚开始涉足 android/Glass 开发,我正在尝试添加基本的视频录制功能。目前,Glass 将您限制为 10 秒,除非您再次点击/按下按钮,而我想绕过这一点,只需要一个开放式录像机。

我跟着相机API演练:

并引用了另一个project

到目前为止,我的代码如下所示:

private void startRecording()
{
    try{
    camera = Camera.open();
    mediaRecorder = new MediaRecorder();
    surfaceView = new CamSurfaceView(this, camera);

    try {
        camera.setPreviewDisplay(surfaceView.getHolder());
    } catch (IOException e1) {

    }
    camera.startPreview();
    camera.unlock();
    mediaRecorder.setCamera(camera);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setProfile(CamcorderProfile.get(MediaRecorder.OutputFormat.MPEG_4));
    mediaRecorder.setOutputFile(getOutputMediaFile().toString());
    mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());

    try{
    mediaRecorder.prepare();
    }
    catch(IllegalStateException e){

    }
    catch(IOException e){

    }
    mediaRecorder.start();  //Code failure occurs here.
    }
    catch(Exception e)
    {
        if(mediaRecorder != null)
            mediaRecorder.release();
        if(camera != null)
            camera.release();
    }
}
private Uri getOutputMediaFile()
{
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory()+File.separator+"DCIM/Camera");

    File[] files =mediaStorageDir.listFiles();

    if(!mediaStorageDir.exists())
    {
        if(!mediaStorageDir.mkdirs())
        {
            Log.d("KarmaCam","Failed to create directory");
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File file = new File(mediaStorageDir.getPath() + File.separator+ "VID_"+timeStamp+".mp4");
    return Uri.fromFile(file);

}

我的 SurfaceView:

public class KarmaCamSurfaceView extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder mHolder;
private Camera mCamera;

public CamSurfaceView(Context context, Camera camera) {
    super(context);
    mCamera = camera;
    mHolder = getHolder();
    mHolder.addCallback(this);      
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int weight, int height) {

    if(mHolder.getSurface() == null)
        return;     
    try
    {
        mCamera.stopPreview();  
    }
    catch(Exception e)  {}

    try
    {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
    }
    catch(Exception e){}        
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    try
    {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    }
    catch(Exception e){}

}

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

}

我见过其他人有类似的问题/问题,他们通常是围绕不正确的输出文件名格式发生的。据我所知,我的会很好,但我很好奇目录路径是否有效。这是存储内置 Glass 视频的位置。

【问题讨论】:

    标签: android video google-glass


    【解决方案1】:

    将您的位置更改为:

     Environment.getExternalStorageDirectory() + File.separator 
                + Environment.DIRECTORY_DCIM + File.separator + "FILE_NAME";
    

    这对我有用。希望对您有所帮助!

    【讨论】:

    • 这行得通,谢谢!
    【解决方案2】:

    尝试将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 添加到您的AndroidManifest.xml

    【讨论】:

      【解决方案3】:

      打开 AndroidManifest 文件并在应用程序标签内添加此

      android:requestLegacyExternalStorage="true"
      

      【讨论】:

        【解决方案4】:

        我在某些 Android 设备上遇到了同样的问题。我正在使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) 作为MediaRecorder 实例的输出。看了is3av的回答,我把输出路径改成Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),问题就解决了。

        似乎有些手机不允许将文件写入Environment.DIRECTORY_MOVIES 路径或该路径不存在。

        【讨论】:

          猜你喜欢
          • 2021-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-06
          • 1970-01-01
          • 2013-11-02
          相关资源
          最近更新 更多