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

7
我正在尝试编写一个应用程序,从 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,但它们简单地说明了问题:

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

而没有解释具体如何操作。

1个回答

5

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

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

谢谢您的建议。我现在正在研究ipcamera-for-android项目,该项目使用FLV作为传输格式。如果我无法让这个方案起作用,我将看看Sipdroid。 - velocipedestrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接