2012-01-25 11 views
2

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

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

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

しかし、私はビデオを開いて(Totem Video PlayerとVLCで試してみました)、録画されたものをすべて見ることができますが、速すぎます。ビデオ全体は5秒(40の代わりに)のように続きます。ヘッダーにMJPEGの中にビデオの長さやfpsのような情報を入れるものがありますか?私はビデオプレーヤーにとって欠かすことのできる情報があるはずなので、速く再生することを意味します。

更新:

の回答で示唆したように、私は、バイナリエディタでファイルを開いて、私が見つけたこのでした:

--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................................. ....&"((

このヘッダーは、ファイル全体に(2進データの多くのバイトが続きます)ファイル内に再現されます。これは実際には大丈夫です。カメラのマニュアルでは、すべてのMJPEGピクチャがこのヘッダを取得していることがわかります。

さらに興味深いのは、最後の行にあるJFIFです。提案された答えと同様に、これはおそらくファイルフォーマットの指標です。しかしafaik JFIFはjpgのような単一の画像フォーマットです。それで、これは、ビデオファイル全体がちょうど "脳のない"連鎖した画像であることを意味するでしょうか?私のプレイヤーは、フレームレートについて何も知らなくても、次々とこの写真を表示することを前提としていますか?

+0

aviファイル用に指定したフレームレート値を確認してください。あなたがaviに書き込んだフレーム数を計算し、40秒間にそれらをすべて再生するためにフレームレートを計算する必要があるものを計算します。 –

+0

'AVI'コンテナが壊れています(画像はおそらく良いですが、タイムスタンプはありません)。ファイル形式のオプションが他にもある場合は、おそらく別の方法を試してみてください。 1ファイルあたりのフレームレートが固定されたAVIは、IPカメラストリームには適していません。 –

+0

しかし、私は実際にはファイル形式を選択できません。私はちょうどストリームデータにアクセスすることができますし、ファイルにダンプする必要があります。だから私はデータが格納されているように影響を与えない、私はちょうどファイル拡張子を選択することができます。 – Toby

答えて

6

MJPEGで使用するフォーマットは1つではありません。ウィキペディアから:

[...] 普遍すべてのコンテキストで使用する「モーションJPEG」 の完全な仕様として認識される単一の正確な形式を定義する一切の文書はありません。

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

コンテナフォーマットがクリアされているしたら、そのコンテナのドキュメントをチェックアウトし、その形式や希望FPSを持つファイルを探すことができます。次に、ダウンロードしたファイルの調整を開始して、目的の効果を得ることができます。

また、このプロジェクトは便利かもしれません:http://mjpeg.sourceforge.net/

編集:

お使いのカメラがMIMEコンテナに詰めたフレームを送信し、あなたのサンプル・データによると。 (最初の行は境界線であり、次に空白行が出現するまでヘッダーが続き、次にファイルデータが続き、境界線でフォローされます)。

ヘッダのようにJPEGファイルです:image/jpeg。 JPEGデータを格納するJFIFはthe standard file formatです。 JPEGファイルのシリーズのうち、ムービーファイルを作成するには、その後、(例えばmunpackで)複数のJPEGファイルにファイルの内容を抽出し

  1. use ffmpeg or mplayerを:

    私はあなたをお勧めします。

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

カメラがAOI(関心領域)を動的に変化させると、変更が発生した部分の画像のうち小さい部分のみを送信できるということは、もっと複雑になります。しかし、単純なアプローチが有効であるかどうか最初に確認する必要があります。

+0

どのようなコンテナ形式があるかを判断する方法はありますか? MIMEはメールのフォーマットではありませんか?それともビデオ送信にも使用されていますか?あるいは何か完全に間違っているのですか? // edit:実際には "Avidemux"(http://avidemux.sourceforge.net/)で開こうとしましたが、開かれませんので、カメラが正しいavi形式で保存していないと思います。 ? – Toby

+1

@Tobyファイルを16進エディタで開きます。最初の4バイトはおそらくあなたにフォーマットを伝えます。 MIMEはコンテナ形式でもあります(特にマルチメディアには該当しません)。多くのファイルを1つのファイルにカプセル化することができます。 – vbence

+0

申し訳ありませんが、私は長い間答えてくれましたが、私は病気でした...今、ファイルをヘキサエディタで開きました。私のIPカメラのHeader Stuffの最初の部分です。それから「JFIF」が続きます。だから、私はthatsフォーマットの説明を推測する...しかし、JFIFはちょうど通常の画像形式です...それは私のファイルに保存されていないビデオ情報がありますか? – Toby

1

un * xシステム(linux、osx、...)では、file cmdlineツールを使用して、ファイル形式について(通常は良い)推測を行うことができます。

1

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

フォーマット自体は、(boundary, subheader, JPEG image),(boundary, subheader, JPEG image),...などのシーケンスです。ストリームにはタイムスタンプがありませんので、再生速度はプレーヤーによって異なります。

関連する問題