https://developer.apple.com/jp/devcente ... 6%9B%B8%27
この仕様書のPDFをダウンロードして読んでみたのですが、いまいち知りたいことと違いました。
私が知りたかったのはwebページでストリーミング再生するときに使用するストリーミングサーバーの作り方(リクエストをどう受け取って、どうレスポンスを返すか)です。
Webページであれば、仮に<a href="./test.html">テストページ</a>というリンクタグをクリックすると
----------------------------------------------------------------------------------------------------------
GET /test.html HTTP/1.1
Host: ホスト名
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
----------------------------------------------------------------------------------------------------------
というリクエストが送られ
----------------------------------------------------------------------------------------------------------
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
HTMLソース
----------------------------------------------------------------------------------------------------------
というレスポンスがサーバーから返ってきてブラウザのレンダリングエンジンなどで処理されブラウザに表示されますよね?
では<img src="./test.png">という画像では?
----------------------------------------------------------------------------------------------------------
GET /test.png HTTP/1.1
Host: ホスト名
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
----------------------------------------------------------------------------------------------------------
というリクエストが送られ
----------------------------------------------------------------------------------------------------------
HTTP/1.1 200 OK
Server: Apache
Last-Modified: Sun, 23 Nov 2014 14:30:38 GMT
Accept-Ranges: bytes
Content-Length: バイナリのbyte数
Connection: close
Content-Type: image/png
画像のバイナリ
----------------------------------------------------------------------------------------------------------
という感じにレスポンスがサーバーから返ってきてブラウザに表示されます。
ここまではいいのです。
では動画は?
ファイルの存在する、たとえばtest.mp4があったとします。
<video src="test.mp4"></video>
こうすればリクエストは
GET /test.mp4 HTTP/1.1
Host: ホスト名
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Range: bytes=0-
Connection: keep-alive
----------------------------------------------------------------------------------------------------------
となってレスポンスは
----------------------------------------------------------------------------------------------------------
HTTP/1.1 206 Partial Content
Server: Apache/2.2.25
Accept-Ranges: bytes
Content-Length: バイナリのbyte数
Content-Range: bytes 0-2598966/2598967
Keep-Alive: timeout=5, max=20
Connection: Keep-Alive
Content-Type: video/mp4
mp4のバイナリ
----------------------------------------------------------------------------------------------------------
となります。
ただこれは「動画ファイル」が存在する場合です。
では<video src="自作サーバーIP:自作サーバーポート"></video>とた場合、
リクエストは上記mp4再生と同じ?ようなものになると思います。
レスポンスはどうすればいいのですか?
206で
Content-Range: bytes 0-2598966/2598967
このようにして0~2598966バイトまでを返したとします。
このあたりまではわかります。
問題はMIME-Typeとデータです。
私がやりたいのは、OpenCVでWebカメラから取得した連続した画像をブラウザ(videoタグ内)に返してリアルタイム(に近い)で動画として表示させたいのです。
まず、サーバーを起動させたまま待機させます。
webページ(ブラウザ)からリクエストが来たらOpenCVでWebカメラから画像を取得しそのデータを連続でレスポンスで返す。
この場合、MIME-Typeはimage/pngやimage/jpegなどの画像になります。
この場合<video>だと読み込めないと思うのですが?
それともこの考え(連続した画像を動画として扱いvideoタグで処理させる)が間違っているのでしょうか?
他にやり方がありますか?
どうやるのが一番うまいのでしょうか?