Sunday, December 9, 2012

ffserverのjpeg切り出し

 ffserverでjpegを配信するように設定すると、なぜか延々とつながったjpeg画像が送られてしまう。
 そういうのが欲しければmjpegもあるので、jpegは1枚目だけあれば後ろは要らないんだけど…と言うワケで、こういうときはスクリプトで分割して先頭画像だけ切り出し。
 軽くjpegのフォーマットを調べてみると、ファイルの終端はFFD9になっているらしい。
 とりあえずなにも考えずに先頭からFFD9まで読み込むcgiスクリプトを作成。データ途中にFFD9が出てくる可能性は気にしないでおく。


#!/usr/bin/ruby
require 'net/http'
# continuous jpeg cutting script.
# made for ffserver.
print "Content-type: image/jpeg\n\n"
flag = false
Net::HTTP.version_1_2
Net::HTTP.start('localhost', 8090) {|http|
  http.request_get('******.jpg'){|response|
    response.read_body{|str|
str.each_byte do |ch|
putc ch
if flag && (ch == 0xd9)
exit()
end
if ch == 0xff
flag = true
else
flag = false
end
end
    }
  }
}



フラグ使ってるのはちょっとどうかと思うけど、まあこんなものかな。
一応動く。

No comments: