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

标签 android video ffmpeg video-capture

您好 Android 视频专家:)

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

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

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

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

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

选项 1) 提供了最大的灵 active ,并允许我们轻松更改捕获分辨率。然而,Android Camera API 在一系列设备上并不可靠,而且我有非常好的信息(包括来自与 Google 就此问题进行联络的人),如果您使用此 API 捕获视频,那么它会在 50% 的设备上崩溃那里的设备。 Zoom Camera FX 使用 Intent 进行视频捕获是有原因的。 Zoom Camera(不同的应用程序)似乎使用 Media Recorder,但有很多关于视频崩溃或不工作的差评。

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

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

这就是我所在的位置。我搜索了很长时间来寻找答案,但我无法弄清楚如何使用 Android 可靠地捕获低分辨率视频。

非常感谢任何帮助!

马修

最佳答案

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

关于android - 如何在 Android 上跨各种设备可靠地捕获低分辨率视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179919/

相关文章:

c - VLC3编译错误: linking issue with the libavutil library

FFMPEG 和 CPU 利用率

java - 带有空字段的 Parcelable 对象

android - 如何显示从一个 Activity 到另一个 Activity 的 toast

android - 当用户不关注该 editText 时显示 EditText 错误

FFmpeg 输入问题

android - 我们如何在android中使用带有图像的自定义进度条

ios - 传递给不同 Controller 时 AVPlayer 持续时间会发生变化

video - 服务器端视频编辑

HTML5 视频未在 Safari 中显示