JP2009239480A - 映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム - Google Patents
映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム Download PDFInfo
- Publication number
- JP2009239480A JP2009239480A JP2008081014A JP2008081014A JP2009239480A JP 2009239480 A JP2009239480 A JP 2009239480A JP 2008081014 A JP2008081014 A JP 2008081014A JP 2008081014 A JP2008081014 A JP 2008081014A JP 2009239480 A JP2009239480 A JP 2009239480A
- Authority
- JP
- Japan
- Prior art keywords
- video
- algorithm
- data frame
- fragments
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Communication Control (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
【課題】データフレームのフラグメント数に応じたより効率的な受信動作を実現可能にする映像受信クライアントを提供すること。
【解決手段】通信部11は、映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する。データフレームデフラグメント部35は、受信したパケットをデフラグメントする。デフラグメントアルゴリズムプール部36には、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムが保持されている。デフラグメントアルゴリズム管理部37は、上記複数のデフラグメントアルゴリズムのうちから、使用すべきものを、フラグメント数に応じて選択して、データフレームデフラグメント部35に指示する。
【選択図】 図3
【解決手段】通信部11は、映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する。データフレームデフラグメント部35は、受信したパケットをデフラグメントする。デフラグメントアルゴリズムプール部36には、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムが保持されている。デフラグメントアルゴリズム管理部37は、上記複数のデフラグメントアルゴリズムのうちから、使用すべきものを、フラグメント数に応じて選択して、データフレームデフラグメント部35に指示する。
【選択図】 図3
Description
本発明は、映像を配信する映像配信サーバ、映像を受信する映像受信クライアント、映像受信クライアントの受信アルゴリズムの切替制御を行うための受信アルゴリズム切替制御方法及びプログラムに関する。
映像を配信する映像配信サーバと、該映像配信サーバから配信された映像を受信する映像受信クライアントとの間が、IPネットワーク(Internet Protocol)を介して接続されている場合、映像データを配送するためのプロトコルとして、RTP(Realtime Transport Protocol)が採用されることが多い。また、映像データを配信する際の各種制御情報やIPネットワークの統計情報などをやり取りするためのプロトコルには、RTCP(Realtime Transport Control Protocol)がある。
映像配信サーバから映像受信クライアントに映像データが配信される際に、配信サーバと映像受信クライアントとの間のネットワーク帯域幅を測定することで、映像受信クライアントにおける受信バッファのアンダーフローを予見し、その対策を講じる方法が知られている(特許文献1参照)。この方法によれば、映像受信クライアントは、測定されたネットワーク帯域幅に応じて、映像配信サーバに対し映像データの送信ビットレートを変更するように要求することで、受信バッファのアンダーフローを予防する。
ところで、RTPを用いた映像配信において、占有するネットワーク帯域とは別の観点として、データフレームのフラグメント数がある。MTU(Maximum Transmission Unit)以上のサイズのデータフレームを、RTPを用いて伝送する場合、映像配信サーバと映像受信クライアントとの間のネットワーク帯域等の統計情報を取得するために、IPレイヤではなくRTPレイヤにてフラグメントを行い、データを送信することが多い。
しかし、データフレームのフラグメント数に応じたより効率的な受信動作を実現することはできなかった。
特開2004−328613号公報
従来、データフレームのフラグメント数に応じたより効率的な受信動作を実現することはできなかった。
本発明は、上記事情を考慮してなされたもので、データフレームのフラグメント数に応じたより効率的な受信動作を実現可能にする映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラムを提供することを目的とする。
本発明は、映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する映像受信クライアントであって、前記パケットを受信するパケット受信部と、各々の前記データフレームにつき、当該データフレームのもととなる前記パケットをもとに、当該データフレームをデフラグメントするデフラグメント部と、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから、前記デフラグメント部が前記データフレームをデフラグメントする際に使用させるものを、前記データフレームに係るフラグメント数に応じて選択して、前記デフラグメント部に指示する制御部とを備えたことを特徴とする。
また、本発明は、映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして、ネットワークを介して映像受信クライアントへ送信する映像配信サーバであって、各々の前記データフレームにつき、当該データフレームをそれぞれ1つ以上のパケットにフラグメントするフラグメント部と、前記パケットを送信する送信部と、前記映像受信クライアントが前記データフレームをデフラグメントする際に使用するデフラグメントアルゴリズムを、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから選択するにあたって、該選択の基準となる情報を、前記映像受信クライアントへ与えるための制御を行う制御部とを備えたことを特徴とする。
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための(あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための)プログラムとしても成立し、該プログラムを記録したコンピュータ読み取り可能な記録媒体としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための(あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための)プログラムとしても成立し、該プログラムを記録したコンピュータ読み取り可能な記録媒体としても成立する。
本発明によれば、データフレームのフラグメント数に応じたより効率的な受信動作を実現することが可能になる。
以下、図面を参照しながら本発明の実施形態について説明する。
図1に、本発明の一実施形態に係る映像配信サーバと映像受信クライアントとを含む映像配信システムの概略構成例を示す。
図1中、1は、映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバであり、3は、該映像配信サーバから該パケットを受信しデフラグメントして、該映像ストリームを構成する該複数のデータフレームを得る映像受信クライアントである。
なお、図1では1台の映像配信サーバ1と1台の映像受信クライアント3が示されているが、映像配信サーバ1が複数台であっても構わないし、及び/又は、映像受信クライアント3が複数台であっても構わない。
ここでは、映像配信サーバ1と映像受信クライアント3の各々がIPネットワークに接続されている場合を例にとって説明するが、データのやり取りが可能であれば、IPネットワーク以外の接続方式であっても良い。
また、ここれは、映像配信サーバ1により配信される映像データストリームの映像コーデックがITU−T勧告のH.264方式である場合を例にとって説明するが、これに限定されるものではない。
また、ここでは、映像データストリームはUDP(User Datagram Protocol)のRTPにより配信され、映像データストリームを配信する際の制御情報はRTCPにより映像配信サーバ1と映像受信クライアント3との間でやり取りされる場合を例にとって説明するが、それらプロトコルに限定されるものではない。
次に、図2に、本実施形態の映像配信サーバ1の構成例を示す。
図2に示されるように、映像配信サーバ1は、通信部11、セッション制御部12、セッション情報記憶部13、映像取得部14、映像エンコード部15、RTPスタック(図中、20参照)のデータフレームフラグメント部16、RTPスタックのRTCP処理部17、映像配信制御部18を備えている。
各部の概要は次の通りである。
通信部11は、映像受信クライアント3とIPネットワークを介してデータの交換を行うためのものである。
セッション制御部12は、セッションに関する制御を行うためのものである。例えば、セッション制御部12は、映像の配信先である映像受信クライアント3との間で、映像配信の開始と停止のメッセージのやり取りを行う。
セッション情報記憶部13は、セッション制御部12によりネゴシエーションされた映像受信クライアント3とのセッションの状態を保持するためのものである。
映像取得部14は、映像を取得するためのものである。例えば、映像取得部14は、カメラから映像データを取得する機能を有しても良いし、その代わりに又はそれに加えて、他の装置から映像データを取得する機能を有しても良い。なお、映像取得部14の代わりに又は映像取得部14に加えて、映像データを生成する映像データ生成部(図示せず)を備え、映像データ生成部が生成した映像データを配信対象としても良い。
映像エンコード部15は、映像取得部14により取得された映像データをエンコード処理して、圧縮映像データを生成するためのものである。なお、映像取得部にてあらかじめエンコード済みの映像データをデータベース等から取得する場合は映像エンコード部15がなくてもよい。
データフレームフラグメント部16は、映像受信クライアント3に配信する圧縮映像データをRTPレベルにてフラグメントするためのものである。
RTCP処理部17は、セッション制御部12によりネゴシエーションされた映像受信クライアント3とのRTCPの処理を行うためのものである。
映像配信制御部18は、映像配信のための制御を行うためのものである。例えば、映像配信制御部18は、セッション制御部12により映像受信クライアント3とネゴシエーションされたセッション情報に基づいて、映像取得部14に対して、映像の取得の開始又は終了を命令し、映像エンコード部15に対して、映像取得部14により取得された映像データから圧縮映像データを生成するエンコード処理の開始又は終了を命令する。
次に、図3に、本実施形態の映像受信クライアント3の構成例を示す。
図3に示されるように、映像受信クライアント3は、通信部31、セッション制御部32、セッション情報記憶部33、RTPスタック(図中、50参照)のRTCP処理部34、RTPスタックのデータフレームデフラグメント部35、RTPスタックのデフラグメントアルゴリズムプール部36、RTPスタックのデフラグメントアルゴリズム管理部37、圧縮映像データデコード部38、再生タイミング制御部39、画面表示部40、映像受信制御部41を備えている。
各部の概要は次の通りである。
通信部31は、映像配信サーバ1とIPネットワークを介してデータの交換を行うためのものである。
セッション制御部32は、セッションに関する制御を行うためのものである。例えば、セッション制御部32は、映像の配信元である映像配信サーバ1との間で、映像配信の開始と停止のメッセージのやり取りを行う。
セッション情報記憶部33は、セッション制御部32によりネゴシエーションされた映像配信サーバ1とのセッションの状態を保持するためのものである。
RTCP処理部34は、セッション制御部32によりネゴシエーションされた映像配信サーバ1とのRTCPの処理を行うためのものである。
データフレームデフラグメント部35は、映像配信サーバ1から受信した圧縮映像データをRTPレベルにてデフラグメントするためのものである。例えば、データフレームデフラグメント部35は、映像配信サーバ1より受信したRTPパケットのヘッダに含まれるシーケンスナンバー・タイムスタンプ・マーカを用いて、映像配信サーバ1において複数のRTPパケットにフラグメントされた圧縮映像データのデフラグメントを行う。
デフラグメントアルゴリズムプール部36は、データフレームデフラグメント部35において圧縮映像データのデフラグメントを行うための複数のデフラグメントアルゴリズムを保持するためのものである。
デフラグメントアルゴリズム管理部37は、デフラグメントアルゴリズムを管理するためのものである。デフラグメントアルゴリズム管理部37は、例えば、データフレームデフラグメント部35における圧縮映像データのデフラグメントを行うためのデフラグメントアルゴリズムを、デフラグメントアルゴリズムプール部36にて保持されている複数のデフラグメントアルゴリズムから選択的に切り換えることを、データフレームデフラグメント部35に指示する。
圧縮映像データデコード部38は、圧縮映像データのデコード処理を行うためのものである。
再生タイミング制御部39は、映像の再生タイミングを制御するためのものである。例えば、再生タイミング制御部39は、RTPスタックより得られる圧縮映像データを、該RTPスタックより圧縮映像データと共に得られるRTPパケットのヘッダに含まれていたタイムスタンプ情報に基づいて、適切なタイミングにて圧縮映像データデコード部38に渡す。
画面表示部40は、圧縮映像データデコード部38によりデコード処理された映像データを画面表示するためのものである。例えば、画面表示部40は、映像データを映像受信クライアント3のユーザに示すための液晶表示装置により構成される(液晶表示装置に限定されるものではない)。
映像受信制御部41は、映像受信のための制御を行うためのものである。例えば、映像受信制御部41は、セッション制御部32により映像配信サーバ1とネゴシエーションされたセッション情報をRTPスタックに提供することと、再生タイミング制御部39に対して(再生タイミングを制御した上で)圧縮映像データを圧縮映像データデコード部38に渡す動作の開始と終了を命令することと、圧縮映像データデコード部38に対して再生タイミング制御部39から渡される圧縮映像データのデコード処理の開始又は終了を命令することを行う。
ここで、図1に示されるような映像配信サーバ1が映像受信クライアント3へ映像ストリームを配信するにあたり、その開始のために、例えばSIP(Session Initiation Protocol)が用いられる。映像受信クライアント3のセッション制御部32が映像配信サーバ1へ映像ストリームの配信開始のリクエストを送る。映像配信サーバ1のセッション制御部12が映像受信クライアント3からのリクエストを受け取り、その後に数回のSIPメッセージのやり取りがなされた後に映像配信サーバ1と映像受信クライアント3とのセッションが構築される。このとき、映像配信サーバ1が配信する映像ストリームの使用可能コーデックの候補を映像受信クライアント3へ提示することや、映像受信クライアント3が再生可能な映像コーデックの候補を映像配信サーバ1へ提示することを始めとした、映像ストリームの配信に必要な各種設定情報は、SIPのメッセージに含まれる形で運ばれるSDP(Session Description Protocol)により、やり取りされる。なお、ここでは、映像ストリームの配信の開始のためにSIPとSDPを用いる場合について説明したが、他のプロトコルを用いても構わない。
次に、映像配信サーバ1が映像ストリームを映像受信クライアント3に送信する手順について説明する。
図4に、この手順の一例を示す。
<ステップS1>
映像配信サーバ1のセッション制御部12は、(例えば、上記した映像ストリーム配信開始のリクエストの受信を契機として開始された)映像受信クライアント3とのセッション構築が完了すると、その旨を映像配信制御部18に通知する。通知を受けた映像配信制御部18は、映像取得部14に対して(例えばカメラから)映像を取得するよう指示する。この指示を受けた映像取得部14は、映像の取得を開始する。次に、映像配信制御部18は、映像取得部14に対して、取得した映像を映像エンコード部15に渡すよう指示する。この指示を受けた映像取得部14は、映像を映像エンコード部15に渡す。
映像配信サーバ1のセッション制御部12は、(例えば、上記した映像ストリーム配信開始のリクエストの受信を契機として開始された)映像受信クライアント3とのセッション構築が完了すると、その旨を映像配信制御部18に通知する。通知を受けた映像配信制御部18は、映像取得部14に対して(例えばカメラから)映像を取得するよう指示する。この指示を受けた映像取得部14は、映像の取得を開始する。次に、映像配信制御部18は、映像取得部14に対して、取得した映像を映像エンコード部15に渡すよう指示する。この指示を受けた映像取得部14は、映像を映像エンコード部15に渡す。
<ステップS2>
次に、映像配信制御部18は、映像エンコード部15に対して、映像取得部14から取得した映像を、映像受信クライアント3とのセッション開始時にやり取りしたSDPから得た「映像受信クライアント3がデコード可能なコーデック」にエンコードして、圧縮映像データを作成するよう指示する。この指示を受けた映像エンコード部15は、圧縮映像データを作成する。
次に、映像配信制御部18は、映像エンコード部15に対して、映像取得部14から取得した映像を、映像受信クライアント3とのセッション開始時にやり取りしたSDPから得た「映像受信クライアント3がデコード可能なコーデック」にエンコードして、圧縮映像データを作成するよう指示する。この指示を受けた映像エンコード部15は、圧縮映像データを作成する。
<ステップS3>
次に、映像配信制御部18は、映像エンコード部15に対して、上記(映像をエンコードして得られた)圧縮映像データをRTPスタックに渡すように指示する。この指示を受けた映像エンコード部15は、圧縮映像データをRTPスタックに渡す。映像エンコード部15から圧縮映像データを得たRTPスタックのデータフレームフラグメント部16は、通信部11からIPネットワークに送信されるパケットが、映像配信サーバ1と映像受信クライアント3との間のネットワークMTUを超えないようなサイズに、圧縮映像データをフラグメントする。
次に、映像配信制御部18は、映像エンコード部15に対して、上記(映像をエンコードして得られた)圧縮映像データをRTPスタックに渡すように指示する。この指示を受けた映像エンコード部15は、圧縮映像データをRTPスタックに渡す。映像エンコード部15から圧縮映像データを得たRTPスタックのデータフレームフラグメント部16は、通信部11からIPネットワークに送信されるパケットが、映像配信サーバ1と映像受信クライアント3との間のネットワークMTUを超えないようなサイズに、圧縮映像データをフラグメントする。
MTUを超えないようにフラグメントの大きさを選択する理由は、RTCPによりやり取りされる統計情報にはデータを送受信する端末間のネットワーク状態を知るための情報が含まれており、MTUを超えるサイズにより圧縮映像データが送信された場合にはIPフラグメントが行われ、この統計情報を正確に得ることができないことである。
<ステップS4>
そして、RTPスタックは、データフレームフラグメント部16により1つ以上にフラグメントされた圧縮映像データの断片(の系列)を受け取り、各々の断片にRTPヘッダを付加してそれぞれ通信部11に渡す。
そして、RTPスタックは、データフレームフラグメント部16により1つ以上にフラグメントされた圧縮映像データの断片(の系列)を受け取り、各々の断片にRTPヘッダを付加してそれぞれ通信部11に渡す。
<ステップS5>
通信部11は、例えば、UDPヘッダとIPヘッダを付加してRTPパケットを、IPネットワークを介して、映像受信クライアント3に向けて送信する。
通信部11は、例えば、UDPヘッダとIPヘッダを付加してRTPパケットを、IPネットワークを介して、映像受信クライアント3に向けて送信する。
ここで、図5に、RTPパケットのヘッダを示す。なお、図5は、RFC3550より抜粋したものであり、RFC3550は、URI:http://www.ietf.org/rfc/rfc3550.txtにより閲覧可能である。
図5に示されるように、RTPパケットのヘッダには、RTPのバージョンを示すバージョンフィールド(V)、パディングの有無を示すパディングフィールド(P)、拡張ヘッダフィールドの有無を示す拡張ヘッダフィールド(X)、CSRC(contributing source)の数を示すCSRC数フィールド(CC)、各種メディアフォーマットにより様々な使われ方をするマーカフィールド(M)、RTPにてやり取りされるメディアフォーマットの種別を示すペイロードタイプフィールド(PT)、連続するRTPパケットの順序を識別するためのシーケンスナンバーフィールド(sequence number) 、やり取りされるメディアデータの再生タイミングを示すタイムスタンプフィールド(timestamp) 、RTPパケットの送信元を識別するためのSSRC(synchronization source)識別フィールド(synchronization source identifier)と、ミキサと呼ばれる中間装置を用いる際に使用されるCSRC識別フィールド(contributing source identifier)が含まれる。ただし、CSRC数フィールドの値が0であれば、CSRC識別フィールドはヘッダに含まれない。
次に、図6を参照しながら、1枚の配信映像(図中、101参照)に対応する1枚の圧縮映像データ(図中、102参照)をRTPフラグメントして得られた1つ以上の圧縮映像データの断片(図中、103〜107参照)の各々に、RTPヘッダを付加するルールについて説明する。
映像配信サーバ1が圧縮映像データを映像受信クライアント3に配信する場合に重要となる要素が、RTPパケットのヘッダのシーケンスナンバーとタイムスタンプとマーカである。
図6において1枚の圧縮映像データが複数のRTPパケットにフラグメントされる際に、まず、シーケンスナンバーは、フラグメントされた複数のRTPパケットの中で先頭のものから順番に1ずつ番号が増えるように付けられる。例えば、図6において、“seq=1”〜“seq=5”となっている部分が、それを示している。すなわち、1枚の圧縮映像データをRTPフラグメントすると、圧縮映像データの先頭が含まれるRTPパケットのシーケンスナンバーが最も小さく、圧縮映像データの末尾が含まれるRTPパケットのシーケンスナンバーが最も大きくなる。ただし、シーケンスナンバーは16ビットのフィールドで表されているために、シーケンスナンバーが“216−1”となったRTPパケットの次のRTPパケットのシーケンスナンバーは0に戻り、この場合に限り上述の大小関係が逆転してシーケンスナンバーが付与される。
次に、タイムスタンプは、メディアデータを受け取る側にメディアの再生タイミングを教えるためのものであるため、フラグメントされた複数のRTPパケットの中ですべてが同一となる。例えば、図6においては、すべてのRTPパケットで“ts=3000”と共通のタイムスタンプ値(3000)が付けられている。
最後に、マーカは、フラグメントされた複数のRTPパケットのうちで圧縮映像データの末尾を含むRTPパケットにのみ付加される(マーカフィールドの値が1となる)。例えば、図6においては、107で示すRTPパケットのマーカフィールドmの値だけ1となり、103〜106で示すRTPパケットのマーカフィールドmの値はすべて0となる。マーカは、複数のRTPパケットにフラグメントされた圧縮映像データを受信側にてデフラグメントして元の1枚の圧縮映像データとして利用するために利用される。
次に、映像受信クライアント3が映像配信サーバ1より配信された映像ストリームを受信して再生する手順について説明する。
図7に、この手順の一例を示す。
<ステップS11>
映像受信クライアント3のセッション制御部32は、(例えば上記した映像ストリーム配信開始のリクエストを送信し、これを映像配信サーバ1が受信したことを契機として開始された)映像配信サーバ1とのセッション構築が完了したことを、映像受信制御部41に通知する。映像配信サーバ1から映像ストリームの配信が開始され、IPネットワークを介して通信部31がIPパケットを受信する。通信部31は、必要な処理を行った後に、RTPパケットをRTPスタックに渡す。RTPスタックでは、RTPバージョンフィールドの妥当性検証などのエラーチェックが行われた後に、デフラグメント処理が行われる。
映像受信クライアント3のセッション制御部32は、(例えば上記した映像ストリーム配信開始のリクエストを送信し、これを映像配信サーバ1が受信したことを契機として開始された)映像配信サーバ1とのセッション構築が完了したことを、映像受信制御部41に通知する。映像配信サーバ1から映像ストリームの配信が開始され、IPネットワークを介して通信部31がIPパケットを受信する。通信部31は、必要な処理を行った後に、RTPパケットをRTPスタックに渡す。RTPスタックでは、RTPバージョンフィールドの妥当性検証などのエラーチェックが行われた後に、デフラグメント処理が行われる。
<ステップS12>
RTPスタックのデータフレームデフラグメント部35は、複数のRTPパケットから1枚の圧縮映像データにデフラグメントしたものを、RTPパケットのヘッダのタイムスタンプ情報とともに、再生タイミング制御部39に渡す。再生タイミング制御部39は、再生の基準となる参照クロックとタイムスタンプを比較することで、適切なタイミングにおいて圧縮映像データを圧縮映像データデコード部38に渡す。
RTPスタックのデータフレームデフラグメント部35は、複数のRTPパケットから1枚の圧縮映像データにデフラグメントしたものを、RTPパケットのヘッダのタイムスタンプ情報とともに、再生タイミング制御部39に渡す。再生タイミング制御部39は、再生の基準となる参照クロックとタイムスタンプを比較することで、適切なタイミングにおいて圧縮映像データを圧縮映像データデコード部38に渡す。
本実施形態では、再生タイミング制御部39が映像の各フレームの再生タイミングを制御するが、用いられるコーデックによっては必ずしもそのような制御が必要ではなく、例えばH.264であれば各フレームの映像データのヘッダに再生タイミングを示す情報が含まれる。
<ステップS13>
圧縮映像データデコード部38は、再生タイミング制御部39より圧縮映像データを取得してデコード処理を行い、その結果を画面表示部40に渡す。
圧縮映像データデコード部38は、再生タイミング制御部39より圧縮映像データを取得してデコード処理を行い、その結果を画面表示部40に渡す。
<ステップS14>
画面表示部40は、圧縮映像データデコード部38でデコードされた映像データをユーザに表示する。
画面表示部40は、圧縮映像データデコード部38でデコードされた映像データをユーザに表示する。
次に、図8を参照しながら、フラグメントされたRTPパケット(図中、103〜107参照)から、1枚の受信映像(図中、109参照)に対応する1枚の圧縮映像データ(図中、108参照)をデフラグメントする過程について説明する。
映像配信サーバ1が送信した複数のRTPパケットを映像受信クライアント3が受信し、各RTPパケットのヘッダのシーケンスナンバーとヘッダのタイムスタンプとヘッダのマーカとを用いて、1枚の圧縮映像データをデフラグメントする。
まず、受信した複数のRTPパケットをシーケンスナンバーの小さいものから大きなものへ順に並べる。ただし、図6を用いたRTPパケットのヘッダの付加方法の説明にて述べたように、シーケンスナンバーは“216−1”の次が0になり、この値の飛びもシーケンスナンバーが連続しているものと判別される。
次に、タイムスタンプに注目する。1枚の圧縮映像データがフラグメントされて送信されたところの複数のRTPパケットのヘッダには、すべて同一のタイムスタンプが付加されている。最も小さいシーケンスナンバーを持つRTPパケットからより大きいシーケンスナンバーを持つRTPパケットへと順番に、タイムスタンプの同一性をチェックしていく。このチェックは、RTPパケットのヘッダのマーカフィールドの値が1であるパケットに到達するまで行われる。ただし、マーカフィールドの値が1であるパケットに到達する前に、シーケンスナンバーの順番に並べられたRTPパケットのシーケンスナンバーに不連続が存在していることが判断されるか、RTPパケットのタイムスタンプ情報の同一性が失われているRTPパケットに到達した場合には、映像配信サーバ1と映像受信クライアント3との間にてRTPパケットが失われたことを示しており、1枚の圧縮映像データをデフラグメントすることができないと判断される。なお、RTPパケットがIPネットワークを介してやり取りされる際に映像配信サーバ1におけるパケットの送信順序と映像受信クライアント3におけるパケットの受信順序とが逆転する場合を考慮して、1枚の圧縮映像データをデフラグメントすることができないと判断されるまでに時間的な猶予を設ける実装も可能である。
図8に示すように、RTPパケットのヘッダのシーケンスナンバー(seq)が連続しており、タイムスタンプ(ts)が同一でありマーカフィールド(m)の値が1であるRTPパケットまでチェックが到達した場合に、1枚の圧縮データのデフラグメントが可能と判定される。
さて、映像受信クライアント3のRTPスタックのデータフレームデフラグメント部35にて、映像配信サーバ1よりIPネットワークを介して受信した複数のRTPパケットから1枚の圧縮映像データをデフラグメントする際に、デフラグメントアルゴリズム管理部37は、デフラグメントアルゴリズムプール部36に存在する複数のデフラグメントアルゴリズムから、フラグメント数に最適なアルゴリズムを1つ選択してデータフレームデフラグメント部35に通知する役割を担う。
デフラグメントアルゴリズムには、例えば、単純に受信キューにシーケンスナンバー順の順番で並べられた複数のRTPパケットでデータフレームのデフラグメントが可能であると判断されるまでスキャンを続ける単純なアルゴリズム(以下、「単純アルゴリズム」と呼ぶ。)と、受信キューにRTPパケットをシーケンスナンバーの順番に並べる際に追加的な情報を各パケットに付加することでデフラグメントが可能であるかを簡便に判断することができるアルゴリズム(以下、「付加情報アルゴリズム」と呼ぶ。)が存在する。
詳細については後で説明するが、これらのアルゴリズムには、フラグメント数による性能の優劣が存在する。後に示す単純アルゴリズムは、圧縮映像データのフラグメント数が少ない場合に付加情報アルゴリズムと比較して性能が優れており、計算機のCPU(Central processing unit)のリソースの使用量が少なくて済む。一方、付加情報アルゴリズムは、圧縮映像データのフラグメント数が多い場合に単純アルゴリズムと比較して性能が優れており、計算機のCPUのリソースの使用量が少なくて済む。圧縮映像データのフラグメント数に対して選択的にデフラグメントアルゴリズムを使用することにより、映像受信クライアント3を効率的に動作させることが可能である。
以下では、上述の単純アルゴリズムと付加情報アルゴリズムについてより詳しく説明する。
映像受信クライアント3がリアルタイムの映像ストリーミングを受信してユーザに表示する場合、できるだけ低遅延であることが望ましい。RTPスタックのデフラグメント過程は、その側面から、RTPパケットを受信する毎に圧縮映像データのデフラグメントが可能であるか否かの判断を行い、ユーザアプリケーションにできるだけ早いタイミングにてデフラグメントされた圧縮映像データを渡す。したがって、映像受信クライアント3のRTPスタックのデータフレームデフラグメント部35は、RTPパケットを受信して受信キューに入れる処理と、圧縮映像データのデフラグメントが可能であるか否かの判断をする処理とを交互に行う。デフラグメントされた圧縮映像データはユーザアプリケーションの一部である再生タイミング制御部39に渡される。以下、単純アルゴリズムと付加情報アルゴリズムのそれぞれについて、RTPパケットを受信キューに入れる処理及び圧縮映像データのデフラグメントが可能であるか否かの判断をする処理を詳しく説明する。
最初に、単純アルゴリズムについて説明する。
RTPスタックのデータフレームデフラグメント部35がRTPパケットを受信キューに入れる処理では、そのRTPパケットのシーケンスナンバーをチェックして、シーケンスナンバーの順序で受信キューの適切な位置に配置する。受信する映像ストリームについてIPネットワークにおけるパケット到着順序の入れ代わりがない限り、RTPパケットは受信キューの末尾に追加されると考えられる。
図9に、単純アルゴリズムの場合にデータフレームデフラグメント部35が圧縮映像データのデフラグメントが可能であるか否かの判断をする処理の手順例を示す。
受信キューの先頭よりキューのスキャンを開始する(ステップS21)。
先頭RTPパケットのマーカフィールドを参照し、その値が1である場合には(ステップS22)、単一のRTPパケットのみで圧縮映像データが構成されていると判断されるので、そのRTPパケットのデータ部と該RTPパケットのタイムスタンプとをユーザアプリケーションに渡す。
マーカフィールドの値が1でない場合には(ステップS22)、複数のRTPパケットにより圧縮映像データが構成されると判断されるので、ステップS26,S27,S29の全てにおいてYesとなるまで、次々とパケットの検査が続けられる(S30)。ただし、その前にステップS23又はステップS27若しくはステップS28でNoとなった場合には、パケットがまだ到着していないか(S24)又はパケットロスや順序入れ替えなどが発生している(S28)ので、この手順は中止となる(次のRTPパケットが受信されたときに、この手順が最初から実行し直される)。
さて、受信キューの次に位置するはずのRTPパケットが、まだ受信キューに存在していない場合には(ステップS23)、データフレームデフラグメント部35は、RTPパケットを受信キューに入れる処理を行う。
受信キューの次のRTPパケットが存在する場合には(ステップS23)、受信キューのスキャンを進める(S25)。まず、先ほどスキャンを行ったパケットとのシーケンスナンバーの連続性をチェックする。
連続性のチェック結果が正当である(すなわち、シーケンスナンバーが連続している)ときは(ステップS26)、続いて、先ほどスキャンを行ったパケットとのタイムスタンプを比較する。すでに説明したように圧縮映像データが複数のRTPパケットにフラグメントされる際には、各RTPパケットのヘッダのタイムスタンプフィールドは同一のものとなるように付与される。タイムスタンプが先ほどのパケットと同一であればフラグメントされた圧縮映像データを構成する1つのRTPパケットであると判断される。
タイムスタンプが同一であるときは(ステップS27)、続いて、現在検査中のパケットについてマーカフィールドの値を参照する。
マーカフィールドの値が1であれば(ステップS27)、先ほどのRTPパケットと現在検査中のRTPパケットの2つのRTPパケットから1つの圧縮映像データのデフラグメントが可能であると判断されるので、それぞれのRTPパケットのデータ部をシーケンスナンバーの順番に結合されてできたデータフレームとタイムスタンプの値をユーザアプリケーションに渡す。
マーカフィールドの値が1でなければ(ステップS27)、再びデータフレームデフラグメント部35は、RTPパケットを受信キューに入れる処理を行う。
受信キューに入れたRTPパケットは到着順序の逆転したパケットである可能性があるため、データフレームデフラグメント部35は受信キューの先頭も含めてそのRTPパケットが受信キューのどの部分に入れられたかを知ることをできない。このため、データフレームデフラグメント部35は受信キューの先頭よりスキャンを行って圧縮映像データのデフラグメントが可能であるか否かを判断する処理を行う。
最後に、ステップS22又はステップS29でYesとなった場合には、デフラグメント処理を開始し(ステップS31)、RTPパケットのデータ部分をアプリケーションバッファにコピーする(ステップS32)。
単純アルゴリズムでは、受信する複数のRTPパケットについて後述する付加情報アルゴリズムにおいて使用されるような情報を付け加えることをしない。そのために、デフラグメントのために連続して受信キューを先頭よりスキャンするにもかかわらず、フラグメント数が小さい場合においては高速に動作する。
続いて、付加情報アルゴリズムについて説明する。
RTPスタックのデータフレームデフラグメント部35がRTPパケットを受信キューに入れる処理では、単純アルゴリズムと同様に、まず、そのRTPパケットのシーケンスナンバーをチェックして、シーケンスナンバーの順序で受信キューの適切な位置に配置する。次に、直前に受信キューに格納されたRTPパケットとのタイムスタンプの比較を行う。この後に、受信したRTPパケットに個別に対応する付加情報を作成する。
ここで、付加情報について説明する。
図10に、付加情報の例を示す。
変数top_packet_in_same_TSは、同一のタイムスタンプを持つ複数のRTPパケットのうちで最も値の小さいシーケンスナンバーを持つRTPパケットを指示するポインタである。すなわち、1つの圧縮映像データフレームを考えた場合、変数top_packet_in_same_TSにて指示されるRTPパケットは、そのデータフレームの先頭部分を含むデータを保持している。
変数packet_num_in_TSは、変数top_packet_in_same_TSにて指示されるRTPパケットにのみ付与され、同一のタイムスタンプをもつ複数のRTPパケットの数をカウントする。
変数fragment_conditionは、変数top_packet_in_same_TSにて指示されるRTPパケットにのみ付与され、同一タイムスタンプを持つ複数のRTPパケットにて1つの圧縮映像データがデフラグメント可能であるか否かを示す情報を保持する。
データフレームデフラグメント部35がRTPパケットを受信キューに入れる際に、以上の変数(の全部又は一部)を含む付加情報を付与する。
図11に、上記付加情報を付与する処理の手順例を示す。
シーケンスナンバーの順序で受信キューの適切な位置に配置されたRTPパケットに対して、いま配置したRTPパケットよりキューの先頭側の隣接するRTPパケットとのタイムスタンプの比較を行う(ステップS41)。
タイムスタンプの値が異なる場合には(ステップS42)、これから情報を付加するRTPパケットは、デフラグメントされる1つの圧縮映像データの先頭部分を含むデータを保持するパケットである可能性があることから、変数top_packet_in_same_TSに自身へのポインタを格納し(ステップS43)、変数packet_num_in_TSに1を格納する(ステップS44)。
タイムスタンプ値が同一である場合には(ステップS42)、これから情報を付加するRTPパケットは、デフラグメントされる1つの圧縮映像データの先頭部分を含まないデータを保持しているパケットである。変数top_packet_in_same_TSに、シーケンスナンバーが該パケットより小さくかつ近い番号を持つ既に受信キューに格納済みのRTPパケットの変数top_packet_in_same_TSの値をコピーして格納する(ステップS45)。また、変数top_packet_in_same_TSにて指示されるRTPパケットに付加されている変数packet_num_in_TSの値を1つ増加させる(ステップS46)。
次に、受信キューに格納されるRTPパケットのマーカフィールドの値が1でなければ(ステップS47)、受信キューへの格納が完了する(ステップS48)。
一方、受信キューに格納されるRTPパケットのマーカフィールドの値が1であれば(ステップS47)、変数top_packet_in_same_TSにて指示されるRTPパケットの変数packet_num_in_TSの値と、いま受信キューに格納されるマーカフィールドの値が1であるRTPパケットのシーケンスナンバーの値から変数top_packet_in_same_TSにて指示されるRTPパケットのシーケンスナンバーの値を引いたものに1加えたものの2つの値とが同一か否か調べ(あるいは、両方の値の差を計算し)(ステップS49)、それらが一致する場合(あるいは、それらの差が0である場合)(ステップS50)、デフラメントが可能であるので、変数top_pacekt_in_same_TSにて指示されるRTPパケットの変数fragment_conditionの値に、圧縮映像データのデフラグメントが可能であることを示す値(例えば1)を入れる(ステップS51)。なお、一致しない場合(あるいは、差が0でない場合)には(ステップS51)、デフラメントは可能ではなく、パケットロスや順序入れ替えなどが発生している(S52)ことになる。
付加情報アルゴリズムの圧縮映像データがデフラグメント可能であるか否かの判断は、変数fragment_conditionの値を検査するのみで可能である。変数fragment_conditionの値が圧縮映像データのデフラグメントが可能であることを示す値であれば、マーカフィールドの値が1であるRTPパケットに到達するまで順番にパケットのデータ部をシーケンスナンバーの順番に結合し、デフラグメントされた1つの圧縮映像データとタイムスタンプの値をユーザアプリケーションに渡す。もし、変数fragment_conditionの値が上述とは違うものであれば、まだデフラグメントするだけの十分なデータが受信キューに存在しないか、デフラグメントが不可能であるかのどちらかであると判断される。デフラグメントするだけの十分なデータが受信キューに存在しない場合、RTPパケットを受信キューに入れる処理に切り替わる。
図12に、単純アルゴリズムと付加情報アルゴリズムについて、データフレームのフラグメント数に応じた性能の比較を行った結果を例示する。
図12において、横軸は、データフレームのフラグメント数を示している。各RTPパケットのデータ部のサイズは1400バイトである。例えば、フラグメント数が5であれば、デフラグメントされた1つのデータフレームのサイズは1400×5=7000バイトである。縦軸は、付加情報アルゴリズムを基準とした単純アルゴリズムの性能差を、パーセント単位で示したものである。性能差が正であることは付加情報アルゴリズムの性能が単純アルゴリズムよりも優っていることを示す。特徴的な結果として、例えば、フラグメント数が2である場合、単純アルゴリズムは付加情報アルゴリズムよりも5%高速に動作し、一方、フラグメント数が7である場合、付加情報アルゴリズムは単純アルゴリズムよりも7%高速に動作する。図12の例の場合、フラグメント数が5以下の場合には単純アルゴリズムを選択し、フラグメント数が6以上の場合には付加情報アルゴリズムを選択するのが良いことが分かる。
本実施形態では、圧縮映像データのフラグメント数に対して選択的にデフラグメントアルゴリズムを使用することにより映像受信クライアント3を効率的に動作させるが、その動作は例えば以下に示すような制御により実現できる。
実装が簡便な方法としては、フラグメント数の平均値によりデフラグメントアルゴリズムの選択を断続的に変化させる方法がある。
図13に、この場合の処理手順の一例を示す。
単純アルゴリズムと付加情報アルゴリズムとの性能が逆転する性能境界であるフラグメント数Nがあらかじめ分かっているものとする(フラグメント数Nがあらかじめ決められているものとする)。
映像意配信サーバからの映像ストリームの配信が開始され(ステップS61)、RTPデータストリームが受信されると(ステップS62)、まず、映像受信クライアント3のデータフレームデフラグメント部35は、単純アルゴリズムにて動作して受信を行う。
デフラグメントアルゴリズム管理部37は、データフレームデフラグメント部35がデフラグメントする各データフレームのフラグメント数をカウントする。デフラグメントアルゴリズム管理部37は、一定時間カウントした後に(ステップS63)、受信中の映像ストリームの平均フラグメント数Naを計算する(ステップS64)。
デフラグメントアルゴリズム管理部37は、NaがN以上である場合には(ステップS65)、デフラグメントに付加情報アルゴリズムを用いる方が効率的であると判断し、データフレームデフラグメント部35に付加情報アルゴリズムにてデフラグメントを行うように指示する(ステップS66)。
一方、NaがNよりも小さい場合には(ステップS65)、単純アルゴリズムにてデフラグメントを行うように指示する(ステップS67)。
その後に、一定時間経過すると、再びデフラグメントアルゴリズム管理部37は、データフレームデフラグメント部35が使用すべきデフラグメントアルゴリズムがいずれであるかの判断を行う(ステップS62〜S65)。
次に、他の方法として、映像ストリームの圧縮映像データのフラグメント数の変化パターンに注目して効率的な動作を行う方法がある。
まず、変化パターンについてH.264を例にとって説明する。
映像配信サーバ1から映像受信クライアント3へと映像データストリームがH.264にて配信されている。図14を参照しながら、H.264により映像配信サーバ1が配信する映像データストリームのフラグメント数の変化について説明する。
H.264には主に、単独で1枚のビデオフレームが完結するIフレームと、直前のビデオフレームの内容との差分を利用して1枚のビデオフレームを作成するためのPフレームと、直前のビデオフレームの内容との差分と直後のビデオフレームの内容との差分の2種類の情報を利用して1枚のビデオフレームを作成するためのBフレームの3種類のフレームがある。Iフレームは単独で1枚のビデオフレームとして完結しているためにそのデータサイズは、他のビデオフレームからの情報を利用するPフレームやBフレームと比較して大きいことがほとんどである。例えば、リアルタイム映像の配信では、Bフレームがそのビデオフレームよりも未来の時刻のビデオフレームの情報を必要とすることから、映像配信サーバ1から映像受信クライアント3へと映像が配信されてから映像受信クライアント3にて映像が表示されるまでの遅延を増大させないためにIフレームとPフレームの2種類のフレームを用いた配信が好まれて使用される。
ここでは、本実施形態の理解を容易にするために、Bフレームを用いずに、IフレームとPフレームを用いたリアルタイム映像を映像配信サーバ1が映像受信クライアント3に配信する場合を例にとって説明するが、Bフレームを用いたとしても本実施形態の特徴が変わるものではない。
図14は、映像配信サーバ1から映像受信クライアント3に配信される映像データストリームのデータの模式図である。ここでは、図14に示されるように、映像受信クライアント3は、IフレームとPフレームを、{I,P,P,P,P,I,P,P,P,P,I,…}という順序で受信している場合について考える。なお、図14において横長の長方形が複数描かれているが、各々が1つのRTPパケットを示している。IフレームとPフレームの系列は一般に、直近の2つのIフレームに挟まれているPフレームの数が一定である場合が多い。
ここで、図14の特徴を抽出した図15を参照しながら、映像データストリームの特徴と、映像受信クライアント3のデフラグメントアルゴリズム管理部37の動作について説明する。
単純アルゴリズムと付加情報アルゴリズムのフラグメント数に対する優位さが逆転するフラグメント数が存在し、例えば図15の「性能境界」にて表されるフラグメント数=5がこれらの優劣を分けるとする。図15にて示されるパターンにおいては、Pフレームのフラグメント数は常に5よりも小さいので、単純アルゴリズムを用いてデフラグメントを行う方が効率が良く、一方、Iフレームのフラグメント数は常に5よりも大きいので、付加情報アルゴリズムを用いてデフラグメントを行う方が効率が良い。
デフラグメントアルゴリズムの適切な使用のために、映像受信クライアント3のRTPスタックのデフラグメントアルゴリズム管理部37は、受信する映像ストリームのビデオフレームについてそれぞれのフラグメント数を観察し、フラグメント数のシーケンスパターンを予測する。この予測は、単純アルゴリズムと付加情報アルゴリズムの性能境界であるフラグメント数Nとの大小にのみ注目すればよい。すなわち、映像受信クライアント3が図15のようなIフレームとPフレームのデータストリームを受信している場合、性能境界N以上のフラグメント数であるデータフレームであった場合には1を、性能境界Nより小さいフラグメント数であるデータフレームであった場合には0を記録すると、得られる系列は「10000100001…」となる。デフラグメントアルゴリズム管理部37は、この系列から特徴的な1を基準として「10000」が繰り返しのパターンであると判断して予測シーケンスパターンを生成する。
デフラグメントアルゴリズム管理部37は、この予測シーケンスパターンに基づいて、適当なタイミングにてデータフレームデフラグメント部35にデフラグメントアルゴリズムの切替を開始するとともに逐一指示をする。すなわち、データフレームが複数のRTPパケットにデフラグメントされる際にデータフレームが異なれば異なるタイムスタンプが付与されることから、タイムスタンプの変化から判断して、使用するデフラグメントアルゴリズムを予測シーケンスパターンに基づいて指示する。
予測シーケンスパターンの適用については、どのようなタイミングでも構わないが、例えば、フラグメント数の観察によって「…0010000」となった直後に予測シーケンスパターン「10000」の適用を開始すればよい。
図16に、映像受信クライアント3のRTPスタックのデフラグメントアルゴリズム管理部37の動作に対する擬似コードの一例を示す。
図16に示されている関数は、RTPパケットを受信キューに格納するための関数RTP_recv_packet_queuing_functionと、後に説明する関数do_fragment_function_changeである。関数recv_packet_from_RTP_validation_checkが通信部31からRTPパケットを受け取り、関数queuing_by_sequence_numberが受け取ったRTPパケットのヘッダのシーケンスナンバーから判断して受信キューの適切な位置にそのRTPパケットを格納する。
次に、関数do_fragment_function_chngeに入って受信したRTPパケットが直前に受信したRTPパケットと比較して異なっているか否かの判断を行う。もし異なっている場合には、いま受信したRTPパケットと直前に受信したRTPパケットとは異なる圧縮映像データの1つの構成要素であると判断され、予測シーケンスパターンのビット列の読み出しを先に進める。
図16において、予測シーケンスパターンは変数sequence_patternにて示されており、本具体例においては、予測シーケンスパターンは、2進数表現で「10000」という値を持つ。また、図16において変数counterは、予測シーケンスパターンを読み出すためのカーソルを示しており、カーソルが予測シーケンスパターンの末尾(本具体例では、1であるビット)に達したときに、先頭に戻るように実装を行う。
関数do_fragment_function_changeの呼び出しを含む一連のif文によるスコープを抜けた後に、変数use_simple_functionの値が0でない場合に限り、関数adding_info_for_queuing_RTPpacketにより付加情報アルゴリズムの適用を行う。
以上のデフラグメントアルゴリズム管理部37の動作は、映像配信サーバ1と映像受信クライアント3との間に独自実装が必要ではなく、映像受信クライアント3がより汎用的な映像配信サーバ1から映像ストリームを受信する場合に適用可能である。
一方で、映像配信サーバ1と映像受信クライアント3との間に独自実装を加えることで実現する方法も存在する。
その1つとして、映像受信クライアント3のデフラグメントアルゴリズム管理部37にて予測シーケンスパターンの生成を行わない代わりに、シーケンスパターンを映像配信サーバ1から映像受信クライアント3に提供する方法がある。
例えば、RTPを用いたデータセッションに用いられるRTCPに独自のフィールドを追加することにより、これを実現する方法がある。RTCPでは、アプリケーション固有のAPP RTCPパケットを定義することが可能であり、これを用いてIフレームとPフレームのシーケンスパターンのやり取りを行う。この場合、映像受信クライアント3においてRTCP処理部34とデフラグメントアルゴリズム管理部37との間の通信が必要となる。
図17に、この場合の映像受信クライアント3の構成例を示す。
RTCP処理部34は、APP RTCPパケットからシーケンスパターンを抽出し、デフラグメントアルゴリズム管理部37に渡す。デフラグメントアルゴリズム管理部37は、受け取ったシーケンスパターンを用いて、適当なタイミングにてデータフレームデフラグメント部35にデフラグメントアルゴリズム切替の指示を開始する。デフラグメントアルゴリズム管理部37はデータフレームが複数のRTPパケットにフラグメントされる際に、複数のRTPパケットには同一のタイムスタンプが付与されることから、使用するデフラグメントアルゴリズムをタイムスタンプの変化とシーケンスパターンに基づいて切替るよう指示する。なお、ここでは、一例としてAPP RTCPパケットを用いてシーケンスパターンのやり取りを実現したが、他のプロトコルを用いて映像配信サーバ1と映像受信クライアント3との間で同様の情報をやり取りしても構わない。
また、他の独自実装を要求する例として、映像受信クライアント3のデフラグメントアルゴリズム管理部37にて予測シーケンスパターンの生成を行わない代わりに、RTPパケットのヘッダのタイムスタンプを利用してデフラグメントアルゴリズムの制御を行う方法がある。
一般に映像ストリームをRTPパケットにて伝送する場合、タイムスタンプは90kHzのものを用いることが多く、映像のフレームレートが30fpsにて配信されている場合のタイムスタンプは、フレームごとに3000ずつ増加する。この場合、タイムスタンプフィールドの最下位ビットは、増加数の3000が偶数であることから、変化することはない。したがってこの場合には、最下位ビットにフラグメントアルゴリズムの切替制御情報を重畳することができる。また、タイムスタンプの最下位ビットが変化するような増加をする場合も、以下に示すようにあらかじめ最下位ビットをデフラグメントアルゴリズムの制御に使用できる。
例えば、単純アルゴリズムにてデフラグメントすべきデータフレームであればタイムスタンプの最下位ビットを0に設定することでRTPパケットを送信し、付加情報アルゴリズムにてデフラグメントすべきデータフレームであればタイムスタンプの最下位ビットを1に設定することでRTPパケットを送信するよう決めると、図16にて示されていた擬似コードは、例えば、図18にて示されるものに変更される。変数RTPpacket_timestampは、いま受信したRTPパケットのタイムスタンプであり、図18においては、タイムスタンプの最下位ビットが1の場合に、フラグメント数が大きいときに優位な付加情報アルゴリズムが選択されるようになっている。
この方法では、映像配信サーバ1の独自実装により映像受信クライアント3のデフラグメントアルゴリズムの選択を可能にしているにもかかわらず、タイムスタンプの本来の値からの変化が最小限にとどめられていることにより、この実装に対応していない一般の映像受信クライアント3での視聴に大きな影響を与えるものではない。すなわち、映像受信クライアント3において映像を再生する場合にRTPパケットのヘッダのタイムスタンプ情報を参照するが、本実施形態によるタイムスタンプ値の変化が1であり、これは90kHzにて動作するクロックと比較すると、時間にして0.011ミリ秒であり、フレームレートが30fpsである映像の連続するビデオフレームの再生間隔である33ミリ秒に比べて、十分に小さい。
以上説明してきたように、本実施形態によれば、映像受信クライアントが映像配信サーバからRTPにより映像配信を受ける場合において、従来のようにビットレートとは違う側面であるデータフレームのフラグメント数に注目し、選択的に最適な受信アルゴリズムを適用することで、映像受信クライアントが効率的に動作することができる。
なお、以上の各機能は、ソフトウェアとして記述し適当な機構をもったコンピュータに処理させても実現可能である。
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
1…映像配信サーバ、3…映像受信クライアント、11…通信部、12…セッション制御部、13…セッション情報記憶部、14…映像取得部、15…映像エンコード部、16…データフレームフラグメント部、17…RTCP処理部、18…映像配信制御部、31…通信部、32…セッション制御部、33…セッション情報記憶部、34…RTCP処理部、35…データフレームデフラグメント部、36…デフラグメントアルゴリズムプール部、37…デフラグメントアルゴリズム管理部、38…圧縮映像データデコード部、39…再生タイミング制御部、40…画面表示部、41…映像受信制御部、20,50…RTPスタック
Claims (16)
- 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する映像受信クライアントであって、
前記パケットを受信するパケット受信部と、
各々の前記データフレームにつき、当該データフレームのもととなる前記パケットをもとに、当該データフレームをデフラグメントするデフラグメント部と、
フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから、前記デフラグメント部が前記データフレームをデフラグメントする際に使用させるものを、前記データフレームに係るフラグメント数に応じて選択して、前記デフラグメント部に指示する制御部とを備えたことを特徴とする映像受信クライアント。 - 前記制御部は、前記デフラグメント部によりデフラグメントされた前記データフレームが幾つのパケットにフラグメントされていたかを観察し、ある有限時間内において受信された前記映像ストリームを構成する複数の前記データフレームのフラグメント数の平均値を計算し、算出された該平均値に基づいて、前記複数のデフラグメントアルゴリズムのうちから、適切なデフラグメントアルゴリズムを選択することを特徴とする請求項1に記載の映像受信クライアント。
- 前記制御部は、前記デフラグメント部によりデフラグメントされた前記データフレームが幾つのパケットにフラグメントされていたかを観察し、この観察の結果に基づいて、フラグメント数のシーケンスパターンを予測し、予測された該シーケンスパターンに基づいて、前記複数のデフラグメントアルゴリズムのうちから、適切なデフラグメントアルゴリズムを選択することを特徴とする請求項1に記載の映像受信クライアント。
- 前記映像配信サーバから、フラグメント数のシーケンスパターンを示す情報を受信する情報受信部を更に備え、
前記制御部は、受信された前記シーケンスパターンに基づいて、前記複数のデフラグメントアルゴリズムのうちから、適切なデフラグメントアルゴリズムを選択することを特徴とする請求項1に記載の映像受信クライアント。 - 前記映像ストリームを構成する前記パケットには、前記フラグメント数に関連する情報が重畳されており、
前記パケット受信部は、受信した前記パケットから、前記フラグメント数に関連する情報を抽出し、
前記制御部は、抽出された前記フラグメント数に関連する情報に基づいて、前記複数のデフラグメントアルゴリズムのうちから、適切なデフラグメントアルゴリズムを選択することを特徴とする請求項1に記載の映像受信クライアント。 - 前記複数のデフラグメントアルゴリズムを保持するプール部を更に備え、
前記制御部は、前記プール部に保持されている前記複数のデフラグメントアルゴリズムのうちから、前記デフラグメント部が前記データフレームをデフラグメントする際に使用させるものを選択し、
前記デフラグメント部は、前記プール部に保持されている前記複数のデフラグメントアルゴリズムのうち、前記制御部から指示されたものを使用することを特徴とする請求項1ないし5のいずれか1項に記載の映像受信クライアント。 - 前記複数のデフラグメントアルゴリズムは、第1のデフラグメントアルゴリズムと第2のデフラグメントアルゴリズムとの二つのデフラグメントアルゴリズムであり、
前記第1のデフラグメントアルゴリズムは、前記フラグメント数が基準値以上である場合に、前記第2のデフラグメントアルゴリズムより性能が良いものであり、
前記第2のデフラグメントアルゴリズムは、前記フラグメント数が前記基準値未満である場合に、前記第1のデフラグメントアルゴリズムより性能が良いものであり、
前記制御部は、前記フラグメント数が基準値以上である場合に、前記第1のデフラグメントアルゴリズムを選択し、前記フラグメント数が前記基準値未満である場合に、前記第2のデフラグメントアルゴリズムを選択するものであることを特徴とする請求項1ないし6のいずれか1項に記載の映像受信クライアント。 - 前記データフレームは、エンコードされたデータであり、
前記映像受信クライアントは、前記データフレームをデコードするデコード部を更に備えたことを特徴とする請求項1ないし7のいずれか1項に記載の映像受信クライアント。 - 前記データフレームを表示する表示部を更に備えたことを特徴とする請求項8に記載の映像受信クライアント。
- 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして、ネットワークを介して映像受信クライアントへ送信する映像配信サーバであって、
各々の前記データフレームにつき、当該データフレームをそれぞれ1つ以上のパケットにフラグメントするフラグメント部と、
前記パケットを送信する送信部と、
前記映像受信クライアントが前記データフレームをデフラグメントする際に使用するデフラグメントアルゴリズムを、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから選択するにあたって、該選択の基準となる情報を、前記映像受信クライアントへ与えるための制御を行う制御部とを備えたことを特徴とする映像配信サーバ。 - 前記制御部は、前記映像ストリームを構成する複数のデータフレームに関係するフラグメント数のシーケンスパターンを示す情報を、前記送信部から前記映像受信クライアントへ送信させることを特徴とする請求項10に記載の映像配信サーバ。
- 前記制御部は、前記パケットのそれぞれに、当該パケットに係る前記デフラグメントの際に使用するデフラグメントアルゴリズムを指示する情報を付与することを特徴とする請求項10に記載の映像配信サーバ。
- 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する映像受信クライアントの受信アルゴリズム切替制御方法であって、
前記映像受信クライアントの備えるパケット受信部が、前記パケットを受信するステップと、
前記映像受信クライアントの備えるデフラグメント部が、各々の前記データフレームにつき、当該データフレームのもととなる前記パケットをもとに、当該データフレームをデフラグメントするステップと、
前記映像受信クライアントの備える制御部が、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから、前記デフラグメント部が前記データフレームをデフラグメントする際に使用させるものを、前記データフレームに係るフラグメント数に応じて選択して、前記デフラグメント部に指示するステップとを有することを特徴とする受信アルゴリズム切替制御方法。 - 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして、ネットワークを介して映像受信クライアントへ送信する映像配信サーバの受信アルゴリズム切替制御方法であって、
前記映像配信サーバの備えるフラグメント部が、各々の前記データフレームにつき、当該データフレームをそれぞれ1つ以上のパケットにフラグメントするステップと、
前記映像配信サーバの備える送信部が、前記パケットを送信するステップと、
前記映像配信サーバの備える制御部が、前記映像受信クライアントが前記データフレームをデフラグメントする際に使用するデフラグメントアルゴリズムを、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから選択するにあたって、該選択の基準となる情報を、前記映像受信クライアントへ与えるための制御を行うステップとを有することを特徴とする受信アルゴリズム切替制御方法。 - 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして送信する映像配信サーバから、ネットワークを介して、該パケットを受信する映像受信クライアントとしてコンピュータを機能させるためのプログラムであって、
前記パケットを受信するパケット受信部と、
各々の前記データフレームにつき、当該データフレームのもととなる前記パケットをもとに、当該データフレームをデフラグメントするデフラグメント部と、
フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから、前記デフラグメント部が前記データフレームをデフラグメントする際に使用させるものを、前記データフレームに係るフラグメント数に応じて選択して、前記デフラグメント部に指示する制御部とをコンピュータに機能させるためのプログラム。 - 映像ストリームを構成する複数のデータフレームをそれぞれ1つ以上のパケットにフラグメントして、ネットワークを介して映像受信クライアントへ送信する映像配信サーバとしてコンピュータを機能させるためのプログラムであって、
各々の前記データフレームにつき、当該データフレームをそれぞれ1つ以上のパケットにフラグメントするフラグメント部と、
前記パケットを送信する送信部と、
前記映像受信クライアントが前記データフレームをデフラグメントする際に使用するデフラグメントアルゴリズムを、フラグメント数により性能が相異なる予め用意された複数のデフラグメントアルゴリズムのうちから選択するにあたって、該選択の基準となる情報を、前記映像受信クライアントへ与えるための制御を行う制御部とをコンピュータに機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008081014A JP2009239480A (ja) | 2008-03-26 | 2008-03-26 | 映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008081014A JP2009239480A (ja) | 2008-03-26 | 2008-03-26 | 映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009239480A true JP2009239480A (ja) | 2009-10-15 |
Family
ID=41252935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008081014A Withdrawn JP2009239480A (ja) | 2008-03-26 | 2008-03-26 | 映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009239480A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014023158A (ja) * | 2012-07-17 | 2014-02-03 | Samsung Electronics Co Ltd | 映像提供システム及びその方法 |
JP2015012580A (ja) * | 2013-07-02 | 2015-01-19 | キヤノン株式会社 | 受信装置、受信方法及びプログラム |
JP2018512099A (ja) * | 2015-01-26 | 2018-05-10 | リスタット リミテッド | セキュア動的通信ネットワーク及びプロトコル |
US10075673B2 (en) | 2012-07-17 | 2018-09-11 | Samsung Electronics Co., Ltd. | System and method for providing image |
-
2008
- 2008-03-26 JP JP2008081014A patent/JP2009239480A/ja not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014023158A (ja) * | 2012-07-17 | 2014-02-03 | Samsung Electronics Co Ltd | 映像提供システム及びその方法 |
US10075673B2 (en) | 2012-07-17 | 2018-09-11 | Samsung Electronics Co., Ltd. | System and method for providing image |
JP2015012580A (ja) * | 2013-07-02 | 2015-01-19 | キヤノン株式会社 | 受信装置、受信方法及びプログラム |
JP2018512099A (ja) * | 2015-01-26 | 2018-05-10 | リスタット リミテッド | セキュア動的通信ネットワーク及びプロトコル |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9112938B2 (en) | Adaptive playback with look-ahead | |
US8566395B2 (en) | Method and apparatus for transmitting hypertext transfer protocol media | |
CN1951083B (zh) | 流传输服务中的改进的质量反馈 | |
US6990512B1 (en) | Method and system for using live time shift technology to control a multimedia file | |
US20050223107A1 (en) | Media delivery apparatus | |
US20080151885A1 (en) | On-Demand Multi-Channel Streaming Session Over Packet-Switched Networks | |
US20050262251A1 (en) | Fast startup for streaming media | |
EP3300372A2 (en) | Streaming multimedia data over a non-streaming protocol | |
CN111586480A (zh) | 低延迟流媒体 | |
US8990407B2 (en) | Fast setup response prediction | |
KR101712102B1 (ko) | Rtsp 세션에 기초해 스트리밍 데이터를 송수신하는 방법 및 장치 | |
JP2006500797A (ja) | マルチメディアストリーミング時にパケット転送遅延の補償を可能にする方法 | |
WO2010017656A1 (en) | Fast content switching in a communication system | |
WO2013017165A1 (en) | Shaping media traffic based on manifest file in http adaptive streaming | |
JP2009239480A (ja) | 映像受信クライアント、映像配信サーバ、受信アルゴリズム切替制御方法及びプログラム | |
JP2005051299A (ja) | パケット送信装置、パケット受信装置、パケット送信方法及びパケット受信方法 | |
US8811478B2 (en) | Data transmission method and apparatus | |
JP2006033026A (ja) | マルチメディア情報の受信方法及びこれを実現するプログラム、マルチメディア情報の受信装置 | |
KR100624854B1 (ko) | 미디어 재전송 장치 및 방법 | |
CN117749856A (zh) | 多媒体信息播放方法、装置及存储介质 | |
JP2005012780A (ja) | 画像伝送方法および画像伝送装置 | |
JP2005328268A (ja) | クライアント端末、ストリーミングサーバ、ストリーミング切り替えシステム及びストリーミング切り替え方法 | |
AU2013202695A1 (en) | Real-time or near real-time streaming | |
AU2013201691A1 (en) | Method for streaming multimedia data over a non-streaming protocol | |
JP2009071796A (ja) | ストリーミング配信装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20110607 |