2

IPカメラ(Basler BIP-1280c)からビデオストリームを読み込もうとしています。必要なストリームはカメラのバッファーに保存され、長さは40秒で、MJPEGでデコードされます。

これで、Webブラウザーを介してストリームにアクセスすると、問題なく40秒が表示されます。しかし、実際には、ストリームを単独でダウンロードして保存できるアプリケーションが必要です。

カメラはhttp経由でアクセスされるので、私はlibcurlそれにアクセスするために使用しています。これは問題なく動作し、問題なくストリームをダウンロードすることもできます。ストリームデータを*.aviファイルに保存することを選択しました(それが正しいことを願っています…?)。

しかし、ここで問題が発生しました。ビデオを開いて(Totem Video PlayerとVLCで試してみました)、記録されたものをすべて表示することもできますが、速度が速すぎます。ビデオ全体は(40秒ではなく)5秒ほど続きます。MJPEGのヘッダーには、ビデオの合計の長さやfpsなどの情報を入れる場所がありますか?つまり、ビデオプレーヤーが高速で再生できるように、いくつかの情報が不足している必要がありますか?

アップデート:

回答で示唆されているように、私は16進エディタでファイルを開きましたが、見つけたのは次のとおりです。

--myboundary..Content-Type: image/jpeg..Content-Length: 39050.........*Exif..II*...............V...........................2...................0210................FrameNr=000398732 6.AOI=(0800x0720)@(0240,0060)/(1280x0720).Motion=00000 (no) [00000 | 00000 | 00000 | 00000 | 00000].Alarm=0000 (no) .IO =000.RtTrigger=0...Basler..BIP2-1280c..1970:01:05 23:08:10.8 98286......JFIF................................. ....&"((

このヘッダーはファイル全体で繰り返されます(その後に大量のバイナリデータが続きます)。すべてのMJPEG画像がこのヘッダーを取得することをカメラのマニュアルで読んだので、これは実際には問題ありません。

JFIF最後の行のより興味深いイン。提案された回答のように、これはおそらくファイル形式の指標です。ただし、afaik JFIFは、jpgと同じように単一の画像形式です。それで、これはおそらく、ビデオファイル全体が単なる「頭の悪い」連鎖写真であることを意味するのでしょうか?そして、私のプレーヤーは、フレームレートについての知識がなくても、この写真を次々に表示する必要があると思い込んでいますか?

4

3 に答える 3

6

MJPEGで使用する単一の形式はありません。ウィキペディアから:

[...]すべてのコンテキストで使用するための「MotionJPEG」の完全な仕様として広く認識されている単一の正確な形式を定義するドキュメントはありません。

フォーマットはベンダーによって異なります。私のアドバイスは、ダウンロードしたファイルを綿密に調べることです。それが本当にAVIコンテナであるかどうかを確認してください。(一部のカメラは、MIMEコンテナにラップされたフレームを送信できます)。

コンテナの形式が明確になったら、そのコンテナのドキュメントを確認して、その形式と目的のfpsを持つファイルを探すことができます。次に、ダウンロードしたファイルを調整して、目的の効果を得ることができます。

このプロジェクトも役立つかもしれません:http://mjpeg.sourceforge.net/

編集:

サンプルデータによると、カメラはMIMEコンテナにパックされたフレームを送信します。(最初の行は境界であり、次に空の行に遭遇するまでヘッダー、次にファイルデータがそのフィールド、その後に境界などが続きます)。

ヘッダーが示すように、これらはJPEGファイルですimage/jpeg。JFIFは、 JPEGデータを保存するための標準のファイル形式です。

次のことをお勧めします。

  1. ファイルの内容を複数のjpegファイル(たとえばmunpackを使用)に抽出してから、
  2. ffmpegまたはmplayerを使用して、一連のjpegからムービーファイルを作成します。

このようにして、希望のフレームレートも指定できます。

カメラがAOI(関心領域)を動的に変更する場合、状況がさらに複雑になる可能性があります。つまり、変更が発生した画像のごく一部しか送信できません。ただし、最初に、単純なアプローチが機能するかどうかを確認する必要があります。

于 2012-01-25T08:57:15.253 に答える
1

un * xシステム(linux、osx、...)では、filecmdlineツールを使用して、ファイル形式を(通常は適切に)推測できます。

于 2012-01-25T11:37:08.443 に答える
1

--myboundaryストリームがHTTP経由でマルチパートコンテンツとしてストリーミングされる通常のM-JPEGであることを示します。このストリームを「そのまま」保持して再生できる(つまり、名前を変更した場合は再生されない)ファイル形式はよく知られてAVIいません。

フォーマット自体は、、などのシーケンスです(boundary, subheader, JPEG image)(boundary, subheader, JPEG image)ストリーム...にはタイムスタンプがないため、再生速度はプレーヤーに完全に依存します。

于 2012-01-30T15:41:08.143 に答える