7

我正在尝试编写一个应用程序,通过读取 .mp4 文件并在写入文件时上传字节来记录 Android 手机中的视频。问题是,据我所知,在视频录制完成并关闭视频文件之前,moov atom 和其他一些分类数据似乎没有写入文件。有没有办法处理视频文件并在服务器端添加这些元数据,假设要么

  1. 完整的视频文件已上传(但没有 moov atom 或任何其他未在第一遍中写入的数据)
  2. 只有部分视频已上传(例如前 10 秒),我想将其转换为包含已上传视频片段的有效 mp4 文件。

我看过像http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system之类的链接,但他们通过简单地说明来掩盖问题

所以接收到的流必须在录制完成后修复,或者原始视频/音频帧必须由服务器处理。

没有确切解释如何去做。

4

1 回答 1

5

正如您所注意到的,MP4 格式在这种情况下可能难以使用。我怀疑链接的博客文章没有详细介绍“修复”,因为它可能涉及很多。除了编写 mdat 框的缺失大小字段之外,您还需要生成 ftyp 和 moov 框。如果您真的需要一个端到端的 MP4 解决方案,ISO 14496-12ISO 14496-14将比您想知道的更多地告诉您如何构建这些数据结构。

但是,您可能会发现更优雅的解决方案是使用实际上适合实时处理的格式。换句话说,在 Android 端,将视频流重新混合为实时格式并将其发送到服务器。在服务器端,您可以非常灵活地处理视频:您可以将整个视频重新混合回 MP4,您可以切片和切块,制作 10 秒的块,或其他任何方式。开源 Sipdroid 项目包含一些演示如何将实时视频重新混合到 RTP 中的代码。(您可能更喜欢可靠的传输格式——RTP over TCP,或者其他的——原理是一样的。)

于 2012-04-25T17:23:19.160 回答