如何在录制时从(n个Android)手机上传视频

vel*_*ian 6 video mp4 android video-encoding video-streaming

我正在尝试编写一个从Android手机上传视频的应用程序,因为它们是通过读取.mp4文件并在写入文件时上传字节来记录的.问题是,据我所知,在视频录制完成且视频文件已关闭之前,moov原子和其他一些类似的数据似乎没有被写入文件.是否有任何方法可以处理视频文件并在服务器端添加这些元数据

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

我已经看到像http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system这样的链接,但他们只是简单地说明问题

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

没有完全解释如何去做.

Dav*_*ons 5

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

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