2007/01/25(木)HTTP asf (wmv/wma)ストリームのpush配信プロトコル
Windows Media Player 9(WMV9) などによるHTTPストリームデータの仕様は以下のサイトに書かれていますが、push配信については記述がありません。その点について解析を行いました。
匿名push配信時のプロトコル解析
クライアントからサーバへのリクエスト。
POST /test HTTP/1.1 Content-Type: application/x-wms-pushsetup X-Accept-Authentication: NTLM, Digest User-Agent: WMEncoder/9.0.0.3287 Host: 192.168.0.1:8080 Content-Length: 0 Connection: Keep-Alive Cache-Control: no-cache Cookie: push-id=0
サーバからクライアントへの応答。
HTTP/1.1 204 No Content Server: Servet-agent Content-Length: 0 Date: Tue, 09 Jan 2007 10:02:58 GMT Pragma: no-cache, timeout=60000 Cache-Control: no-cache Set-Cookie: push-id=35201712 Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile
注意点
- (サーバ側では)Connection が keep alive される
- クライアントが接続テストだけを行ってきた場合は、この時点で終了する。
配信時の接続ではさらに次のように続きます。
POST /test HTTP/1.1 Content-Type: application/x-wms-pushstart X-Accept-Authentication: NTLM, Digest User-Agent: WMEncoder/9.0.0.3287 Host: 192.168.0.1:8000 Content-Length: 2147483647 Connection: Keep-Alive Cache-Control: no-cache Cookie: push-id=35201712 $H~以下ストリームデータ~
ストリームデータの取り扱い注意
push配信によって渡されるストリームデータは、HTTP Protocol (Pesudo-Stream) のうち「Type Header」のあとに含まれる、「MSS Pre-header」(8byte)がありません。よってこのヘッダに含まれるシーケンス番号やフラグなどを中継サーバ側で生成し追加してやる必要があります(この際、Type Headerにあるパケットサイズも書き換える必要があります)。
- MSS Pre-header の先頭2byteは、$Hや$Eの場合 "00 0C"、$Dの場合 "00 00" で問題ありません。
- MSS Pre-header の Length は $D などのパケットヘッダの Length と同じ値を設定します。
Digest認証時のプロトコル解析
Digest認証を求める場合、サーバ側は次のような応答を返します。
HTTP/1.1 401 Unauthorized Server: Servet-agent WWW-Authenticate: Digest qop="auth",algorithm=MD5-sess,nonce="XX~XX",charset=utf-8,realm="Digest" Date: Tue, 09 Jan 2007 10:34:57 GMT Pragma: no-cache, timeout=60000 Set-Cookie: push-id=98422531 Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile Content-Length: 0