web-dev-qa-db-ja.com

mp4ビデオファイルにMOOV atomを追加する方法

Androidでライブデバイスからサーバーへのストリーミングに取り組んでいます。サーバーでバイト単位でデータを送信できますが、サーバーでの記録中にそのファイルを再生すると[〜#〜] vlc [〜#〜] say that [〜#〜] moov [〜#〜] atomが見つかりません。多くの回避策の後、mp4ファイルの[〜#〜] moov [〜#〜] atomが最終的に生成されることがわかりました。しかし、録音はライブを意味しますが、サーバーでそのファイルを再生する必要があります。 [〜#〜] spydroid [〜#〜]および[〜#〜] sipdroid [〜#〜]のソースコードを調べますが、それらのどれも動作していません。 [〜#〜] ffmpeg [〜#〜]を使用してサーバーサイドにmove atomを追加しようとしましたが、成功しませんでした。誰でもどのようにこれを達成できますか?事前に感謝します。

19
Ravinder

問題が発生しました。 「moov」ボックスは一種の目次です。すべてのコンテンツがない場合、完全な目次を作成することはできません。痛い!

あなたがMP4に固執したい場合、そしてあなたが自分でファイルを書いているなら、あなたはいわゆる断片化されたMP4ファイルとしてファイルを書くことができます。断片化されたMP4ファイルには、複数の自己完結型のビデオの小片が含まれており、それぞれに独自の目次があります。完全な記録が完了する前にファイルを再生できます。

MP4に固執する必要がない場合、オプションは生のh264ストリームをサーバーに書き込むことです。その場合、そのような種類の目次はありません。 VLCは生のh264ストリームを再生できます。

10

Qt_faststartを実行して、moov atomをストリームの先頭に移動します。

qt-faststart in.mp4 out.mp4
3
d33pika

MP4Boxを使用して、ファイルの先頭でMOOV atomを移動し、インターリーブしてチャンクでストリーミングします。

MP4Box test.mp4 test.mp4
3
Hemant

FFMpegを使用して、moov atom=をビデオファイルの先頭に移動することができます。

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

このlibを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());
}

これですべてです

0