2012-04-22 40 views
6

我正在尝试编写一个应用程序,可以从Android手机上传视频,因为它们是通过从.mp4文件读取并上传字节进行录制的写入文件。问题是,据我所知,moov原子和其他一些分类的数据似乎没有写入文件,直到视频记录完成并且视频文件已关闭。有什么办法来处理视频文件,并在服务器端添加这些元数据假设:如何从录制的(n Android)手机上传视频

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

我见过像http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system联系,但他们粉饰问题,通过简单的声明

所以接收到的数据流将不得不被调整的录制结束后,或原始视频/音频帧必须由服务器处理。

没有解释如何去做到这一点。

回答

4

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

但是,您可能会发现更优雅的解决方案是使用实际适用于实时处理的格式。换句话说,在Android方面,将视频流转换为实时格式并发送到服务器。在服务器端,您可以非常灵活地处理视频:您可以将整个视频重新制作成MP4,您可以切片并制作10秒的大块或其他任何内容。开源的Sipdroid项目contains some code演示了将实时视频转换为RTP。 (你可能更喜欢可靠的传输格式--RTP over TCP,或其他 - 原理是一样的。)

+0

感谢您的建议。我现在正在查看使用FLV作为传输格式的ipcamera-for-android项目。如果我无法获得该大道的工作,我会看看Sipdroid。 – velocipedestrian 2012-04-30 14:25:56