Android MediaRecorder API会裁剪视频比特率

6
我正在使用MediaRecorder API进行工作,我以为所有问题都已经解决了,但我想我错了。
我正在使用MediaRecorder API将视频录制到文件中。当我使用高质量的setProfile时,视频质量很好,但是当我尝试手动设置参数(如下面的代码)时,视频质量很差(因为某种原因比特率被剪裁了)。我想要获得720p和1fps的视频质量。
我一直收到以下警告: WARN/AuthorDriver(268): 视频编码比特率设置为480000 bps 我运行的代码:
m_MediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
m_MediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
m_MediaRecorder.setVideoSize(1280, 720);
m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
m_MediaRecorder.setVideoFrameRate(1);
m_MediaRecorder.setVideoEncodingBitRate(8000000);

有什么想法吗? 非常感谢。
2个回答

7

找到了解决方案...非常奇怪。 在设置压缩类型之前设置位速率,以某种方式解决了问题。 唯一的问题是这是否是谷歌代码中的一个bug或者我没有理解的其他问题。

m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
m_MediaRecorder.setVideoFrameRate(1);
m_MediaRecorder.setVideoEncodingBitRate(8000000);

解决方案:

m_MediaRecorder.setVideoEncodingBitRate(8000000);
m_MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
m_MediaRecorder.setVideoFrameRate(1);

2
setVideoEncodingBitRate() 的文档说明如下:
设置录制视频的编码比特率。在prepare()方法之前调用此方法。有时候prepare()会对参数进行检查以确保所指定的比特率是适用的,有时传递的bitRate将被内部裁剪,以确保基于平台的能力可以平滑地进行视频录制。
由于MediaRecorder API处理某种硬件编码芯片,该芯片因设备而异,无法总是提供您要求的每个编解码器、帧大小、帧速率和编码比特率的组合。
您的需求有些不寻常,因为您正在尝试以1 fps的速度进行录制。如果您正在为Honeycomb开发应用程序,则可以使用“时间间隔”API for MediaRecorder以及相关的setCaptureRate()调用可能会有用。

谢谢回复。首先,我不是非常需要1帧每秒,这只是为了表明问题不是CPU。我不理解的是:为什么当使用SetProfile(高质量)时,它可以正常工作,但是当我将所有在高质量配置文件中设置的参数手动设置时,它却无法工作。 - Lior Ohana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接