**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受答案。
此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
一年前关闭。
社区在1年前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question的
我正在使用Android中的实时设备到服务器流媒体。我能够在服务器上以字节发送数据,但当我在服务器上录制期间播放该文件时VLC说没有找到MOOV原子。经过大量的解决方案,我发现MOOV一个mp4文件的原子最终生成。但我必须在服务器上播放该文件,而记录意味着生活。我通过源代码的SPYDROID和SIPROID但它们都不工作。我试图使用FFMPEG在服务器端添加moov
atom,但没有成功。任何人都有一个想法,我如何才能实现这一点?
7条答案
按热度按时间disbfnqx1#
有一个工具untrunc声称修复未完成(截断)的mp4,m4v,mov,3gp视频.我还没有自己测试,但它可能值得一试.
a14dhokn2#
你遇到了一个问题。moov框是一种目录。如果不是所有的内容都在那里,你就不可能有一个完整的目录。哎哟!
如果你想坚持使用MP4,如果你是自己写的文件,你可以写文件作为所谓的碎片MP4文件。一个碎片MP4文件包含多个独立的小片段的视频-每个都有自己的目录。这将使您能够播放文件之前,完整的记录已经完成。
如果你不需要坚持使用MP4,一个选择是将原始的h264流写入服务器。这样你就没有那种内容表了。VLC可以播放原始的h264流。
az31mfrm3#
可以使用FFMpeg将moov原子移动到视频文件的开头。
字符串
iklwldmw4#
运行qt_faststart将moov原子移动到流的开头。
字符串
nvbavucw5#
mp4格式需要moov atom信息来播放视频,并且要生成moov atom视频必须完成,您不能在录制时播放mp4文件,因为您仍然没有创建moov atom部分的所有信息。
你想要做的是某种实时流媒体(播放时正在重播),所以你需要使用另一种格式。HLS流媒体和mpeg-dash将视频存储在小块(2秒到10秒)中并发送给用户,这样用户就可以一个接一个地播放许多完成的文件。
As @Sebastian Annies suggested,创建许多微小的mp4文件和连接是相同的方法:有微小的完成文件和播放作为一个列表,在这里你可以得到更多的信息What exactly is Fragmented mp4(fMP4)? How is it different from normal mp4?
l0oc07j26#
使用MP4Box移动MOOV原子在文件的开始和交错成块流。
字符串
irlmq6kh7#
将这个库添加到你的gradle中:**compile 'net.ypresto.qtfaststartjava:qtfaststart:0.1.0'**然后
字符串
就这些