三星Galaxy SIII mediaRecorder()问题。 (腐败视频)

时间:2013-08-15 22:04:15

标签: android video samsung-mobile mediarecorder corrupt

我对三星Galaxy SIII有问题。在我们正在创建的应用程序中,我们使用mediaRecorder使用前置摄像头录制用户的视频。我已经仔细查看了文档和所有论坛,我已经看到了一些类似的SII或崩溃的帖子,但遗憾的是这些修复对我们没有用。相机记录的过程如下 - >有一个功能(将提供代码)检查每个设备兼容的相机分辨率,然后我们检查它们是否符合我们的规格(现在它是480p或更少)如果有一个符合这个标准,那么它使用该质量设置videoSize()(由android提供的功能来设置视频的录制大小)。这看起来非常简单,看起来它几乎适用于任何设备。这段代码适用于我们测试过的几种不同的设备(例如Galaxy S4和Galaxy Stellar)。但由于某种原因,SIII非常困难。当您以低于720p的任何分辨率在SIII上录制时,视频会损坏并以多色屏幕播放(下面链接中的屏幕截图)。为什么不在720p +中录制视频呢?不幸的是,我们需要较低的视频大小,因此通过手机提供商网络传输并不是如此繁重的数据负载。

所以我的问题是,为什么录制会以低于720p的分辨率破坏视频,当它使用的分辨率从设备支持的分辨率列表中拉出时?

这是从设备中提取支持的分辨率的功能。

public Camera.Size getSupportedRecordingSizes() {

    Camera.Size result = null;
    Camera.Parameters params = camera.getParameters();
    List<Size> sizes = params.getSupportedPictureSizes();

    for (Size s : sizes) {
        if (s.height < 481 && s.width < 721) {
            if (result == null) {
                result = s;
            } else {
                int resultVideoSize = result.width * result.height;
                int newVideoSize = s.width * s.height;

                if (newVideoSize > resultVideoSize) {
                    result = s;
                }
            }
        }
    }
    if (!sizes.isEmpty() && result == null) {

        Context context = getApplicationContext();
        CharSequence text = "Used default first value";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
        for (Size size : sizes) {
            if (result == null) {
                result = size;
            }
            int previousSize = result.width * result.height;
            int newSize = size.width * size.height;
            if (newSize < previousSize) {
                result = size;
            }
        }

    }
    return (result);
}

这是我们的mediaRecorder的代码(为简单起见缩短了)

mediaRecorder = new MediaRecorder(); 
    setCameraDisplayOrientaion();
    //sets devices supported video size less than or equal to 480p (720x480 resolution).
    Camera.Size vidSize = getSupportedRecordingSizes();

    camera.unlock();
    mediaRecorder.setCamera(camera);
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setOutputFormat(videoFormat);
    mediaRecorder.setAudioEncoder(audioEncoder);
    mediaRecorder.setVideoEncoder(videoEncoder);
    mediaRecorder.setOutputFile(fullQuestionPath);
    if (vidSize == null) {
        mediaRecorder.setVideoSize(480, 360);
    } else {
        mediaRecorder.setVideoSize(vidSize.width, vidSize.height);
    }
    mediaRecorder.setVideoFrameRate(videoFrameRate);
    mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());

     //set the bitrate manually if possible.
    if (android.os.Build.VERSION.SDK_INT > 7) {
        mediaRecorder.setVideoEncodingBitRate(videoBitrate);
    }
try {
        mediaRecorder.prepare();
        mediaRecorder.start();
}
catch (Exception e) {
        Log.e(ResponseActivity.class
                .toString(), e.getMessage());
        releaseMediaRecorder();
    }

与此问题相关的图片在http://imgur.com/a/8F7Tb(很抱歉未提前发布。)

这些图像的顺序如下 - &gt; 1)录制前,预览正在进行中。 2)录制,预览显示当前录制/录制。 3)停止录制,录制已停止和预览。 4)播放,这就是问题所在,它显示了这种多色的损坏图像,如果你直接从设备中取出它就是一样的。

编辑:注意,我也尝试使用CamcorderProfile并将质量设置为低或高。设置为QUALITY_HIGH会强制720p进行录制,但QUALITY_LOW,尽管每个人都有相反的问题,但对我来说不起作用。

编辑:任何人都有想法指出我正确的方向?

0 个答案:

没有答案