kazu_2012
2014年3月28日 16時58分
お世話になっております。
810+810wlanを組み合わせて無線でストリーミングしています。
mjpg_streamerで動作させた場合、フレーム落ちがないかを確認したいのですが。
何か確認方法があれば教えてください。
コメント
at_ohsawa
kazu_2012
at_yashi
> 再度お聞きしたいのですが、送り出すコマ数を指定しての検査方法ですと、
> 通常のランニング時にコマ落ちが生じたか否かを判断するのは難しくはない
> でしょか?
難しいと思います。
> ※特定の期間のみコマ落ちを確認したいのではなく、常時観察できる方法を模索しています。
>
> あるいは、タイムスタンプ付きのストリーミング方法などあるでしょうか?
> ※無線帯域を考慮するとこの辺りは、妥協が必要でしょうか
mjpeg_streamer を使った場合のフレーム落ちは、a) 送信側の a810 がカメラ
から適切なタイミングでフレームを取れなかった場合、b) 受け側のブラウザー
がフレームをなんらかの理由で落した場合だけ発生すると思うのですが、どう
でしょうか?
無線とはいえ、TCP 上の httpで送信するだけなので、通信経路はあまり気にし
なくて良いような気がします。(もし間違っていたら教えてください)
ブラウザー側が、どのタイミングでフレームを落すのかは、お使いのブラウザー
によるので、ちょっと分りません。
どこで発生するフレーム落ちを懸念しているか教えて頂けると、助かります。
kazu_2012
at_ohsawa
2014年4月1日 16時37分
> mjpg_streamerで動作させた場合、フレーム落ちがないかを確認したいのですが。
MJPEGにはタイムスタンプ情報が存在しないので、mjpeg_streamerで
送出するフレーム数を1000フレーム等に制限し、クライアント側で
1000フレーム取得できたかを計測すると良いと思います。
任意のフレーム数を送出する方法はmjpeg_streamerのoutput_httpプラグイン
を改造すると実装できそうです。
mjpeg_streamerのoutput_httpプラグインのソースコードを見ると、
atamrk-dist/user/mjpg-streamer/mjpg-streamer.r94/plugins/output_http/httpd.c
内のsend_stream()関数が、httpコネクション毎の子スレッドで、クライアントに対して
送り出すデータを作っているようです。
send_stream()関数内のwhileループ1回あたり1フレームに対応しているようなので、
ここをforループに変えて、任意の回数だけループさせるとフレーム数を制限できます。
クライアント側は、webブラウザだと、フレーム数がわからないので、
ストリームをダンプして、ダンプしたデータ内のimage/jpegコンテンツの
数を数えると良いです。
下記のようにnetcatを使うと、dumpファイルに連続したhttpメッセージが
保存されます。
mjpeg_streamerが十分データを送出した後に、netcatを止めて
dumpファイル内の"Content-Type: image/jpeg"の数をwcでカウントすると
受信したフレーム数がわかります。
送受信で数が一致していればフレームドロップ無しだと判断できるかと思います。