我对三星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,尽管每个人都有相反的问题,但对我来说不起作用。
编辑:任何人都有想法指出我正确的方向?