1

Live555 / openRTSPベースのコードを使用してH.264ビデオソースをmp4ファイルにストリーミングしており、ファイルの以前の部分を(別のアプリケーションから)同時に読み取りたいと考えています。fopen(OutputFile.cppから)に変更するfid = _fsopen(fileName, "wb", _SH_DENYWR)だけでは明らかに十分ではありません。違いはなく、メディアプレーヤーはそれを開かないからです(mp4出力の書き込み行ですか?)

関連する注意点として、ソフトウェアの不潔なシャットダウン(停電など)をシミュレートした場合、未完成のファイルはどのメディアプレーヤーでも読み取ることができません。file-closeでファイルに書き込まれるのは、メディアプレーヤーがファイルを理解できるようにするものだと思います。これも、可能であればコーディングしたい状況であり、上記と同じ問題である可能性が非常に高いですか?

非常に多くのポインタ/回答/考えを受け取りました:-)

4

2 に答える 2

0

通常、-like APIを使用してファイルから読み取ることはなくMP4(他の多くの形式でも同じです) 、代わりにライブラリを使用します。fopenこれは、完成したファイルを期待し、壊れたファイルを回復しようとしたり、まだ書き込まれているファイルを読み取ったりしないようにします。

したがって、技術的にはまだ書き込まれている間に読み取ることは可能ですが、通常のライブラリ、アプリケーション、およびプレーヤーでこれを成功させることはほとんどありません。ファイルを有効で、読み取り可能で、再生可能にするには、最初に書き込みを完了する必要があります。完了ステップでは、再生に必要なインデックスが書き込まれるためです。

于 2013-02-14T10:51:05.887 に答える
0

誰かが同じものを必要とする場合に備えて、これは私がそれをした方法であり、私が想像したよりも簡単でした:

  • fopenOutputFile.cppをファイル共有呼び出し_fsopen (共有読み取りアクセス)に変更します
  • QuickTimeFileSink::continuePlaying()私が呼び出す関数では10秒ごとに completeOutputFile()、ヘッダーを最新の状態に保ちます(ビデオの長さなど)。

Windows Media Playerはそれを気に入らなかった(おそらく排他的なファイルアクセスを取得しようとした)が、VLCは私がまだファイルにストリーミングしている間にファイルを読んで非常に満足していた。

于 2013-02-14T11:46:05.597 に答える