概要
- 概要
- メディア再生時のQoS関連情報をサーバに送信するための規格
- 規格
- 特徴
- 非リアルタイムなQoSレポートであれば、以下の手順で作成可能
- メディアプレイヤー
- URLパラメータによるCMCD送信をオンにする
- プレイヤーはQoS情報をURLパラメータとしてメディアサーバに送信するようになる
- URLパラメータによるCMCD送信をオンにする
- 解析側
- メディアサーバの生ログを取得
- URLパラメータの集計によりQoSレポートを生成
- メディアプレイヤー
- リアルタイムなQoS状況の表示には、メディアサーバ(CDN)側の対応が必要
- メディアプレイヤー
- CMCD送信をオンにする
- CDN
- メディアサーバが受信したQoS情報をリアルタイムに処理および表示する
- メディアプレイヤー
- 配信サーバではなくQoS収集サーバにQoS情報をJSONとして送信することも、仕様では想定されているが、現状、実装されていない。
- DVB-Iでも採用される予定
- 非リアルタイムなQoSレポートであれば、以下の手順で作成可能
- 送信方法
- メディア配信サーバへの送信:メディアチャンクの受信時にQoS情報を伝達する
- URLパラメータ
- 例:https://cdn.example.net/video/hls/ocean/hoge.ts?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp%3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22%2Ctb%3D6000
- 補足:HTTPエンコーディングの解凍後CMCD=br=3200,bs,d=4004,mtp=25400,ot=v,rtp=15000,sid=”6e2fb550-c457-11e9-bb97-0800200c9a66″,tb=6000
- 例:https://cdn.example.net/video/hls/ocean/hoge.ts?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp%3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22%2Ctb%3D6000
- HTTPリクエストヘッダ
- 例:get https://cdn.example.net/video/hls/ocean/hoge.ts
- CMCD-Request:mtp=25400
- CMCD-Object:br=3200,d=4004,ot=v,tb=6000
- CMCD-Status:bs,rtp=15000
- CMCD-Session:sid=”6e2fb550-c457-11e9-bb97-0800200c9a66″
- 例:get https://cdn.example.net/video/hls/ocean/hoge.ts
- URLパラメータ
- 一般サーバ:メディアチャンクの受信とは別にQoS情報を一般サーバに送信する
- JSONオブジェクト
- 例:
- . {“br”: 3200,”bs”:true,”d”: 4004,”mtp”: 25400, “ot”: “v”, “rtp”:15000,”sid”:”6e2fb550-c457-11e9-bb97-0800200c9a66″,”tb”:6000}
- 補足
- 筆者の調査した範囲では実装されていない
- 例:
- JSONオブジェクト
- メディア配信サーバへの送信:メディアチャンクの受信時にQoS情報を伝達する
キー(パラメータ)
- CMCD-Object
- br (encoded BitRate):処理中コンテンツのビットレート(kbps)
- d (object Duration):再生中コンテンツの長さ(ミリ秒)
- ot (Object Type):オブジェクトタイプ(文字列:m(text), a(audio only), v(video only), av(audio and video), i(init segment), c(caption), tt(timed text), k(key), o(other))
- tb (Top Bitrate):マルチビットレートにおける最も高いビットレート
- CMCD-Request
- bl (Buffer Length):再生位置(ミリ秒)
- dl (Dead Line):リバッファリング等を起こさずにすむチャンク取得時間(ミリ秒)
- mtp (Measured ThroughPut):プレイヤーで計測したダウンロード速度(kbps)
- nor (Next Object Request):次に取得するチャンク
- nrr (Netxt Range Rquest):次にレンジリクエストを発行する場合のレンジ(文字列)
- su (Start Up):バッファが空等の理由で次のチャンクが即座に必要(Boolean)
- CMCD-Status
- bs (Buffer Starvation):バッファリング中(boolean)
- rtp (Requested maximum ThroughPut):クライアントが必要だと思うスループット(kbps)
- CMCD-Session
- cid (Content ID):コンテンツID(String)
- pr (Playback Rate):再生レート(数字:1(リアルタイム)、2(倍速)、0(再生停止))
- sf (Streaming Format):ストリーミングフォーマット(文字:d(dash)、h(hls)、s(smooth)、o(Other))
- sid (Session ID):セッションID(String)
- st (Segment Type):セグメントのタイプ(トークン:v(VoD)、l(Live))
- v (Version):CMCDバージョン(数字:1(version 1))
実行例
- {“sid”: “6e2fb550-c457-11e9-bb97-0800200c9a66”}
- sid(セッションID):”6e2fb550-c457-11e9-bb97-0800200c9a66″
- {“br”: 3200,”bs”:true,”d”: 4004,”mtp”: 25400, “ot”: “v”, “rtp”:15000,”sid”:”6e2fb550-c457-11e9-bb97-0800200c9a66″,”tb”:6000}
- sid:略
- br (encoded BitRate、再生しているビットレート):3200
- bs (Buffer Starvation、バッファリング中):Ture
- 初期バッファリングが発生中
- d (object Duration、チャンク長): 4004
- mtp (Measured ThroughPut、プレイヤー側で計測したスループット): 25400
パターン
- 再生開始
- パラメータ
- bs (バッファリング中):あり、初期バッファリグが発生
- su (次のチャンクが即時に必要):あり、バッファを埋めるため
- cid (コンテンツID)、sid(セッションID):あり、以降継続的に付く
- ot (オブジェクトタイプ)、sf (ストリーミングフォーマット)、st(ストリーミングタイプ):あり、以降継続的に付く
- パラメータ
- 初期バッファリング中
- パラメータ
- mtp (計測スループット):あり、直前チャンクのダウンロード速度。以降継続的に付く(報告される)
- br (再生中ビットレート):あり、処理中チャンクのビットレート、以降継続的に付く
- nor (次のチャンク):あり、次にダウンロードするチャンク名。以降継続的に付く
- tb (必要帯域):あり、連続再生に必要な帯域。以降継続的に付く
- パラメータ
- 表示開始
- パラメータ
- bl (再生位置):あり、0
- bs (バッファリング中):消える
- su (次のチャンクが即座に必要):消える
- パラメータ
- 定常再生(バッファにチャンク有)
- パラメータ
- bl :増加
- mtp、br、nor、tb:定常的に付く
- bs、su:なし
- パラメータ
- バッファリング発生
- パラメータ
- bl:増加しない
- bs、su:付く
- 上記以外は定常再生と同じ
- パラメータ
- 再生ビットレート変更
- <調査中>
デモサイト
実装状況
プレイヤー
- hls.js
- video.js
- dash.js
- ExoPlayer
- AVPlayer
CDN (リアルタイム処理)
- Cloudfront
- Akamai
- DataStream2によりアクセスログを処理(遅延:1分以内)
解析(表示)
Version 2
- 2023年9月から策定中(CTA WAVE、SVTA)
- 概要
- モードが追加される
- Requestモード
- Version 1で定義したもの
- 標準モード、すべてのクライアントが実装
- Responseモード
- Requestモードで送信したサーバ以外のサーバに情報を送信
- timestampとurlが必須
- Eventモード
- 特定イベントだけを別サーバに送信
- timestamp必須
- Requestモード
- キー(パラメータ)が追加される
- モードが追加される
- ドキュメント
- 新規キー(パラメータ)
- 一般
- ts (Time Stamp):イベントが発生した時のタイムスタンプ
- CMCD-Object
- ab (Aggregate encoded Bitrate):全てオブジェクトタイプを足しこんだビットレート(kbps)
- tbl (Target Buffer Length):オブジェクトに対するターゲットバッファ長(ミリ秒)
- tpb (Top Playable Bitrate):再生可能な最も高いビットレート(kbps)
- lb (Lowest encoded Bitate):マニフェスト上の最も低いビットレート(kbps)
- tab (Top Aggregated encoding Bitrate):マニフェスト上の最も高い足しこんだビットレート(kbps)
- lab (Lowest Aggregated encoding Bitrate):マニフェスト上の最も低い足しこんだビットレート(kbps)
- url (request URL):リクエストしたオブジェクトのURL(文字列)
- CMCD-Status
- bsd (Buffer Starvation Duration):最後のリバッファリング時間(ミリ秒)
- cdn (CDN id):使用しているCDN(文字列)
- bg (BackGround):プレイヤーがバックグラウンド(ユーザから見えない)
- pt (Playhead Time):プレイヘッド時間[要調査](ミリ秒)
- ec (player Error Code):プレイヤー定義のエラーコード(文字列)
- e (Event):イベントモードでのイベント(文字列:ps(Play State change)、e(Error)、t(Time interval)、c(Contenet id change)、b(player into Background)、m(Mute)、um(UnMute)、pe(Player Extended)、pc(Player Collapse)、abs(Ad Break Start)、abe(Ad Break End)、as (Ad Start)、ae(Ad End))
- CMCD-Request
- ltc (Live Stream Latency):計測されたライブの遅延(ミリ秒)
- sta (STAte):プレイヤーの状況(文字列:s(starting)、p(playing)、k(seeking)、r(rebuffering)、a(paused)、w(waiting)、e(ended)、f(fatal error)、q(quit)、d(preloading)、
- ttfb (Time To First Byte):リクエストを出してからコンテンツの最初の1ビットを受け取るまでの時間(ミリ秒)
- ttlb (Time To Last Byte):リクエストを出してからコンテンツの最後の1ビットを受け取るまでの時間(ミリ秒)
- rc (Response Code):レスポンスコード(数値)
- cmsdd (CMSD Dynamic Header):CMSD可変ヘッダ(文字列)
- cmsds (CMSD Static Header):CMSD固定ヘッダ(文字列)
- CMCD-Session
- msd (Media Start Delay):再生し始めてから表示されるまでの遅延(ミリ秒)
- 一般
補足:CMSD (Common Media Server Data):CTA-5006