Android 如何在不丢帧的情况下录制 720p 视频

How to record 720p videos without dropping frames in Android

我使用 NDK 为 android 编译了 ffmpeg 和 h264 库。 我正在使用 ffmpeg 库中的 muxing.c 示例录制视频。一切正常(仍然没有处理音频)但相机丢帧并且保存每一帧需要大约 100 毫秒,这是不可接受的。

我也试过制作一个队列并将它们保存到另一个线程(我们称之为 B),但最后我需要等待大约 120 秒,因为后台线程 (B) 仍在记录帧。

除了减小视频大小之外,是否有解决此问题的方法?理想情况下,我想实时保存帧,至少减少保存时间。难道只是Android做不到这一点? .

首先,检查硬件编码器是否可以更好地为您提供服务(通过 Java 中的 MediaRecorder 或 MediaCodec,或者使用本机代码中的 OpenMax)。

如果出于某种原因您必须在软件中编码,并且您的设备是多核的,您可以通过编译 x264 以使用切片多线程来获得很多好处。让我cite my post of 2 years ago:

We are using x264 directly (no ffmpeg code involved), and with ultafast/zerolatency preset we get 30 FPS for VGA on Samsung Note10 (http://www.gsmarena.com/samsung_galaxy_note_10_1_n8000-4573.php) with Quad-core 1.4 GHz Cortex-A9 Exynos 4412 CPU, which is on the paper weaker than Droid's Quad-core 1.5 GHz Krait Qualcomm MDM615m/APQ8064 (http://www.gsmarena.com/htc_droid_dna-5113.php).

Note that x264 build scripts do not enable pthreads for Android (because NDK does not include libpthread.a), bit you can build the library with multithread support (very nice for a Quad-core CPU) if you simply create a dummy libpthread.a, see https://mailman.videolan.org/pipermail/x264-devel/2013-March/009941.html.

请注意,编码器设置只是问题的一部分。如果您使用 已弃用 相机 API,您应该使用预分配缓冲区和后台线程进行相机回调,正如我所解释的 elsewhere