android 如何在MP4视频文件中添加MOOV原子[已关闭]

bgtovc5b  于 12个月前  发布在  Android
关注(0)|答案(7)|浏览(178)

**已关闭。**此问题不符合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文件的原子最终生成。但我必须在服务器上播放该文件,而记录意味着生活。我通过源代码的SPYDROIDSIPROID但它们都不工作。我试图使用FFMPEG在服务器端添加moov atom,但没有成功。任何人都有一个想法,我如何才能实现这一点?

disbfnqx

disbfnqx1#

有一个工具untrunc声称修复未完成(截断)的mp4,m4v,mov,3gp视频.我还没有自己测试,但它可能值得一试.

a14dhokn

a14dhokn2#

你遇到了一个问题。moov框是一种目录。如果不是所有的内容都在那里,你就不可能有一个完整的目录。哎哟!
如果你想坚持使用MP4,如果你是自己写的文件,你可以写文件作为所谓的碎片MP4文件。一个碎片MP4文件包含多个独立的小片段的视频-每个都有自己的目录。这将使您能够播放文件之前,完整的记录已经完成。
如果你不需要坚持使用MP4,一个选择是将原始的h264流写入服务器。这样你就没有那种内容表了。VLC可以播放原始的h264流。

az31mfrm

az31mfrm3#

可以使用FFMpeg将moov原子移动到视频文件的开头。

ffmpeg -i input_video_file.mp4 -vcodec copy -acodec copy -movflags faststart output_video_file.mp4

字符串

iklwldmw

iklwldmw4#

运行qt_faststart将moov原子移动到流的开头。

qt-faststart in.mp4 out.mp4

字符串

nvbavucw

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?

l0oc07j2

l0oc07j26#

使用MP4Box移动MOOV原子在文件的开始和交错成块流。

MP4Box test.mp4 test.mp4

字符串

irlmq6kh

irlmq6kh7#

将这个库添加到你的gradle中:**compile 'net.ypresto.qtfaststartjava:qtfaststart:0.1.0'**然后

File input = new File(path + "/input.mp4"); // Your input file
File output = new File(path + "/output.mp4"); // Your output file
try{
    if(!output.exists()) // if there is no output file we'll create one
        output.createNewFile();
    }
}catch (IOException e){
    Log.e("TAG", e.toString());
}

try{
    QtFastStart.fastStart(input, output); // Adds moov to your input
                                          // Now your output file is ready to stream!
}catch (QtFastStart.MalformedFileException m){
    Log.e("QT", m.toString());
}catch (QtFastStart.UnsupportedFileException q){
    Log.e("QT", q.toString());
}catch (IOException i){
    Log.e("QT", i.toString());
}

字符串
就这些

相关问题