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可靠地捕获低分辨率视频。
非常感谢任何帮助!
马修
答案 0 :(得分:2)
您可以通过设置帧大小MediaRecorder
在(width x height)
类中精确定义,使用方法setVideoSize(int width, int height)
,帧大小越小视频越小,这适用于所有Android电话,您不需要更改每个设备的帧大小,或者您可以编码比特率,这可以控制每个帧的压缩质量。使用方法setVideoEncodingBitRate (int bitRate)
较低的比特率会导致较高的压缩率,从而导致较低的质量和较低的视频文件大小。仔细看看MediaRecorder
课程。
答案 1 :(得分:1)
如果您将API 18及更高版本作为目标,则可以同时使用Camera
和MediaCodec
以任意大小和比特率进行录制。例如,请参阅Grafika中的“显示+捕捉相机”活动。
您可以查看platform version dashboard以估算给定API级别的目标市场规模。
答案 2 :(得分:0)
我认为您可以使用getSupportedPictureSizes获取每个移动摄像头支持的最小尺寸,并且可以在SetVideoSize(width, height)
中使用带有这些参数的mediaRecorder