Dan*_*ith 2 video android aspect-ratio android-camera mediarecorder
根据Camera.Parameters#getPreferredSizeForVideoPreview文档:
我们建议您选择与要录制的视频分辨率具有相同宽高比的预览尺寸
我发现,在某些设备(Galaxy S3)上,选择具有不同宽高比的视频录制尺寸确实会导致录制视频(绿色/紫色视频)的问题.
当我遵循文档的建议并坚持相同的宽高比时,它大部分都有效,但在某些设备(Nexus S/Android 4.0.4)上,调用MediaRecorder.start()失败并显示以下消息:
E/MediaRecorder? start failed: -19
Run Code Online (Sandbox Code Playgroud)
在其他设备(HTCEVOV4G/Android 4.0.3)上调用MediaRecorder.stop失败并显示以下消息:
E/MediaRecorder? stop failed: -1007
Run Code Online (Sandbox Code Playgroud)
但是,我确实发现,如果我MediaRecorder#setVideoSize使用与相机预览尺寸完全相同的尺寸进行调用,则视频录制将起作用.
显示此问题的设备似乎有一个共同点.调用Camera.Parameters#getSupportedVideoSizes()all返回null!根据文档getSupportedVideoSizes,该函数将返回:
如果摄像机具有单独的预览和视频输出,则返回 Size对象的列表; 否则,返回null.
这意味着,对于这些设备,相机的预览和视频输出是相同的,因此设置不同的尺寸,无论纵横比如何,都会导致问题.
这可以通过对相机预览大小(Camera.Parameters#setPreviewSize)和视频录制大小(MediaRecorder #setVideoSize)使用相同的尺寸来修复.
但需要注意的是,并非所有使用相同预览和视频输出的设备都会遇到此问题.例如,HTC One Mini(Android 4.4.2)将动态更改其预览分辨率以匹配视频录制分辨率.虽然没有得到确认,但我的测试让我相信,当使用a SurfaceView作为记录表面而不是使用a 时,这是一个问题TextureView.4.1之前,似乎接受了TextureView不支持录制,所以ICS及以下你需要确保你的预览和视频大小匹配,但在JB +中,似乎并不重要.这可能与设备有很大关系,我还没有证实这个理论.
啊,是的,安卓的狂野世界!
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |