tiny dots

裏方の日々

MotionJPEGの罠

誰でも一度はお世話になる神アドオンことofxIpVideoGrabberでちょっとハマったのでメモ。

お題は向こうが独自実装したMotionJPEG配信サーバーと繋いで動画を表示するというもの。
実装の参考にしたのは

とのこと。ちなみにRack製。

以下ハマりポイント。まずはブラウザで検証。

  • URL直叩きして表示されるものと表示ないものがある
  • img要素に食わせても表示される時とされない時がある
  • 表示されない時もエラーは出ていない

次にofxIpVideoGrabberのexampleで検証。

  • レスポンスは帰ってきておりConnection Errorになっていない
  • 他に比べて受信データが大きい

一応ofImageにも食わせてみたけどダメでした。
で、まずはRackが返すヘッダを疑ってみるとどうもステータスコードとContent-Lengthが含まれていないっぽい。唯一正常に表示されるFirefoxは勝手に200と解釈してる様子。とりあえずこの点を修正してもらうもハズレの模様。
もう一度ヘッダを見てみるとバウンダリ部分がboundary= -- boundaryみたいに変なスペースが入っており、このへんの処理が上手くいっていないのかなと。しかしここと直してもらってもだめ。。
受信データのkb/secが増え続けている様子からチャンクを正しく区切れていないことは明らかなのだが、、、あとは改行コードくらいか?と思いチェックしてもらう。
するとどうも改行とキャリッジリターンが実装されてなかったことが判明。これを修正してもらうと...繋がった。。。どおりで延々受信し続けるわけだ...。
というかFirefoxは勝手にチャンクを解釈して表示してたってことか?独自解釈すぎでは?と思ったけどMotionJPEG自体オワコンかつブラウザ任せの規格なのでしかたないのか。

まとめとしては結局MotionJPEGを配信する際の注意点になってしまうのだが、、、

  • 改行(\n)とキャリッジリターン(\r)を正しく実装する
  • バウンダリ文字列を正しく実装する

とかそのくらいか。oF関係ないわ。ハマったわりにズコーなオチでしたがだいたいそんなものですね。。