2012-07-17 359 views
13

我正在从事Android设备上的实时设备到服务器流式传输。我能够在服务器上以字节发送数据,但是当我在服务器上录制期间播放该文件时VLCMOOV原子未找到。在很多解决方法之后,我发现最后生成的mp4文件的原子会生成MOOV。但是我必须在服务器上播放该文件,而录制则意味着直播。我通过SPYDROIDSIPDROID的源代码,但他们都不工作。我试图使用FFMPEG在服务器端添加移动原子,但没有得到任何成功。任何人都有任何想法,我怎么能实现这一点。提前Thanx。如何在mp4视频文件中添加MOOV原子

回答

2

运行qt_faststart将moov原子移动到流的开始位置。

qt-faststart in.mp4 out.mp4 
+0

乌拉圭回合rply喜d33pika..thnx,我想给在服务器上的视频数据同时记录,但MOOV原子录制完成,以便这就是为什么我认为QT-的fastStart不会有所帮助这里后产生。 – Ravinder 2012-07-19 07:12:35

+0

你解决了你的问题@Ravinder?我现在正在尝试完全一样,并没有看到可行的解决方案。如果你知道,请在这里发表评论。 – 2014-11-16 18:33:36

+0

如何在android中使用qt-faststart?有人可以发布示例代码吗? – 2016-06-23 04:49:14

6

你有问题。 'moov'框是一种内容表。如果不是所有的内容都在那里,你就无法获得完整的目录。哎哟!

如果你想坚持使用MP4,并且如果你自己编写文件,你可以将文件编写为所谓的分段MP4文件。碎片化的MP4文件包含多个视频独立的小部分 - 每个都有自己的目录。这将使您能够在完整录制完成之前播放该文件。

如果你不需要坚持使用MP4,一个选项是将原始h264流写入服务器。那么你没有那种内容表。 VLC可以播放原始的h264流。

+0

您好sebsatian,我不能够在视频录制时获得Android的行数据,请问我可以如何实现这一点。 – Ravinder 2012-07-19 07:13:28

+0

我知道MP4,但不是特别的Android。也许你应该创建一个新的问题。 – 2012-07-19 12:49:46

+0

这样做的另一种方法可能是只记录一两秒钟,然后在服务器上重新连接?! – 2012-07-20 09:58:03

3

使用MP4Box将MOOV原子移动到文件开始处,并将交错存储到数据流中。

MP4Box test.mp4 test.mp4 
+3

它不适合我。返回: 错误 - 指定了2个输入名称,请检查使用情况 MP4Box版本0.5.0-rev4065 – 2013-10-12 19:05:45

0

添加到您的这个gradle这个LIB:编译 '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()); 
} 

这里说的一切都

0

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

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