android - 批量写入样本时,Mediamuxer 会生成损坏的视频

标签 android video android-mediacodec mediamuxer

我正在尝试使用 Android 的 MediaMuxer 和 MediaCodec 来制作 MP4 视频。

如果我通过调用 writeSampleData() 将帧从编解码器直接抽取到多路复用器,则一切正常并生成正确的视频。

但是,如果我尝试先将这些帧存储在一个数组中,然后决定将它们发送到混合器,那么即使演示时间戳是正确的,我也无法制作出有效的视频。

出于某种原因,似乎 mediamuxer 输出不仅取决于呈现时间戳,还取决于调用“writeSampleData”的实际时间,尽管据我所知,拥有正确的时间戳就足够了。

任何人都可以阐明这个问题吗?

最佳答案

谢谢 mstorsjofadden .我实际上遇到了一系列错误,这些错误让我无法理解到底发生了什么。你的两个问题都让我找到了正确的代码,并确信使用 writeSampleData() 对时间不敏感。

是的,我第一次得到错误的缓冲区。这个问题最初并没有引起注意,因为在缓冲区被重写之前,复用器正在写入帧。当我引入延迟并决定复制缓冲区内容时,我遇到了另一个问题(基本上是竞争条件)并得出结论并非如此。

此代码(针对 SmartPolicing 项目)的作用是捕获视频和音频以创建 MP4 文件。我可以使用 MediaRecorder(这是最初的解决方案),但我们还想拦截帧并通过网络流式传输视频,因此我们放弃了 MediaRecorder 并创建了一个自定义解决方案。

现在一切顺利。非常感谢,伙计们。

关于android - 批量写入样本时,Mediamuxer 会生成损坏的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707410/

相关文章:

video - 如何使用ffmpeg添加对角向上效果的叠加层?

android - 如何用 RecyclerView 完全替换 listView/GridView?

android - 操作栏仅在搜索 View 旁边显示一项

html - 垂直对齐表格单元格中的视频

java - 带 JNA 的 x264 编码器

android - 使用 renderscript 进行处理,使用 mediacodec 进行编码

android - MediaCodec 创建输入表面

android - Gradle 同步失败 : Could not determine artifacts for com. android.support :recyclerview-v7:24. 0.0

android - 刷新 ListPreference

android - 使用 MediaCodec 和 Camera2 API 录制视频