如何在各种设备上可靠地捕获Android上的低分辨率视频?

时间:2013-04-23 22:00:09

标签: android video ffmpeg video-capture

Hello Android视频专家:)

我正在开发一个Android应用程序,它允许用户捕获视频并将其上传到远程服务器(它比这更复杂,但应用程序的其余部分并不重要)。由于上传要求,视频的大小合理,因此不是超高分辨率。假设最大值为680x480或10Mb /分钟。这对Apple设备没有问题。

我曾经有过一个完全噩梦,试图在一系列Android设备上以可靠的低比特率捕获视频。

据我了解,有两种方法可以在Android上捕捉视频:

1)使用Media Recorder / Camera API

2)使用Intent打开摄像机视频捕获应用程序

选项1)提供最大的灵活性,并允许我们轻松更改捕获分辨率。然而,Android Camera API在各种设备上都不可靠,而且我有非常好的信息(包括那些在这个问题上与Google联系的人),如果你使用这个API捕获视频,那么它会在50%的那里的设备。 Zoom Camera FX使用Intent进行视频捕捉是有原因的。 Zoom Camera(不同的应用程序)似乎使用Media Recorder,但是对于视频崩溃或不工作有很多不好的评论。

选项2)适用于各种设备,因为它使用设备上的内置应用程序。问题是你无法控制分辨率,Intent上有质量提示,但相机应用程序通常会忽略这一点。我的三星Galaxy S3默认以约2Mb / s的速度录制视频。这是太高的分辨率。内置的应用程序当然可以改变分辨率,但这依赖于用户难以控制的动作。

我知道我可以使用像ffmpeg这样的库来在捕获后更改视频的分辨率。然而,这需要我为Android编译库,而且我也被告知,为了在设备上合法使用解码/编码编解码器,您必须支付每个应用程序副本大约1美元的许可费。由于此应用程序可以免费使用,因此不能选择。

这就是我所在的地方。我一直在寻找答案,但我无法弄清楚如何使用Android可靠地捕获低分辨率视频。

非常感谢任何帮助!

马修

3 个答案:

答案 0 :(得分:2)

您可以通过设置帧大小MediaRecorder(width x height)类中精确定义,使用方法setVideoSize(int width, int height),帧大小越小视频越小,这适用于所有Android电话,您不需要更改每个设备的帧大小,或者您可以编码比特率,这可以控制每个帧的压缩质量。使用方法setVideoEncodingBitRate (int bitRate)较低的比特率会导致较高的压缩率,从而导致较低的质量和较低的视频文件大小。仔细看看MediaRecorder课程。

答案 1 :(得分:1)

如果您将API 18及更高版本作为目标,则可以同时使用CameraMediaCodec以任意大小和比特率进行录制。例如,请参阅Grafika中的“显示+捕捉相机”活动。

您可以查看platform version dashboard以估算给定API级别的目标市场规模。

答案 2 :(得分:0)

我认为您可以使用getSupportedPictureSizes获取每个移动摄像头支持的最小尺寸,并且可以在SetVideoSize(width, height)

中使用带有这些参数的mediaRecorder