当前位置: 代码迷 >> 综合 >> Android报错:mediaRecorder.setVideoSize报错,MediaRecorder﹕ start failed: -19, setVideoSize called in a in
  详细解决方案

Android报错:mediaRecorder.setVideoSize报错,MediaRecorder﹕ start failed: -19, setVideoSize called in a in

热度:8   发布时间:2024-01-03 12:41:20.0

Android报错:mediaRecorder.setVideoSize报错,MediaRecorder﹕ start failed: -19, setVideoSize called in a invalid state -1

      • 报错如何出现?
      • 报错原因
      • 报错如何解决?
      • Android技术生活交流

  • 更多其他页面-自定义View-实用功能合集:点击查看

报错如何出现?

使用mediaRecorder进行录制视频的时候报错
.
MediaRecorder﹕ start failed: -19

报错原因

问题出在了MediaRecorder的其中一个方法 mediaRecorder.setVideoSize(width,height);,没有传入相机支持的视频大小。

报错如何解决?

有两种方法。

  • 1 创建一个相机Object,然后从相机的参数重获取到视频的分辨率大小。这种方法的弊端是必须获取摄像机权限,对于用户体验来说不好。而且如果相机资源被占用,创建相机Object会报错。
   private void getCameraWithAndHeight(){
    Camera camera = Camera.open();Camera.Parameters parameter=camera.getParameters();List<Camera.Size> previewSizeList = parameter.getSupportedPreviewSizes();List<Camera.Size> videoSizeList = parameter.getSupportedVideoSizes();parameter.setPreviewSize(previewSizeList.get(0).width,previewSizeList.get(0).height);int index = bestVideoSize(videoSizeList,previewSizeList.get(0).width);TutorLocalClassData.getInstance().cameraHeight = videoSizeList.get(index).height;TutorLocalClassData.getInstance().cameraWidth = videoSizeList.get(index).width;camera.setPreviewCallback(null);camera.stopPreview();camera.release();}
    //查找出最接近的视频录制分辨率private static int bestVideoSize(List<Camera.Size> videoSizeList , int _w){
    //降序排列Collections.sort(videoSizeList, (lhs, rhs) -> Integer.compare(rhs.width, lhs.width));for(int i=0;i<videoSizeList.size();i++){
    if(videoSizeList.get(i).width<_w){
    return i;}}return 0;}
  • 2.这种方法比较推荐,通过windowManager和DisplayMetrices获取到设备屏幕的像素点长宽,再将其转换为dp。
            WindowManager manager = getWindowManager();DisplayMetrics outMetrics = new DisplayMetrics();manager.getDefaultDisplay().getMetrics(outMetrics);int width = px2dip(this,outMetrics.widthPixels);int height = px2dip(this,outMetrics.heightPixels);int dpi =outMetrics.densityDpi;
    private int px2dip(Context context, float pxValue) {
    final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}

Android技术生活交流

微信



  相关解决方案