gpt4 book ai didi

android - android MediaRecorder 中的 Moov atom 记录数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:38:17 26 4
gpt4 key购买 nike

我有一个问题:

我在我的 Android 应用程序中使用 MediaRecorder 从相机记录数据。我将它保存在套接字中,而不是文件中。此数据的长度可能不同。在套接字连接的另一端,我将它保存在文件中。连接可能会在任何意外的时刻中断。因此,在 android 套接字断开连接后,我尝试使用 ffmpeg 解码接收到的数据。但据我所知,它无法在此文件中找到 moov 原子。我读过一些关于 moov 的信息,所以我认为 MediaRecorder 将 moov atom 放在文件末尾。但如果记录被中断,则跳过写入 moov atom。

我还读到,对于长度未知的数据(渐进式加载、流式传输),可以在文件开头写入 moov atom。

如何将自己的 moov 数据写入流中?我可以为此使用 MediaRecorder 吗?还是必须手动操作?如何生成有效的 moov 数据?如果有人已经解决了这个问题,请给我建议..

最佳答案

“moov”原子包含播放器解码媒体所需的信息。对于许多格式,没有 moov 原子的 mp4 或 mov 文件只是垃圾。

在大多数情况下,moov 会附加在末尾。这是因为无法提前预测 moov 原子的内容。如果它位于开始位置并不断更新,这没有什么不同。后者的好处是如果流中断或停止,文件仍然可以播放。换句话说,简单地将它放在开头对您没有帮助,因为您仍然需要持续更新它。

不幸的是,在处理媒体方面,Android 远不及 iOS。如果您找到使用 Android 库解决此问题的方法,我会感到惊讶。我没有特别使用 MediaRecorder 的经验,但 MediaCodec 类对此没有提供任何信息,在简要查看 MediaRecorder 文档后,它看起来像这里的相同问题。

现在... h264 流可以在没有 mp4 header 的情况下播放,因为它包含一些它自己的元数据。这将允许您在套接字另一端的应用程序仍然使用数据。您可以为此使用适用于 Android 的 ffmpeg。只需将字节写入扩展名为 .h264 的文件,然后在传输完成后将其多路复用为 mp4 文件。如果您有音频,同样如此。

编辑:如果您不能发送原始 h264 数据,那么您会在 mp4 文件的“mdat”原子中找到它,但您需要单独处理音频,否则您将无法分辨音频和视频分离。

关于android - android MediaRecorder 中的 Moov atom 记录数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com