9

你好 Android 视频专家 :)

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

我经历了一场只能被描述为一场彻头彻尾的噩梦,试图在一系列 Android 设备上以相当低的比特率可靠地捕获视频。

据我了解,有两种在 Android 上捕获视频的方法:

1) 使用媒体记录器/相机 API

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

选项 1) 提供了最大的灵活性,并允许我们轻松更改捕获分辨率。然而,Android Camera API 在一系列设备上并不可靠,而且我有非常好的信息(包括与谷歌在这个问题上联络的人),如果你使用这个 API 捕获视频,那么它会在 50% 的设备上崩溃那里的设备。Zoom Camera FX 使用 Intent 进行视频捕捉是有原因的。Zoom Camera(不同的应用程序)似乎使用媒体记录器,但有很多关于视频崩溃或无法正常工作的差评。

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

我知道我可以使用 ffmpeg 之类的库在捕获后更改视频的分辨率。但是,这需要我为 Android 编译库,而且我被告知,为了在设备上合法使用解码/编码编解码器,您必须支付每份应用程序约 1 美元的许可费。由于此应用程序将免费使用,因此这不是一个选项。

这就是我所在的位置。我一直在寻找答案,但我不知道如何使用 Android 可靠地捕获低分辨率视频。

非常感谢任何帮助!

马修

4

3 回答 3

2

MediaRecorder您可以通过设置 Frame size在类中准确定义(width x height),使用方法 the setVideoSize(int width, int height),帧大小越小视频越小,这适用于所有 Android 手机,您无需更改每个设备的帧大小,或者您可以编码比特率,它控制每一帧的压缩质量。使用方法setVideoEncodingBitRate (int bitRate),较低的比特率会导致较高的压缩率,这反过来会导致较低的质量和较小的视频文件大小。好好看看MediaRecorder课堂。

于 2015-10-26T09:40:57.773 回答
1

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

您可以检查平台版本仪表板以估计给定 API 级别的目标市场规模。

于 2014-01-19T18:01:08.873 回答
0

我认为您可以使用getSupportedPictureSizes来获取每个移动相机中支持的最小尺寸,然后您可以在SetVideoSize(width, height)中使用 mediaRecorder 和这些参数

于 2013-04-24T10:11:25.193 回答