• 締切済み

ネットワークカメラの動画保存をコマ落ちせずに取得するには

・目的は、 ネットワークカメラBB-HCM311 http://panasonic.biz/netsys/netwkcam/lineup/hcm311.html http://panasonic.biz/netsys/netwkcam/support/download/technical/cgi_cmnd_ver2.1.pdf(CGI) から流れてくるMotionJpegをパソコンのファイルに格納すると言うものです。 ・現状としては、MotionJpegのJpegを切り出して保存することが出来ています。 ・未解決の問題は、カメラから配信されているデータを100%取得できていないと言う所です。なぜならば、下のソースに示すように、Read()でバッファに格納しもう一度Read()を行うまでにf()を実行するために、f()の実行中にカメラからの配信が進んでしまうためです。 通常のファイルをサーバーから取得する場合は順次読み込めば問題ないと思うのですが、このようなストリーム配信の場合、何か参考になるものをご存じないですか? よろしくお願いします。 開発環境 VC6.0, OS WinXP Pro

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>スレッド中でRead()だけを繰り返し処理した場合に、Read()が終わって次のRead()を呼ぶ間に必ず遅延が起こると思っているからです。 よーく考えてみてくださいね。 これがちゃんと出来なきゃ何にもできませんよねぇ(^^;;; 無限大のバッファなんて準備できないんですから。 >OSがWindowsXPですから、リアルタイム性は保証して無いだろうと思っているわけです。 うーん、ネットワーク、TCP/IPという時点で、リアルタイム性はそこまで意味は無いかと・・・ あくまでも受信データの取りこぼしが無ければいいのですから。十分なサイズのバッファと、単位時間に送られてくるデータ量以上の速さでデータをOSのバッファから自分の準備した領域に取り出せればいいんですよね。OS側のバッファがあふれる前に。 あと、 >あとマルチスレッドなら、取りこぼし防ぐために受信スレッドの方をプライオリティをあげておいたほうがいいでしょう。 確かに受信スレッドのプライオリティあげるべきですけど、それによってファイル書き込みが間に合わなくなると本末転倒ですのでバランスが肝心です。

hisa_lab
質問者

お礼

いやー。 たのしいっすねここ。 まわりにこういうネタについてきてくれる人がいなくて(汗) 所詮私も含めて開発系には弱いということでしょうか・・・。 よーく考えてやってみます。

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

ダブルバッファでは足らないこともあるように思えますので、 さらに多くのバッファを用意して、 既に回答があるようにファイル書き込みを別スレッドで行うか、 非同期I/O(オーバーラップ I/O)を使うかでしょうね。 あとマルチスレッドなら、取りこぼし防ぐために受信スレッドの方をプライオリティをあげておいたほうがいいでしょう。

hisa_lab
質問者

お礼

ありがとうございます。今のネットワーク環境の転送速度のせいか、取りこぼしを考慮して1秒間に8枚程度しかデータが流れてきていないようです。ということで、ダブルバッファリングを使ってもうちょっときっちりやってみます。 taka_tetsuさんterra5さん、また後日報告いたします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>ダブルバッファリング+(スレッドで2回線つないで交互に取り込む)も考えましたが、どうも接続数を増やすとパフォーマンスが落ちてあまり速度が得られないようです。 なぜ接続数を増やすんですか? Read()を連続しておこないたいんですよね? 別スレッド内で処理を行えばいいのはf()なんですから。 Read()をしてるメインスレッド内のループはバッファに書き込むだけ、f()の内部処理を行うスレッドのループは1つのバッファが満杯になったかチェックし、なってたらファイル格納を行うようにするのが普通かと。

hisa_lab
質問者

お礼

ありがとうございます。 接続数を増やし2回線で冗長に取り込もうと思った理由について→スレッド中でRead()だけを繰り返し処理した場合に、Read()が終わって次のRead()を呼ぶ間に必ず遅延が起こると思っているからです。 OSがWindowsXPですから、リアルタイム性は保証して無いだろうと思っているわけです。 ちょっと詳しく実験してみます。 スレッドはあまり詳しくないので、まずf()で何もせずにRead()を繰り返してみました。その時つなぎ目が怪しかったので、私のプログラムにどこかにバグがあるかもしれません。少しお時間をください。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

一般的にはダブルバッファリングでしょう。 バッファを2つ以上準備し、1つのバッファが満杯になったら別スレッドで保存を行い、データの受信は残りのバッファで行えばいいかと。

hisa_lab
質問者

お礼

お返事ありがとうございます。 私もそう思いますが、カメラ(HTTPサーバー)より送られてくる信号は、ソース中のRead()を間髪いれずに実行し続けなければ連続データを取り込むことができないようなのです。なぜかというと、Webカメラの画像をリアルタイムで配信する特性上、受け取らなかったデータは捨てて、常に新しいデータを配信する必要性があるからです。 ダブルバッファリング+(スレッドで2回線つないで交互に取り込む)も考えましたが、どうも接続数を増やすとパフォーマンスが落ちてあまり速度が得られないようです。 むしろ、リングバッファのようなイメージで、途切れず取り込みながら保存していく方法って無いかと模索中です。

hisa_lab
質問者

補足

ソースを補足します。 const int max_2len=一度に取得するデータの大きさ; UINT nRead=0; CInternetSession session; CHttpConnection* pConnection = session.GetHttpConnection( "IPアドレス" , ポート番号 , "ID" , "パスワード"); CHttpFile* pFile[2]; pFile[0]= pConnection->OpenRequest ( CHttpConnection::HTTP_VERB_GET , "/nphMotionJpeg?Resolution=640x480&Quality=Motion HTTP/1.0\r\n" ); pFile[0]->SendRequest(); DWORD dwRet; pFile[0]->QueryInfoStatusCode( dwRet ); if( dwRet == HTTP_STATUS_OK ) { BYTE* m_cambuf[2]; // カメラからのデータを格納 m_cambuf[0] =new BYTE[max_2len]; int gflag[2]={0}; while( 1 ) { nRead = pFile[0]->Read( m_cambuf[0], max_2len ); // カメラからデータ取得 f(); // カメラからのデータをファイルに保存等 } delete[] m_buf; delete[] m_cambuf[0]; } delete pFile[0]; delete pConnection; session.Close();

関連するQ&A

  • ネットワーク監視カメラ)迷ってます。

    コレガ) http://corega.jp/product/navi/nwcam/ Panasonic) http://panasonic.biz/netsys/netwkcam/lineup/camera.html なんでこんなに値段が違うんでしょうか? 例えばPanasonicの無線LANだと「BB-HCM371」が109,800円に対して、コレガだと「CG-WLNCPTG」 が38,640円です。 どちらも30万画素です。 あと、録画ですが、コレガは付属ソフトを使うに対して、Panasonicだと録画ソフトも買わないといけないようです。 なんでこんなに値段に差があるのでしょうか。

  • WEB上のネットワークカメラの映像を録画する方法

    ネットワークカメラを使用して映像をWEB上に表示しています。 このWEB上で表示されている映像を録画したいのですが、可能でしょうか? 画像はMotion-JPEG対応と書いてありました。 「ネットワークカメラCGI利用説明書」をインターネットより見つけましたが、何か録画動画像を取得できるような事が記載されているのですが、電話応対センターへかけても、よく理解できませんでした。どのようにしたら、WEB上のネットワークカメラの映像を録画できるでしょうか。 「ネットワークカメラCGI利用説明書」の参考資料URL: http://panasonic.biz/netsys/netwkcam/support/download/technical/cgi_cmnd_ver2.1.pdf PDFファイルが見れるツールが必要です。

  • ネットワークカメラを無線LAN接続できますか?

    http://panasonic.biz/netsys/netwkcam/lineup/hcm381.html BB-HCM381をもっています。 それとBUFFALO WHR-G301N/UとUSB2.0用無線子機をもっています。 いままで別のルータで有線接続でした。 BB-HCM381にはUSB接続できるコネクタがないみたいです。 LANジャックのみ。 この状態で無線LAN接続できるでしょうか?

  • ネットワークカメラを使った事業の可能性について

    http://panasonic.biz/netsys/netwkcam/ のようなネットワークカメラを使った事業の可能性について考えています。セキュリティや介護、老人福祉の分野で使い道があるとは思うのですが、私なら自分の間近にカメラがあったらいやだろうな、とつい考えてしまいます。どういう分野でどういった使いかたをすれば有効な事業展開につながるのか、もしよかったらみなさんのアイディアをお聞かせください。

  • ネットワークカメラサーバ

    4拠点でネットワークカメラを設置して、24時間録画してデータ保存したいのですが、 家庭用のパソコンだと24時間稼働は難しいと思います。(実際運用して1台だめにしました。) 24時間稼働でも動かせる端末を探しています。 パナソニックのBB-HNP17のビューワソフトをつかっています。 http://panasonic.biz/netsys/netwkcam/lineup/hnp17.html ここには、ネットワークカメラサーバの対応機種として、BB-HCS301がありますが、 この機種はすでに発売終了しているようです。 専用のネットワークカメラサーバでなくてもいいので、 24時間稼働前提でネットワークカメラをつなげて使える機種(5万くらいまで)でおすすめのものを教えてください。

  • ひどすぎるfirefox3の動画

    XPhome でfirefox3 を使っています。パナソニックのWEBカメラの動画の画質があまりにヒドイので困っています。具体的には動きのある部分だけが更新されていてその更新の様子が上から下へとコマ送りのように見えます。また動画を止める機能もないようです(ツールバーの×印が無効)。 sleipnir2 もつかっていますが、コチラはスムーズに動き、不満はありません。動画を止めることもできます。 誤解のないように書いておきますが、メインのブラウザをfirefox3 に変えようと考えているのであり、不当に貶すツモリはありません。 ライブカメラが見られるサイトを記載しておきます。対応策があれば教えてください。 http://panasonic.biz/netsys/netwkcam/support/link/live_link.html

  • Webカメラで撮った動画のファイル変換

    松下製 BB-HCM331を使っています 撮影された動画のファイル形式が*.pncという形式で 松下のサイトから専用ソフトをDLしてこないと見られません これを、MPEGとかAVIとか一般的なファイル形式にしたいのですが、ご存知の方がいましたら教えてください ↓製品ホームページです http://panasonic.biz/netsys/netwkcam/lineup/hcm331.html

  • Panasonic製ネットワークカメラについて

    Panasonic製ネットワークカメラのSSLに関して BB-HCM715などにはSSLが使用できる様になっておりますが au携帯電話からSSLを設定したネットワークカメラを見る為にはどうすれば良いのでしょうか? 通常パソコンからSSLを設定したネットワークカメラを見る事には全然問題がありません。 証明書などの絡みがあるのは分かるのですがいまいち分かりません。 補足:現在取得中の証明書はベリサインをとっております。

  • ネットワークカメラとルータの設定

    初めまして、ネットワーク初心者で、ネットワークカメラをインターネット経由で、遠隔で見れるように四苦八苦しているものです。 遠隔地) ネットワークカメラ : Panasonic BB-HCM735 ルータ        : Buffalo WHR-HP-G54 ネット        : フレッツ光西日本(プロバイダGMO-BB) HCM735は、UPnPの設定とポートを8080に設定しています。 ルータは、UPnPの設定をしています。 ダイナミックDNSは、Cybergateで取得して、HCM735に設定しています。 同一ネットワーク内では、プライベートIPを指定すると画像もみれています。 自宅)のパソコンから見ようと、Cybergateで取得したURLを入れても、 見ることができません。 ちなみに、URLの代わりに、遠隔地)のグローバルIPを調べて、ポートを 指定して入力しても、同じく、「ありません」の表示。 PINGでは、応答があり、Tracertでもルートはできています。 ルータか、カメラの設定を間違えているのではと思い、マニュアルなどを 見ていますが、判りません。 お手数ですが、ご教示宜しくお願いいたします。

  • 屋外ネットワークカメラ設置に当たっての防水カバー

    雨風にさらされる屋外に下記のパナソニック製ネットワークカメラを付けたいと思います。 http://panasonic.biz/netsys/netwkcam/lineup/hcm581.html 付属品にはカメラの屋外用カバーがない(軒下設置用はあるが、今回は屋根の無いところに取り付けたい)ので別なもので代用になるかと思います。実際にやられたことのある方、どういったものを使用されたのでしょうか? 私は例えば下記のような屋外照明カバー(透明)のようなものが使えそうな気がしますが、夏の炎天下で密閉されてカメラが高温にならないか気になります。 http://www.cextension.jp/tlt_webcat/a_show_big.asp?catid=C2938&page=697&how=ext もしくは実際のところこのカメラではそもそも屋外設置は無理でしょうか?

専門家に質問してみよう