Roh*_*ark 11 video android ffmpeg mediarecorder mediacodec
我正在为Android开发视频录制和共享应用程序.该应用程序的规格如下: -
从研究中我做了SO和其他人的来源,我发现了以下内容(如果我错了请纠正我): -
这三个选项及其各自的特点是: -
1. Ffmpeg
2. MediaRecorder
3. MediaCodec
花了好几天后,我仍然无法弄清楚哪种方法适合我的特定用例.请详细说明我应该为我的申请做些什么.如果有一种完全不同的方法,那么我也对此持开放态度.
我最大的标准是视频编码过程尽可能高效,并且要存储在云中的视频应该具有尽可能低的空间使用率,而不会影响视频质量.
另外,如果您可以建议在Firebase存储中保存和分发视频的相应格式,我将不胜感激,并指出我建议方法的教程或示例.
先感谢您!很抱歉长时间阅读.
小智 14
您对此主题的概述适用于这一点.我只会在这个主题上加上我的2美分,你可能会错过这个主题:
1.FFMpeg
+/-如果您构建自己的SO,那么您可以将大小减小到大约2-3 MB,具体取决于用例.编辑6000行的buildscript需要花费时间和精力
++支持多种格式(几乎所有)
++每个设备的结果都相同
++支持任何分辨率
- 由于SW-En- /解码而导致高能耗,同时也使其变慢.有一个插件支持lib-stagefright,但它在许多设备上都不起作用(截至2016年5月)
- 根据您的位置和用例,许可可能会有问题.我不是律师,但我们就这个主题进行了法律咨询,而且非常复杂.
2. MediaRecorder
++最容易实现(简单访问mediacodec/libstagefright)原始数据直接传递给编码器,所以没有乱码
++ HW在大多数设备上加速.使其快速节能.
++延迟仅适用于直播
- 取决于硬件制造商的实施
- 结果可能因设备而异
++没有许可问题
3.MediaCodec
+/-大多数2.MediaRecorder也适用于此(除了易用性)
++最灵活地访问HW-en- /解码
- 难以用于未被考虑的案例(例如混合来自不同来源的视频)
+/-可以消除流式传输的延迟(虽然很棘手)
--HW制造商有时不能正确实现(例如,如果来自某些DLSR的实时数据被送入编码器,三星Galaxy S5有时会产生SIG-SEV.工作正常一段时间,然后突然间它是SIG- SEV.这可能是dslr的错,但是SIG-SEV是不可避免的并且崩溃应用程序,这最终是app开发者的错;))
- 如果没有MediaMuxer,您需要对媒体容器有充分的了解或依赖第三方库
该列表显然不完整,有些点可能不正确.我上次与视频合作的时间差不多是半年前的事了.
至于你的用例,我建议使用MediaRecorder,因为它是最容易实现的,在所有设备上都支持,并提供了大量的质量/大小选项.FFMpeg在相同的存储容量下可以产生更好的效果,但需要更长时间(极端情况下,DSLR实时素材的编码速度提高了30倍),并且耗能更多.据我了解你的用例,没有必要摆弄MediaCodec因为你只想编码和解码.
我建议使用VP8或9,因为你不会遇到许可问题.我再也不是律师,但在你自己的服务器上分发H264可能会让你成为一个广播电台,所以我被告知.
希望这有助于您做出决策