以下に、添付の図面を参照して、本発明の実施形態について詳細に説明する。以下の実施形態において示す構成は一例にすぎず、本発明は以下に示す具体的な構成例に限定されるものではない。
(システム全体の構成)
図1は、本発明の一実施形態における通信システムの全体構成を示す図である。本実施形態に係る送信装置101は、ネットワーク103を介して、受信装置102と接続される。なお、送信装置101、受信装置102はそれぞれ複数存在してもよい。
送信装置101は、セグメントに分割されたコンテンツデータを受信装置102へプッシュ送信するコンテンツの送信機能を備えている。なお、セグメントには、コンテンツの再生に用いられるパラメータを記述した初期セグメント(イニシャリゼーションセグメント)と、コンテンツデータを記述したメディアセグメントがある。送信装置101は、さらに、ユーザからの入力を受け付ける機能を備えてもよい。送信装置101の具体的な例としては、カメラ装置、ビデオカメラ装置、スマートフォン装置、PC(パーソナルコンピュータ)装置、携帯電話などの情報処理装置が挙げられるが、前述の機能を備えるものであればこれに限定されない。
受信装置102は、コンテンツの再生・表示機能、通信機能を備え、送信装置101からプッシュ送信されたコンテンツデータのセグメントを受信する。受信装置102は、さらに、ユーザからの入力を受け付ける機能を備えてもよい。受信装置102の具体例は、スマートフォン装置、PC装置、テレビ、携帯電話、などの情報処理装置が挙げられるが、前述の機能構成を満たすものであればこれに限定されない。
ネットワーク103は、本実施形態におけるネットワークとしての有線LAN(Local Area Network)、または無線LAN(Wireless LAN)である。なお、本実施形態ではネットワーク103として有線LAN、または無線LANを利用しているが、これに限らず、WAN(Wide Area Network)、PAN(Personal Area Network)などでもよい。また、ネットワーク103は、インターネット等の公衆通信網を経由するものでもよい。
(送信装置の機能構成)
図2は、本実施形態における送信装置の機能構成例を示すブロック図である。本実施形態の送信装置101は、撮像部201、符号化部202、セグメント生成部203、プレイリスト生成部204、セグメント決定部205、指示管理部206、及び、通信部207を有する。
撮像部201は、撮影対象を撮影して、映像データを取得する。符号化部202は、撮像部201により撮影した映像データを符号化する。なお、撮像部201及び符号化部202は送信装置101の外部にあって、符号化された映像データを送信装置101に提供する構成にしてもよい。また、本実施形態において、映像データは動画像だけでなく、音声を含むデータである。なお、送受信対象のコンテンツは、このような映像データだけでなく、静止画像や、テキストデータ等を含む画像、あるいは、Javascript等の受信装置102において実行されるプログラムコードを含む画像でもよい。
セグメント生成部203は、符号化部202で符号化された映像データから映像データの送信単位であるセグメントを生成する。セグメントとは、映像データを空間的又は時間的に分割した映像データの単位をいう。本実施形態におけるセグメントのファイルフォーマットとしてはISOBMFF(Base Media File Format)を利用する例を説明するが、これに限らずMPEG2TSなどでもよい。プレイリスト生成部204は、セグメント生成部203が作成したセグメントへのアクセスを可能とするURLを記載したプレイリストを生成する。プレイリストのフォーマットとしてMPEG−DASHで規定されているMPD(Media Presentation Description)がある。Http Livestreamingにおけるプレイリストの記述方法など、これと同等の機能を有するものでもよい。
通信部207は、受信装置102からの要求に応じて、生成されたプレイリスト及びセグメントをネットワーク103越しに受信装置102へ送信する。指示管理部(PUSH送信指示管理部)206は、通信部207が受信装置102から受信したPUSH送信指示を保持し、またPUSH(プッシュ)送信指示の内容をセグメント決定部205へ伝える。セグメント決定部(送信セグメント決定部)205は、通信部207がセグメント取得要求を受けた際に送信するセグメントを決定する。また、セグメント決定部205は、指示管理部206から受けるPUSH送信指示の内容を元にPUSH送信するセグメントを決定する。
(受信装置の機能構成)
図3は、本実施形態における受信装置の機能構成を示すブロック図である。本実施形態の受信装置102は、表示部301、復号化部302、プレイリスト解析部303、バッファ304、ユーザインタフェイス部305、指示管理部306、セグメント決定部307、通信部308を有する。
通信部308は、ネットワーク103越しに送信装置101からセグメント及びプレイリストを受信し、セグメントはバッファ304に渡し、プレイリストはプレイリスト解析部303へ渡す。バッファ304は、通信部308から渡されたセグメントを蓄積して、一時的に保持する。復号化部302は、バッファ304に蓄積されているセグメントを元に映像データを復号化する。表示部301は、ネットワーク103越しに送信装置101から受信し、復号化部302において復号化された映像データの再生画像を表示したり、音声を出力したりする。なお、表示部301は、受信装置102の外部にあって、受信装置102から映像データを受け取って表示してもよい。
プレイリスト解析部303は、通信部308から渡されたプレイリストを解析する。ユーザインタフェイス部305は、ユーザが操作するための画面をディスプレイ508に表示するなどして、ユーザからの指示を入力する。例えば、送信装置101から受信したプレイリストを基に取得可能な映像の一覧を表示して、ユーザからの選択を受け付けたり、再生の一時停止、キャンセル等の指示を受け付けたりする。
セグメント決定部(取得セグメント決定部)307は、ユーザインタフェイス部305からの入力に基づき、プレイリスト解析部303からの解析結果を元に取得するセグメントを決定する。もっとも、これに限らずネットワーク103の状況に応じてセグメント決定するなど、他の手法を利用してもよい。
指示管理部(PUSH送信指示管理部)306は、プレイリスト解析部303からの解析結果を元にPUSH送信指示を通信部308を介して送信し、送信したPUSH送信指示を管理する。指示管理部306はプレイリスト解析部303の解析結果を参照せずにPUSH送信指示を送信してもよい。またはプレイリストの取得前にPUSH送信指示を送信してもよい。指示管理部306はユーザインタフェイス部305からの入力に基づきPUSH送信指示を送信するが、これに限らずネットワーク103の状況に応じて行うなど、他の手法を利用してもよい。
(送信装置のハードウェア構成)
図4は、本実施形態における送信装置101のハードウェア構成を表すブロック図である。中央処理装置(以下、CPUと称す)401は、装置全体を制御しデータの計算・加工を行う装置である。CPU401は、後述するROM402に格納されたコンピュータプログラムを後述するRAM403に展開して実行する。本実施形態では、CPU401がコンピュータプログラムに基づき装置全体を制御することで、符号化部202、セグメント生成部203、プレイリスト生成部204、セグメント決定部205、及び、指示管理部206を実現する。
ROM402は読出し専用メモリであり、一度書き込まれた情報を読み出すための記憶装置である。本実施形態では、ROM402は、図2で示された各機能部のコンピュータプログラムを格納する。RAM403は書込み可能メモリであり、一時的にデータの書き込みと読み出しを行うための記憶装置である。RAM403は、各プログラムの一時的な値の記憶を行う。
内蔵メモリ404及び外部メモリ405は、アプリケーションのコンテンツを記憶しておく外部記憶装置である。内蔵メモリ404は、SSD(ソリッド・ステート・ドライブ)やハードディスク等の内蔵されたストレージ装置である。外部メモリ405は、USBメモリ、SDメモリ等に代表されるフラッシュメモリ等の着脱可能なメモリ装置である。なお、図2の各機能を実現するためのコンピュータプログラムは、ROM402ではなく、RAM403、内蔵メモリ404、あるいは、外部メモリ405に記憶してもよい。
入力装置406はユーザからの指示を入力する装置である。入力装置406は、電源ボタンや音量ボタン、ホームボタンなどボタンとして実装したり、タッチパネル、キーボード、ポインティング装置等により実装したりすることができる。入力装置406は送信装置101に複数実装することができる。
ネットワークI/F407は、ネットワーク103を介してデータの送受信をするための装置である。ネットワークI/F407は、通信部207を実現した装置である。電源408は送信装置101に電源を供給・充電する装置であり、電池と充電装置を含む。なお、電源408は、ACアダプタにより実現してもよい。カメラ409は送信用コンテンツを撮影する装置であり、撮像部201を実現した装置である。
(受信装置のハードウェア構成)
図5は、本実施形態における受信装置102のハードウェア構成を表すブロック図である。中央処理装置(以下、CPUと称す)501は、装置全体を制御しデータの計算・加工を行う装置である。後述するROM502に格納されたコンピュータプログラムを後述するRAM503に展開して実行する。本実施形態では、CPU501がコンピュータプログラムに基づき装置全体を制御することで、復号化部302、プレイリスト解析部303、指示管理部306、及び、セグメント決定部307を実現する。
ROM502は読出し専用メモリであり、一度書き込まれた情報を読み出すための記憶装置である。本実施形態では、ROM502は、図3で示された各機能部のコンピュータプログラムを格納する。RAM503は書込み可能メモリであり、一時的にデータの書き込みと読み出すための記憶装置である。RAM503は、各プログラムの一時的な値の記憶を行う。
内蔵メモリ504及び外部メモリ506は、アプリケーションのコンテンツを記憶しておく外部記憶装置である。これらの装置は、バッファ304を実現する。なお、バッファ304はRAM503で実現してもよい。内蔵メモリ504、外部メモリ506の具体的な装置の例は、図4を参照して説明した送信装置101の内蔵メモリ404、外部メモリ405と同様である。
入力装置505はユーザからの指示を入力する装置である。入力装置505は、電源ボタンや音量ボタン、ホームボタンなどボタンとして実装したり、タッチパネル、キーボード、ポインティング装置等により実装したりすることができる。入力装置505は受信装置102に複数実装することができる。入力装置505は、ユーザインタフェイス部305を実現した装置である。
スピーカー507及びディスプレイ508は、送信装置101から受信したコンテンツを再生する装置であり、表示部301を実現する。すなわち、スピーカー507は、受信したコンテンツに含まれる音声データを音声として出力する。ディスプレイ508は、受信したコンテンツに含まれる動画像データを画像として表示する。ネットワークI/F509は、ネットワークを介してデータの送受信をするための装置である。ネットワークI/F509は、通信部308を実現した装置である。電源510は受信装置102に電源を供給・充電する装置であり、電池と充電装置を含む。なお、電源510は、ACアダプタにより実現してもよい。
(送信装置の処理)
図6を用いて本実施形態における送信装置101の処理について説明する。図6はPUSH送信指示を受信してからPUSH送信のキャンセルを行う迄における、本実施形態に係る送信装置101による処理の手順を示すフローチャートである。図6の各ステップは、CPU401がコンピュータプログラムに基づき送信装置101を制御することにより実行される。
S601において、通信部207は、受信装置102からPUSH送信指示を受信する。ここで、受信するPUSH送信指示は一つでもよいし、複数のPUSH送信指示を同時に受信してもよい。
S602において、指示管理部206は、受信した各PUSH送信指示に対し、それぞれを区別するための識別子を割り振る。この識別子は数字や文字列などでもよいし、URL(Uniform Resource Locator)の様な形でもよい。あるいは、映像や音声といったセグメントのデータの種類を表す値を識別子として用いても良い。この識別子を受信装置102側で既に割り振っている場合、S602はスキップして、受信装置102が割り振った識別子をそのまま使用してよい。また、セグメントのデータの種類を識別子として使用する場合も新たに識別子を割り振る必要が無いためS602はスキップしてよい。また、PUSH送信指示を識別子以外で区別する場合もS602をスキップしてよい。PUSH送信指示は、識別子以外に、PUSH送信指示を受信装置102が送信した時刻や、後述するS603において送信装置101がPUSH送信指示に対する応答を送信した時刻により区別してもよい。または受信装置102がPUSH送信指示と合わせて、取得を行ったリソースにより区別してもよい。例えば、HTTP/2において、リソースとはPUSH指示を出した際にGETしたセグメント名などである。また、これら以外にもPUSH送信指示を区別して管理できる方法で実施してもよい。
S603において、通信部207は、PUSH送信指示に対する応答を送信する。S602を実施している場合や受信装置102がPUSH送信指示に識別子を割り振っている場合、つまり識別子によりPUSH送信指示を区別する場合は応答に識別子を含めて送信する。識別子以外でPUSH送信指示を区別する場合は、通信部207はPUSH送信指示を区別するために必要な値を応答に含めて送信する。各値を応答に含める代わりに、プレイリスト生成部204がMPDに各値を記載することにより受信装置102へ通知してもよい。
S604において、指示管理部206は、受信したPUSH送信指示を保持しておく。識別子でPUSH送信指示を区別する場合、PUSH送信指示と識別子を紐づけて保持する。セグメントのデータの種類を識別子として使用する際、セグメント名からデータの種類が分かる場合などでは、S604はスキップしても良い。識別子以外でPUSH送信指示を区別する場合は、PUSH送信指示を区別するための値と紐づけてPUSH送信指示を保持する。
S605において、セグメント決定部205は、受信したPUSH送信指示の内容を元にPUSH送信するセグメントを決定し、決定したセグメントのリストを指示管理部206へ通知する。その後、通信部207は、対象のセグメントをPUSH送信する。ライブ配信時の場合は、PUSH対象のセグメントのうち、生成完了したものからPUSH送信していく。なお、S603、S604及びS605は本フローチャートと異なる順番で実施してもよい。
S606において、通信部207は、PUSH送信キャンセル指示を受信装置102から受信する。ここで受信するPUSH送信キャンセル指示は一つのPUSH送信指示を対象にしたものでもよいし、複数のPUSH送信指示を対象にしたものでもよい。またPUSH送信キャンセル指示は、PUSH送信指示によりPUSHする予定の全てのセグメントのキャンセルを指示する内容でもよいし、PUSH送信指示によりPUSHするセグメントのうち一部のセグメントのみのキャンセルを指示する内容でもよい。
次に、PUSHキャンセル対象であるPUSH送信指示が一つの場合、そのPUSH送信指示に基づきPUSH送信すべきセグメントのうち、キャンセル候補となるセグメント毎にS607から610処理を順に行う。キャンセル候補についてはS607の説明にて後述する。またPUSHキャンセル対象のPUSH送信指示が複数の場合、PUSH送信指示毎にS607から611の処理を行う。例えば、PUSH送信キャンセル指示の対象がPUSH送信指示A及びBであり、PUSH送信指示Aのキャンセル候補セグメントは二つ、Bのキャンセル候補セグメントはと三つとする。この場合、まず対象のPUSH送信指示の一つであるAについてS607から611を実行する。その際、キャンセル候補セグメントの数である二回分S607から610を順に行う。その後、もう一つのキャンセル対象であるPUSH送信指示BについてS607から611を実行する。その際キャンセル候補セグメントの数である三回分S607から610を順に行う。S607から610の処理は、キャンセル対象のPUSH送信指示毎に各セグメントに対する処理を並列に行ってもよい。
S607において、指示管理部206は、PUSH送信キャンセル指示が対象としているPUSH送信指示のうち、一つのPUSH送信指示によりPUSHするセグメントの中からキャンセル候補となるセグメントを一つ特定する。例えば、あるPUSH送信指示によりsegment1、segment2、segment3についてPUSH送信することになっているとする。そして、PUSH送信キャンセル指示が全てのセグメントをキャンセルするよう求めてきたとする。この場合、キャンセル候補のセグメントはsegment1、segment2、segment3の三つ全てであり、S607で指示管理部206はその中の一つ(例えば、segment1)を選択する。一方でPUSH送信キャンセル指示が最後一つのセグメントのみの場合、キャンセル候補のセグメントはsegment3のみであり、必然的にsegment3を選択する。なお、複数のセグメントを対象としてPUSH送信キャンセルが指示された場合に、その一部のセグメントが既に送信済みであるか送信キャンセル済みのときは、それらのセグメントを除いたセグメントをキャンセル候補のセグメントとする。例えば、PUSH送信キャンセルの対象がsegment1〜segment3の三つの場合で、segment1が送信済みで、segment2が送信キャンセル済みの場合は、segment3のみをPUSH送信キャンセルの候補とする。
S608により、S607で特定したキャンセル候補のセグメントが、他のPUSH送信指示によるPUSH送信対象になっていないことを確認する。例えば、あるPUSH送信指示(以下、「指示1」と称する)によりsegment1、segment2、segment3をPUSH送信することになっているとする。また、指示1において、PUSH送信キャンセル指示によるキャンセル候補のセグメントの一つがsegment3であるとする。一方で、別のPUSH送信指示(以下、「指示2」と称する)によるPUSH送信予定セグメントがsegment3、segment4となっているとする。この場合、segment3が指示2によりPUSH送信予定になっているため、指示1の処理においてsegment3のPUSH送信はキャンセルしてはいけないということになる。なお、キャンセル対象のPUSH送信指示以外に別のPUSH送信指示が受信装置102から指示されていない場合、S608はスキップしS609へ遷移してもよい。
S608にて、S607で特定したキャンセル候補のセグメントが、他のPUSH送信指示によるPUSH送信対象になっていないと判定した場合(S608でNO)、S609へ遷移する。S608にて、S607で特定したキャンセル候補のセグメントが、他のPUSH送信指示によるPUSH送信対象になっていると判定した場合(S608でYES)、S610へ遷移する。
S609において、指示管理部206は、セグメント決定部205へキャンセル候補のセグメントのPUSH送信をキャンセルするよう指示を出す。それに応じて、セグメント決定部205は、キャンセル候補セグメントのPUSH送信をキャンセルする。
S608からS609のキャンセル可能かのチェック及びキャンセル処理は、一つのPUSH送信指示によりPUSH送信するセグメントの中で、全てのキャンセル候補セグメントに対し行う。そこで、S610にて、処理対象の一つのPUSH送信指示についての全てのキャンセル候補のセグメントについて、S608からS609の処理によりキャンセル可能かを確認したか否かを判定する。全てのキャンセル候補セグメントに対しS608からS609を行ったと判定した場合(S610でYES)、S611へ遷移する。S610にて、全てのキャンセル候補セグメントに対しS608からS609を行っていないと判定した場合(S610でNO)、S607へ遷移して、処理を行っていないキャンセル候補セグメントに対して前述のキャンセル処理を行う。
S607からS610の処理は、一つのPUSH送信指示によりPUSH送信するセグメントのうち、一つのキャンセル候補セグメントごとに実施する。なおS607は最初に全てのキャンセル候補セグメントを特定し、その後特定したキャンセル候補セグメント毎にS608からS610を実施してもよい。
S611では、PUSH送信のキャンセルを指示しているすべてのPUSH送信指示についてS607からS610の処理を行ったか否かを判定する。キャンセル対象になっている全てのPUSH送信指示についてS607からS610のキャンセル処理を行ったと判定した場合(S611でYES)、S612へ遷移する。全てのPUSH送信指示についてS607からS610のキャンセル処理を行っていない判定した場合(S611でNO)、S607へ遷移して、未処理のPUSH送信指示について前述のキャンセル処理を行う。
S607からS611のキャンセル方法は、本説明に記載した方法に限定されない。例えば、セグメントが別のPUSH送信指示からのPUSH送信対象になっているかに関わらず、あるPUSH送信指示のキャンセル候補になった時点で、そのセグメントのPUSH送信をキャンセルをするなど、別の方法を用いてもよい。
S612にて、通信部207はPUSH送信キャンセル指示に対する応答を受信装置102へ送信する。
(受信装置の処理)
図7を用いて本実施形態における受信装置102の処理について説明する。図7はPUSH送信指示の送信を行い、その後PUSH送信のキャンセルを行う迄における、本実施形態に係る受信装置102による処理の手順を示すフローチャートである。図7の各ステップは、CPU501がコンピュータプログラムに基づき受信装置102を制御することにより実行される。
S701において、指示管理部306は、送信しようとする各PUSH送信指示に対し、それぞれを区別するための識別子を割り振る。この識別子は数字や文字列などでもよいし、URLの様な形でもよい。あるいは、映像や音声といったセグメントのデータの種類を表す値を識別子として用いても良い。セグメントのデータの種類を識別子として使用する際、セグメント名からデータの種類が分かる場合などでは、S701はスキップしても良い。この識別子は送信装置101が割り振ることもでき、その場合S701はスキップしてよい。またPUSH送信指示を識別子以外で区別する場合もS701をスキップしてよい。
S702において、通信部308は、PUSH送信指示を送信装置101へ送信する。ここで送信するPUSH送信指示は一つでもよいし、複数のPUSH送信指示を同時に送信してもよい。S701にて識別子を振っている場合は、各PUSH送信指示に識別子を含めて送信する。
S703において、通信部308は、PUSH送信指示に対する送信装置101からの応答を受信する。この応答は、図6のS603のステップにより送信装置101から送信される。
S704にて、指示管理部306は、送信装置101から受信したPUSH送信指示の応答を保持しておく。
S705において、通信部308は送信装置101からPUSH送信されるセグメントを受信する。受信したセグメントはバッファ304に蓄積され、復号化部302において復号されて、表示部301により表示・出力される。
S706において、通信部308はPUSH送信キャンセル指示を送信する。S705にてPUSH送信セグメントを受信する前に本ステップを実行してもよい。送信するPUSH送信キャンセル指示の対象は、一つのPUSH送信指示でもよいし、複数のPUSH送信指示を対象にしたものでもよい。また、PUSH送信キャンセル指示は、PUSH送信指示によりPUSHされる予定の全てのセグメントのキャンセルを指示する内容でもよい。あるいは、PUSH送信指示によりPUSHされるセグメントのうち一部のセグメントのみのキャンセルを指示する内容でもよい。
S707において、通信部308はPUSH送信キャンセル指示に対する応答を受信する。この応答は、図6のS612のステップにより送信装置101から送信される。
上記のように、送信装置101は、少なくとも1つのセグメントのプッシュ送信を指示するためのプッシュ送信指示を受信装置102から受信すると、それに応じて、各セグメントを受信装置102へプッシュ送信するように制御する。ここで、送信装置101は、セグメントのプッシュ送信をキャンセルするための、プッシュ送信指示の指定を含むキャンセル指示を受信装置102から受信した場合、指定されたプッシュ送信指示に基づく未送信のセグメントのプッシュ送信を停止する。このように本実施形態では、プッシュ送信指示を指定してプッシュ送信をキャンセルすることで、HTTP/2やWebSocketなどの利用する通信プロトコルにかかわらず、最小限のトランザクション回数でプッシュ送信をキャンセルすることが可能である。
前述のように、プッシュ送信指示の指定は、例えば、プッシュ送信指示の識別子や、あるいは、プッシュ送信指示の内容と、受信装置102により要求されたリソース又はプッシュ送信指示の送受信に関する時刻との組み合わせにより行うことができる。また、送信装置101が、受信したキャンセル指示の内容に応じて、未送信のセグメントの全て又は一部のプッシュ送信を停止することで、受信装置102は、所望のセグメントの送信を事後的にキャンセルすることができる。
また、送信装置101は、複数のプッシュ送信指示を受信してセグメントをプッシュ送信している場合に、あるプッシュ送信指示についてキャンセル指示を受信したときは、S608において、他のプッシュ送信指示の送信対象はキャンセル対象から除外する。すなわち、キャンセル指示に指定されたプッシュ送信指示に基づく未送信のセグメントの全ての送信を停止するのではなく、他のプッシュ送信指示に基づく未送信のセグメントに含まれないセグメントについてのみ送信を停止する。したがって、受信装置102のユーザが意図しないセグメントのプッシュ配信をキャンセルすることを防ぐことができる。
(動作例1)
HTTP/2上で、URL形式の識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定全てのセグメントをキャンセルする例について、図8を参照して説明する。図8は送信装置101−受信装置102間でやり取りされるリクエスト、レスポンスメッセージの例を示す概略図である。ここでは、受信装置102から送信装置101へ送信するデータをリクエスト、送信装置101から受信装置102へ送信するデータをレスポンスと称する。図の左側上部のメッセージから左側下部のメッセージへ順にやり取りが行われ、次に右上部のメッセージから右下部のメッセージがやり取りされる。つまり、リクエスト801から、803、806、807、808、809、811、813の順でやり取りされる。以降の図9〜図17Bも同様の構成となる。ここでは、識別子は送信装置101が割り振るものとしてS701はスキップする。
S702により、受信装置102の通信部308は、送信装置101へPUSH送信指示802をaccept−push−policyヘッダーに含むリクエスト801を送信する。リクエスト801はsegmentA1というセグメントをリクエストする内容を有する。リクエスト801はさらに、segmentA1から再生時間的に連続する次の五つのセグメントsegmentA2〜segmentA6をPUSH送信するようPUSH送信指示802で指示している。802において、”urn:sample:push−next”に続く数字”5”は、”/example/tmp/segmentA1”に続いて取得するセグメントの個数を指定したものである。S601により、送信装置101の通信部207はPUSH送信指示802を含むリクエスト801を受信する。
S602により、送信装置101の指示管理部206は、受信したPUSH送信指示802に対し”/example/tmp/push1”という識別子805を割り振る。識別子はURLの形式を採用している。
S603により、送信装置101の通信部207は、PUSH送信指示802に対する応答として、PUSH送信指示802と同内容のPUSH送信指示の応答804をpush−policyヘッダーに含むレスポンス803を受信装置102へ送信する。レスポンス803のpush−policyヘッダーには、PUSH送信指示の応答804と対応させて識別子805も含める。識別子805の前に”push−URL”というプレフィックスを入れることで、push−policyヘッダーのどこからが識別子805なのかを分かるようにしている。このプレフィックスは”push−URL”に限定しない。識別子805をPUSH送信指示の応答804と共に送信する代わりに、送信装置101はMPDに識別子805を記載し受信装置102へ通知してもよい。
レスポンス803送信後、送信装置101はHTTP/2における、PUSH送信予定のsegmentA2とsegmentA3について、それぞれどのstreamで送信するかを予約するためのPUSH_PROMISE806及び807を送信する。これに応じて、受信装置102はこれを受信する。図8の例では、segmentA2に対してStream ID=2のstreamが予約され、segmentA3に対してStream ID=4のstreamが予約されている。なお、PUSH_PROMISE806及び807はレスポンス803の前にやり取りしてもよい。segmentA3以降のセグメント(segmentA4、segmentA5、segmentA6)に対応するPUSH_PROMISEは送信しないものとする。HTTP/2の場合、例えば該当のセグメントの生成が完了していない場合や、同時に送信予約できる上限数に達している場合にPUSH_PROMISEを送信しない。このような場合以外にも、PUSH_PROMISEを送信しないようにしてもよい。
S604により、送信装置101の指示管理部206は、受信したPUSH送信指示802と識別子805を紐づけて保持する。
S703により、受信装置102の通信部308は、PUSH送信指示802の応答804とsegmentA1のバイナリデータを含むレスポンス803を受信する。さらに、S704により、受信装置102の指示管理部306は、送信装置101により受理されたPUSH送信指示802を識別子805と紐づけて保持する。
S605により、送信装置101は、PUSH送信を開始し、segmentA2のPUSH送信として、送信装置101の通信部207はレスポンス808を受信装置102へ送信する。本実施形態では、セグメントの名称末尾の数値が連続している場合、再生時間的に連続しているものとする。例えば、segmentA2とsegmentA3とは再生時間が連続しており、segmentA2の末尾の映像がsegmentA3の冒頭の映像に連続する関係にある。
S705により、受信装置102の通信部308は、segmentA2のバイナリデータを含むレスポンス808を受信する。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示810をaccept−push−policyヘッダーに含むリクエスト809を送信する。PUSH送信キャンセル指示810は、PUSH送信指示802によりPUSH送信する予定の全てのセグメントをキャンセルする内容を有する。リクエスト809のpathヘッダーに識別子805を指定することでキャンセルしたいPUSH送信指示802を指定する。識別子805は、pathヘッダーに含める代わりに、”push−URL”というプレフィックスと共にaccept−push−policyヘッダーに含めてもよい。このプレフィックスは”push−URL”に限定しない。
S606により、送信装置101の通信部207は、PUSH送信キャンセル指示810を含むリクエスト809を受信する。
S607により、送信装置101の指示管理部206は、識別子805から判定したキャンセル対象であるPUSH送信指示802によるPUSH送信予定のセグメントで、segmentA3をキャンセル候補セグメントと特定する。図8の例では、PUSH送信指示802によりsegmentA2〜segmentA6のPUSH送信が要求されている。ここでは、segmentA2は送信済みのため(808)、未送信のセグメントのうち最も通し番号が小さいsegmentA3をキャンセル候補として特定している。
送信装置101においてPUSH送信指示802以外で指示されているPUSH送信指示はないためS608をスキップし、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA3のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE807による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM813の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示810によるPUSH送信指示802のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定し(S610でNO)、S607へ遷移する。
S607により、送信装置101の指示管理部206は、識別子805から判定したキャンセル対象であるPUSH送信指示802によるPUSH送信予定のセグメントで、segmentA4をキャンセル候補セグメントと特定する。
送信装置101においてPUSH送信指示802以外で指示されているPUSH送信指示はないためS608をスキップし、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA4のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA4のPUSH送信をキャンセルする。具体的なキャンセル処理として、送信装置101内部でPUSH送信を停止する処理のみを行う。segmentA4の送信予約は行っていないため、送信装置101内部の停止処理のみでよい。
S610により、PUSH送信キャンセル指示810によるPUSH送信指示802のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定し(S610でNO)、S607へ遷移する。
S607により、送信装置101の指示管理部206は、識別子805から判定したキャンセル対象であるPUSH送信指示802によるPUSH送信予定のセグメントで、segmentA5をキャンセル候補セグメントと特定する。
送信装置101においてPUSH送信指示802以外で指示されているPUSH送信指示はないためS608をスキップし、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA5のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA5のPUSH送信をキャンセルする。具体的なキャンセル処理として、送信装置101内部でPUSH送信を停止する処理のみを行う。segmentA5の送信予約は行っていないため、送信装置101内部の停止処理のみでよい。
S610により、PUSH送信キャンセル指示810によるPUSH送信指示802のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定し(S610でNO)、S607へ遷移する。
S607により、送信装置101の指示管理部206は、識別子805から判定したキャンセル対象であるPUSH送信指示802によるPUSH送信予定のセグメントで、segmentA6をキャンセル候補セグメントと特定する。
送信装置101においてPUSH送信指示802以外で指示されているPUSH送信指示はないためS608をスキップしS609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA6のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA6のPUSH送信をキャンセルする。具体的なキャンセル処理として、送信装置101内部でPUSH送信を停止する処理のみを行う。segmentA6の送信予約は行っていないため、送信装置101内部の停止処理のみでよい。
S610により、PUSH送信キャンセル指示810によるPUSH送信指示802のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は802のみであるため(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示810に対する応答812をpush−policyヘッダーに含むレスポンス811を受信装置102へ送信する。この応答は、PUSH送信キャンセル指示810と同じ内容を有する。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示の応答812を含むレスポンス811を受信する。
キャンセルされたsegmentA3に対して送信装置101は受信装置102へPUSH_PROMISE807を送信しているため、これをキャンセルするためにRST_STREAM813を送信し受信装置102はこれを受信する。このRST_STREAM813はS706の前かS707の後に受信装置102が送信してもよい。
なお、HTTP2では、複数のpush−policyのうちの一部や、push−policyに基づくPUSH予定の複数のセグメントの一部をキャンセルするために、全てのPUSHを一度キャンセルしてから再度必要な設定する必要がある。HTTP2では、PUSH対象のセグメントごとにPUSH_PROMISEによりストリームのIDが通知され、それを指定することで任意のセグメントのPUSHをキャンセルすることができる。しかし、PUSH_PROMISEが遅れて送信される場合や、クライアントがキャンセルすべきセグメント名が分からない場合などに、複数のコマンドをやり取りする必要があるため、トランザクションが増大して遅延が生じる場合があった。
これに対して、動作例1では、送信装置101が受信装置102に、PUSH送信指示のURL形式の識別子805を通知することで、受信装置102は、識別子805によりキャンセル対象を特定してキャンセルを指示することができる。したがって、キャンセル対象を特定するために余分なトランザクションを必要とせずに、PUSH送信のキャンセルを行うことが可能である。
(動作例2)
次に、HTTP/2上で、文字列形式の識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定全てのセグメントをキャンセルする例について、図9を参照して説明する。
901から902は801から802と同じである。また、図6のS601及び図7のS701からS702の処理は、図8を参照して説明した内容と同様であるため説明は省略する。
S602により、送信装置101の指示管理部206は、受信装置102から受信したPUSH送信指示902に対し”push1”という識別子905を割り振る。図9では、識別子として文字列の形式を採用している例を示している。
S603により、送信装置101の通信部207は、PUSH送信指示902に対する応答として、PUSH送信指示902と同内容のPUSH送信指示の応答904をpush−policyヘッダーに含むレスポンス903を受信装置102へ送信する。レスポンス903はまたsegmentA1のバイナリデータを含む。レスポンス903のpush−policyヘッダーには、PUSH送信指示の応答804と対応させて識別子905も含める。なお、識別子905の前に”push−ID”というプレフィックスを入れることで、push−policyヘッダーのどこからが識別子905なのかを区別できるようにしている。このプレフィックスは”push−ID”に限定しない。識別子905をPUSH送信指示の応答904と共に送信する代わりに、受信装置102からMPDの取得要求を受けた際に送信装置101はMPDに識別子905を記載し受信装置102へ通知してもよい。
906から908は806から808と同様である。また図6のS604からS605及び図7のS703からS705における処理は、図8を参照して説明したPUSH送信の処理と内容が同様であるため説明は省略する。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示911をaccept−push−policyヘッダーに含むリクエスト909を送信装置101へ送信する。PUSH送信キャンセル指示911は、PUSH送信指示902によりPUSH送信する予定の全てのセグメントをキャンセルする内容である。リクエスト909のaccept−push−policyヘッダーに識別子905(”push1”)を合わせて含めることでキャンセルしたいPUSH送信指示902を指定することができる。リクエスト909のpathに指定するURL910は、MPDに記載するなどして事前に送信装置101−受信装置102間で共有したものを指定する。912から914は811から813と同様である。また、図6のS606からS612及び図7のS707の処理は、図8を参照して説明した内容と同様であるため説明は省略する。
動作例2では、送信装置101が受信装置102に、PUSH送信指示の文字列形式の識別子905を通知することで、受信装置102は、識別子905によりキャンセル対象を特定してキャンセルを指示することができる。したがって、キャンセル対象を特定するために余分なトランザクションを必要とせずに、PUSH送信のキャンセルを行うことが可能である。
(動作例3)
次に、HTTP/2上で、PUSH送信指示の内容とPUSH送信指示を送信した際に合わせて取得したリソースの組み合わせによりキャンセルすべきPUSH送信指示を指定する例について、図10を参照して説明する。図10は、PUSH送信指示によりPUSHする予定の全てのセグメントをキャンセルする例を示している。
図10の1001及び1003は、図8の801及び802と同様である。また、図6のS601及び図7のS701からS702における処理は、図8を参照して説明した処理の内容と同様あるため説明は省略する。
図10の例では、PUSH送信指示の内容とPUSH送信指示を送信した際に取得したリソースの組み合わせによりPUSH送信キャンセル指示を行う。このため、送信装置101がPUSH送信指示に識別子を割り振るS602はスキップする。図10の場合、リソースとは、リクエスト1001でGET対象となっている1002の”segmentA1”である。
S603により、送信装置101の通信部207は、PUSH送信指示1003に対する応答を含むレスポンス1004を受信装置102へ返す。図10の例では、レスポンス1004は、PUSH送信指示1003と同じ内容であるPUSH送信指示の応答1005をpush−policyヘッダーに含んでいる。また、レスポンス1004は、segmentA1のバイナリデータを含んでいる。レスポンス1004は、図8、図9を参照して説明した動作例とは異なり、PUSH送信指示の識別子は含まない。
1006から1008は、図8の806から808と同様である。また、図6のS604からS605及び図7のS703からS705の処理は、図8を参照して説明したPUSH送信の処理と内容が同様であるため説明は省略する。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示1010をaccept−push−policyヘッダーに含むリクエスト1009を送信装置101へ送信する。PUSH送信キャンセル指示1010の内容は、PUSH送信指示1003によりPUSH送信する予定の全てのセグメントをキャンセルするというものである。リクエスト1001でGET対象となっていた1002であるsegmentA1をpathヘッダーに含み、さらにPUSH送信指示1003の内容をaccept−push−policyヘッダーに含める。これによりキャンセルしたいPUSH送信指示1003を指定する。プッシュ送信指示内容とリソースを組み合わせることで、同じPUSH送信指示内容が複数のリソースに対して使われていても、キャンセル対象を指定することができる。
1011から1013は図8の811から813と同様である。また図6のS606からS612及び図7のS707の処理は、図8を参照して説明した処理の内容と同様であるため説明は省略する。
動作例3では、受信装置102は、PUSH送信指示の内容とPUSH送信指示を送信した際に合わせて取得したリソースの組み合わせによりキャンセルすべきPUSH送信指示を指定する。PUSH送信指示1003とリソース1002によりキャンセル対象を特定してキャンセルを指示することができる。したがって、受信装置102は、余分なトランザクションを必要とせずに、キャンセル対象を直接特定してPUSH送信のキャンセルを行うことが可能である。
(動作例4)
次に、HTTP/2上で、複数のPUSH送信指示を要求した後で、URL形式の識別子によりキャンセルするPUSH送信指示を一つ指定し、PUSH送信指示によりPUSH予定の全てのセグメントをキャンセルする例について、図11を参照して説明する。この例では、識別子は送信装置101が割り振るとして、受信装置102がPUSH送信指示に識別子を割り振るS701はスキップする。
S702において、受信装置102の通信部308は、PUSH送信指示1102と1103をaccept−push−policyヘッダーに含むリクエスト1101を送信装置101へ送信する。リクエスト1101は二つのaccept−push−policyヘッダーを持ち、これら二つのヘッダーによりPUSH送信指示1102と1103を含む。別々のaccept−push−policyヘッダーではなく、一つのaccept−push−policyヘッダーに、PUSH送信指示1102と1103を含めてもよい。1102において、図8の802と同様に、”urn:sample:push−next”に続く数字”2”は、”/example/tmp/segmentA1”に続いて取得するセグメントの個数を指定している。したがって、受信装置102は、PUSH送信指示1102によってsegmentA2及びsegmentA3のPUSH送信を要求している。また、1103において、”/example/tmp/segmentB(%01d)”に続く括弧内の二つの数字は、”(%01d)”が採りうる値の範囲により、要求対象のセグメントを特定している。1103の例では、”{2,3}”が範囲として指定されているから、PUSH送信指示1103によって、segmentB2及びsegmentB3のPUSH送信要求が行われている。
S601により、送信装置101の通信部207は、PUSH送信指示1102と1103を含むリクエスト1101を受信する。
S602により、送信装置101の指示管理部206は、受信したPUSH送信指示1102に”/example/tmp/push1”という識別子1106を割り振る。さらに、PUSH送信指示1103に対し、”/example/tmp/push2”という識別子1108をそれぞれ割り振る。この例では、識別子はURLの形式を採用している。
S603により、送信装置101の通信部207はPUSH送信指示1102と1103に対する応答をpush−policyヘッダーに含むレスポンス1104を受信装置102へ送信する。レスポンス1104はまたsegmentA1のバイナリデータを含んでいる。図11の例では、PUSH送信指示1102と1103に対する応答として、PUSH送信指示1102及び1103と同じ内容であるPUSH送信指示の応答1105と1107を含んでいる。すなわち、レスポンス1104は二つのpush−policyヘッダーを持ち、これら二つのヘッダーによりPUSH送信指示の応答1105と1107を含んでいる。なお、別々のpush−policyヘッダーではなく、一つのpush−policyヘッダーにPUSH送信指示の応答1105と1107を含めてもよい。図11の例では、さらに、応答1105に対応させて識別子1106(”push1”)を、応答1107に対応させて識別子1108(”push2”)を含めている。識別子1106、1108の前に”push−URL”というプレフィックスを入れることで、push−policyヘッダーのどこからが識別子1106、1108なのかを区別できるようにしている。このプレフィックスは”push−URL”に限定しない。
レスポンス1104送信後、送信装置101は、HTTP/2における、PUSH送信予定のセグメント毎に、そのセグメントを送信するためのstreamを予約するPUSH_PROMISE1109〜1112を受信装置102へ送信する。受信装置102は、PUSH_PROMISE1109〜1112を送信装置101から受信する。PUSH_PROMISE1109、1110、1111及び1112は、レスポンス1104の前に送受信してもよい。
S604により、送信装置101の指示管理部206は、受信したPUSH送信指示1102と識別子1106、及び、PUSH送信指示1103と識別子1108を紐づけて保持する。
S703により、受信装置102の通信部308は、PUSH送信指示1102に対する応答1105、及び、PUSH送信指示1103に対する応答1107を含むレスポンス1104を受信する。
S704により、受信装置102の指示管理部306は、応答が返ってきて受理されたPUSH送信指示1102及び1103を、識別子1106及び1108と紐づけて保持する。
S605により、送信装置101はPUSH送信を開始し、segmentA2のPUSH送信として、送信装置101の通信部207は、segmentA2のバイナリデータを含むレスポンス1113を受信装置102へ送信する。
S705により、受信装置102の通信部308はレスポンス1113を受信する。
S706により、受信装置102の通信部308はPUSH送信キャンセル指示1115をaccept−push−policyヘッダーに含むリクエスト1114を送信する。PUSH送信キャンセル指示1115は、識別子1108により識別されるPUSH送信指示1103によりPUSH送信する予定の全てのセグメントをキャンセルするという内容である。リクエスト1114のpathヘッダーにキャンセルしたいPUSH送信指示1103に対応する識別子1108を指定する。
S606により、送信装置101の通信部207は、PUSH送信キャンセル指示1115を含むリクエスト1114を受信装置102から受信する。
S607により、送信装置101の指示管理部206は識別子1108から判定したキャンセル対象であるPUSH送信指示1103によるPUSH予定のセグメントで、その中の一つのセグメントをキャンセル候補セグメント特定する。この例では、PUSH送信指示1103によるPUSH予定のセグメントはsegmentB2、segmentB3であるから、その中の一つであるsegmentB2をキャンセル候補セグメントと特定する。
S608により、キャンセル候補セグメントであるsegmentB2は、PUSH送信指示1103以外で送信装置101が採用しているPUSH送信指示1102によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentB2のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentB2のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1111による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1118の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1115によるPUSH送信指示1103のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定する(S610でNO)。PUSH予定のセグメントの中で、segmentB3について処理を行っていないためである。そこで、S607へ遷移する。
S607により、送信装置101の指示管理部206は識別子1108から判定したキャンセル対象であるPUSH送信指示1103がPUSH予定のセグメントで、その中の一つであるsegmentB3をキャンセル候補セグメントと特定する。
S608により、キャンセル候補セグメントであるsegmentB3が、PUSH送信指示1103以外で送信装置101が採用しているPUSH送信指示1102によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206はセグメント決定部205へsegmentB3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentB3のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1112による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1119の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1115によるPUSH送信指示1103のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は1103のみであるため(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示1115に対する応答1117をpush−policyヘッダーに含むレスポンス1116を受信装置102へ送信する。この応答1117は、PUSH送信キャンセル指示1115と同じ内容を有する。
S707により、受信装置102の通信部308はPUSH送信キャンセル指示の応答1117を含むレスポンス1116を受信する。
キャンセルされたsegmentB2及びsegmentB3に対して、送信装置101は受信装置102へPUSH_PROMISE1111及び1112を送信しているため、これらをキャンセルする必要がある。そこで、送信装置101は受信装置102へRST_STREAM1118及び1119を送信し、受信装置102はこれを受信する。このRST_STREAM1118及び1119はS706の前かS707の後に受信装置102が送信してもよい。
動作例4では、2つのPUSH送信指示1102、1103が送信され、一方のPUSH送信指示について、全てのセグメントのキャンセルが指示された場合の例を説明した。動作例4では、各PUSH送信指示に識別子1106、1108を付与して、PUSH送信指示を指定可能としたことで、キャンセル対象を特定するために余分なトランザクションを必要とせずに、PUSH送信のキャンセルを行うことができる。
(動作例5)
次に、HTTP/2上で、URL形式の識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定のセグメントのうち一部のセグメントをキャンセルする例について、図12を参照して説明する。
1201から1207及び1210は、801から808と同様である。また図6のS601からS605及び図7のS701からS705の処理は、図8を参照して説明した処理の内容同様であるため説明は省略する。ただし、図12の例では、PUSH送信指示1202はsegmentA1から再生時間的に連続する次の四つのセグメントのPUSH送信要求をするものとなっている。また、PUSH_PROMISE1206と1207と共に、segmentA4及びsegmentA5の送信を予約するPUSH_PROMISE1208及び1209を送信している。
S706により、受信装置102は、PUSH送信キャンセル指示1212をaccept−push−policyヘッダーに含むリクエスト1211として送信装置101へ送信する。PUSH送信キャンセル指示1212は、segmentA1から再生時間的に連続する次の四つのセグメントのPUSH送信を指示しているPUSH送信指示1202に対し、送信予定セグメントのうち後ろから二つのセグメントをキャンセルする指示である。ここで、1212は、識別子”push1”(1205)により識別される、segmentA1に後続する連続する二つのセグメントsegmentA2、segmentA3のPUSH送信を要求するものである。もっとも、リクエスト1201では、segmentA1に後続する連続する四つのセグメントのPUSH送信を要求していたのであるから、1212は、segmentA4、segmentA5の送信要求をキャンセルする要求に相当する。このように、図12の例では、同一の識別子により識別されるPUSH送信要求について、内容の異なるPUSH送信要求が送受信されたときは、最後に送受信された要求に従い動作する。リクエスト1211のpathヘッダーに識別子1205を指定することでキャンセルしたいPUSH送信指示1202を指定する。
S606により、送信装置101の通信部207は、PUSH送信キャンセル指示1212を含むリクエスト1211を受信装置102から受信する。
S607により、送信装置101の指示管理部206は識別子1205から判定したキャンセル対象であるPUSH送信指示1202によるPUSH予定のセグメントで、その中の一つであるsegmentA4をキャンセル候補セグメントと特定する。送信装置101においてPUSH送信指示1202以外で指示されているPUSH送信指示はないためS608をスキップしS609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA4のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205は、segmentA4のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1208による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1215の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1212によるPUSH送信指示1202のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定する(S610でNO)。segmentA5について処理を行っていないためである。そこで、S607へ遷移する。
S607により、送信装置101の指示管理部206は識別子1205から判定したキャンセル対象であるPUSH送信指示1202がPUSH予定のセグメントで、その中の一つであるsegmentA5をキャンセル候補セグメントと特定する。送信装置101においてPUSH送信指示1202以外で指示されているPUSH送信指示はないためS608をスキップしS609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentA5のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205は、segmentA5のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1209による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1216の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1212によるPUSH送信指示1202のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は1202のみであるため(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示1212に対する応答1214をpush−policyヘッダーに含むレスポンス1213を受信装置102へ送信する。この応答1214は、PUSH送信キャンセル指示1212と同様の内容を有する。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示の応答1214を含むレスポンス1213を受信する。
キャンセルされたsegmentA4及びsegmentA5に対して送信装置101は受信装置102へPUSH_PROMISE1208及び1209を送信している。そのため、これらをキャンセルするためにRST_STREAM1215及び1216を送信し受信装置102はこれを受信する。このRST_STREAM1215及び1216はS706の前かS707の後に受信装置102が送信してもよい。
動作例5では、PUSH送信指示に識別子1205を付与することで、受信装置102は、余分なトランザクションを要さずに、識別子1205を指定して送信対象のセグメントの一部の送信をキャンセルすることが可能な例を説明した。
(動作例6)
次に、HTTP/2上で、複数のPUSH送信指示を要求し採用された後で、URL形式の識別子によりキャンセル対象として全てのPUSH送信指示を指定する場合の例について、図13を参照して説明する。図13では、各PUSH送信指示がPUSH送信する予定全てのセグメントをキャンセルする例を示している。図13の1301から1313は図11の1101から1113と同様である。また図6のS601から605及び図7のS701から705の処理は、図11、図8を参照して説明した処理の内容と同様であるため説明は省略する。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示1316をaccept−push−policyヘッダーに含むリクエスト1314を送信装置101へ送信する。PUSH送信キャンセル指示1316は、PUSH送信指示1302及び1303の両方によりPUSH送信する予定の全てのセグメントをキャンセルする内容のキャンセル指示である。リクエスト1314のpathヘッダーに、現在送信装置101が採用している全てのPUSH送信指示を指す識別子1315(”push”)を指定する。この識別子1315は、事前に送信装置101がMPDに記載することなどにより、受信装置102へ事前に通知する。この方式以外に、全てのPUSH送信指示を指定する識別子を各PUSH送信指示に割り振る識別子の形式から分かるようにしてもよい。例えば、各PUSH送信部に割り振る識別子は”文字列+数値”の形式を取るものとする。そして、各PUSH送信指示に割り振る識別子の数値部を取り除いた文字列部分のみのものが全てのPUSH送信指示を指定するための識別子を表すようにしてもよい。送信装置101と受信装置102とは、このルールを予め共有しておく。図13でPUSH送信指示1302と1303に割り振った各識別子1306と1308はそれぞれ”/example/tmp/push1”と”/example/tmp/push2”である。そこから、受信装置102は全てのPUSH送信指示を指定するための識別子は数値を除いた”/example/tmp/push”ということが分かる。
S606により、送信装置101の通信部207はPUSH送信キャンセル指示1316を含むリクエスト1314を受信する。
S607により、送信装置101の指示管理部206は識別子1315から判定したキャンセル対象の一つであるPUSH送信指示1302によるPUSH予定のセグメントのうち、未送信のセグメントをキャンセル候補と特定する。この例では、未送信のセグメントの一つであるsegmentA3をキャンセル候補セグメントと特定している。
S608により、キャンセル候補セグメントであるsegmentA3が、PUSH送信指示1302以外で送信装置101が採用しているPUSH送信指示1303によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206はセグメント決定部205へsegmentA3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA3のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1310による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1319の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1316によるPUSH送信指示1302のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は1302以外に1303があるため(S611でNO)、S607へ遷移する。
S607により、送信装置101の指示管理部206は識別子1315から判定したキャンセル対象の一つであるPUSH送信指示1303がPUSH予定のセグメントのうち、その中の一つであるsegmentB2をキャンセル候補セグメントと特定する。
S608により、キャンセル候補セグメントであるsegmentB2が、PUSH送信指示1303以外で送信装置101が採用しているPUSH送信指示1302によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へsegmentB2のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205は、segmentB2のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1311による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1320の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1316によるPUSH送信指示1303のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定し(S610でNO)、S607へ遷移する。
S607により、送信装置101の指示管理部206は識別子1315から判定したキャンセル対象の一つであるPUSH送信指示1303がPUSH予定のセグメントのうち、その中の一つであるsegmentB3をキャンセル候補セグメントと特定する。
S608により、キャンセル候補セグメントであるsegmentB3が、PUSH送信指示1303以外で送信装置101が採用しているPUSH送信指示1302によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206はセグメント決定部205へsegmentB3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentB3のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1312による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1321の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1316によるPUSH送信指示1303のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、PUSH送信キャンセル指示1316が対象とする全てのPUSH送信指示に対してキャンセルを行ったと判定し(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207はPUSH送信キャンセル指示1316に対する応答1318をpush−policyヘッダーに含むレスポンス1317を受信装置102へ送信する。この応答1318は、PUSH送信キャンセル指示1316と同様の内容を有する。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示の応答1318を含むレスポンス1317を送信装置101から受信する。
キャンセルされたsegmentA3、segmentB2及びsegmentB3に対して、送信装置101は受信装置102へPUSH_PROMISE1310から1312を送信している。そのため、これらをキャンセルするために、送信装置101はRST_STREAM1319から1321を送信し、受信装置102はこれを受信する。このRST_STREAM1319から1321はS706の前かS707の後に受信装置102が送信してもよい。
動作例6では、複数のPUSH送信指示が要求された場合に、各PUSH送信指示のPUSH送信をキャンセルするために、PUSH送信指示に共通の識別子を使用することで、余分なトランザクションを不要とする例を説明した。
(動作例7)
次に、HTTP/2上で、URL形式の識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定全てのセグメントをキャンセルしつつ、別のPUSH送信指示を行う例について、図14を参照して説明する。
図14の1401から1404は801から804と同様であり、1405から1407は806から808と同様である。また、図6のS601から605及び図7のS701から705は図8と内容が同じであるため説明は省略する。図14のレスポンス1403には図8の805に相当する記載がないことからわかるように、図8とは異なり図14ではPUSH送信指示1402に対し識別子を割り振っていないが、図8と同様に割り振ってもよい。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示1410をaccept−push−policyヘッダーに含むリクエスト1408を送信装置101へ送信する。PUSH送信キャンセル指示1410は、対象とするPUSH送信指示によりPUSH送信する予定の全てのセグメントをキャンセルする内容を有する。PUSH送信キャンセル指示1410は、キャンセル対象とするPUSH送信指示を指定するために、PUSH送信指示1402を指示した際に指定したURLである”/example/tmp/segmentA1”1411を含む。図14の例では、PUSH送信キャンセル指示1410の後ろに”path”というプレフィックスと共にURL1411を含んでいる。このプレフィックスは”path”に限定しない。またこのプレフィックスはなくてもよい。URLの代わりにPUSH送信指示を区別できる他の値を含めてもよい。キャンセル対象のPUSH送信指示をURL1411により指定する代わりに、リスト形式やテンプレート形式により、キャンセルしたいセグメントを直接指定してもよい。キャンセル対象をリスト形式で指定する場合、1410に”urn:sample:push−cancel−list”の様なリスト形式を示すキャンセル指示を指定してもよい。そして1411の代わりに「”/example/tmp/segmentA3”;”/example/tmp/segmentA4”;”/example/tmp/segmentA5”;”/example/tmp/segmentA6”」の様な形式を指定する。キャンセル対象をテンプレート形式で指定する場合、1410に” urn:sample:push−cancel−templete”の様なテンプレート形式を示すキャンセル指示を指定してもよい。そして1411の代わりに「/example/tmp/segmentA{%d};{3,4,5,6}」や「/example/tmp/segmentA{%d};{3ー6}」の様な形式を指定する。受信装置102の通信部308は、PUSH送信キャンセル指示とは別に、新しく設定するPUSH送信指示1412をリクエスト1408に含んでいる。accept−push−policyヘッダーのPUSH送信キャンセル指示1410及び1411の後ろにPUSH送信指示1412を含む。1410及び1411の前にPUSH送信指示1412を含めてもよい。pathヘッダーに、新しく設定するPUSH送信指示1412実行時のベースとなるURL1409を含める。図14の例では、pathヘッダーに指定しているURLが”/example/tmp/segmentB3”であり、PUSH送信指示1423は、連続する四つのセグメントのPUSH送信を要求するものである。したがって、PUSH送信指示1412は、segmentB3から再生時間的に連続する四つのセグメントsegmentB4〜segmentB7をPUSH送信するよう指示する内容を有する。
図6のS606からS611の処理は、図8を参照して説明した処理の内容が同様であるため説明は省略する。
S612により、送信装置101の通信部207はPUSH送信キャンセル指示1410及びPUSH送信指示1412に対する応答1414をpush−policyヘッダーに含むレスポンス1415を受信装置102へ送信する。この応答1414は、1410、1411及び1412と同じ内容を有する。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示1410とPUSH送信指示1412の応答1414と、segmentB3のバイナリデータを含むレスポンス1413を受信する。
キャンセルされたsegmentA3に対して、送信装置101は、受信装置102へPUSH_PROMISE1406を送信している。そのため、送信装置101は、これをキャンセルするためにRST_STREAM1415を送信し、受信装置102はこれを受信する。このRST_STREAM1415はS706の前かS707の後に受信装置102が送信してもよい。
S612以降、送信装置101はPUSH送信指示1412を元に新たにPUSH送信を開始する。すなわち、送信装置101は、segmentB4〜segmentB7のPUSH送信を開始する。
動作例7では、識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定全てのセグメントをキャンセルしつつ、別のPUSH送信指示を行う例を説明した。動作例7においても、識別子によりPUSH送信指示を指定することで、キャンセル対象を特定するために余分なトランザクションを必要とせずに、PUSH送信のキャンセルを行うことが可能である。
(動作例8)
次に、HTTP/2上で、複数のPUSH送信指示を要求し採用された後で、URL形式の識別子によりキャンセル対象として全てのPUSH送信指示を指定し、各PUSH送信指示がPUSH送信する予定の全てのセグメントをキャンセルする例を説明する。このキャンセルと合わせて新しいPUSH送信指示を行う例について、図15を参照して説明する。
図15において、1501から1513は図11の1101から1113と同様である。また図6のS601からS605及び図7のS701からS705処理は、図11、図8を参照して説明した処理の内容と同様であるため説明は省略する。
S706により、受信装置102の通信部308は、PUSH送信キャンセル指示1516をaccept−push−policyヘッダーに含むリクエスト1514を送信装置101へ送信する。PUSH送信キャンセル指示1516は、対象とするPUSH送信指示によりPUSH送信する予定の全てのセグメントをキャンセルする内容を有する。PUSH送信キャンセル指示1516は、キャンセル対象とするPUSH送信指示を指定するために、PUSH送信指示1502、1503を指示した際に指定したURLである”/example/tmp/segmentA1”1517を含む。URL1517を指定することにより、”/example/tmp/segmentA1”を指定して要求を出したPUSH送信指示を全てキャンセル対象とする。図15では、segmentA2、segmentA3だけでなく、segmentB2、segmentB3も”:path=/example/tmp/segmentA1”のパス名に基づき要求されている。すなわち、PUSH送信指示1502、1503は、いずれも同一のリソース”segmentA1”を利用している。そのため、PUSH送信キャンセル指示1516において、PUSH送信指示1502と1503の両方がキャンセル対象となる。
PUSH送信キャンセル指示1516の後ろに”path”というプレフィックスと共にURL1517を含める。このプレフィックスは”path”に限定しない。またこのプレフィックスはなくてもよい。URLの代わりにPUSH送信指示を区別できる他の値を含めてもよい。キャンセル対象のPUSH送信指示をURL1517により指定する代わりに、リスト形式やテンプレート形式により、キャンセルしたいセグメントを直接指定してもよい。受信装置102の通信部308は、PUSH送信キャンセル指示とは別に、新しく設定するPUSH送信指示1518をリクエスト1514に含める。図15の例では、accept−push−policyヘッダーのPUSH送信キャンセル指示1516及び1517の後ろにPUSH送信指示1518を含んでいる。1516及び1517の前にPUSH送信指示1518を含めてもよい。pathヘッダーに、新しく設定するPUSH送信指示1518実行時のベースとなるURL1515を含める。pathヘッダーに指定しているURLが”/example/tmp/segmentC3”なので、PUSH送信指示1518はsegmentC3から再生時間的に連続する次の四つのセグメントをPUSH送信するよう指示する内容となる。
図6のS606からS611の処理は、図8を参照して説明した処理と内容が同様であるため説明は省略する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示1516及びPUSH送信指示1518に対する応答1520をpush−policyヘッダーに含むレスポンス1519を受信装置102へ送信する。応答1520は、1516、1517及び1518と同様の内容を有する。レスポンス1519はsegmentC3のバイナリデータを含む。また送信装置101の指示管理部206は、受信したPUSH送信指示1518に対し”/example/tmp/push3”という識別子1521を割り振る。そしてレスポンス1519のpush−policyヘッダーに、識別子1521を含める。識別子1521の前に”push−URL”というプレフィックスを入れることで、push−policyヘッダーのどこからが識別子1521なのかを区別できるようにしている。このプレフィックスは”push−URL”に限定しない。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示1516とPUSH送信指示1518の応答1521を含むレスポンス1519を送信装置101から受信する。キャンセルされたsegmentA3、segmentB2及びsegmentB3に対して送信装置101は、PUSH_PROMISE1510から1512を受信装置102へ送信している。そのため、これらをキャンセルするために、送信装置101はRST_STREAM1522から1524を送信し、受信装置102はこれを受信する。このRST_STREAM1522から1524はS706の前かS707の後に受信装置102が送信してもよい。
S612以降、送信装置101はPUSH送信指示1518を元に新たにPUSH送信を開始する。
動作例8では、複数のPUSH送信指示を要求し採用された後で、識別子によりキャンセル対象として全てのPUSH送信指示を指定する例を説明した。動作例8においても、キャンセル対象を特定するために余分なトランザクションを必要とせずに、PUSH送信のキャンセルを行うことが可能である。
(動作例9)
次に、WebSocket上で、URL形式の識別子によりキャンセルすべきPUSH送信指示を指定し、PUSH送信指示によりPUSHする予定全てのセグメントをキャンセルする例について、図16を参照して説明する。
識別子は送信装置101が割り振るものとして、受信装置102はS701の処理をスキップする。
S702により、受信装置102の通信部308は、送信装置101へPUSH送信指示1602を含むリクエスト1601を送信する。PUSH送信指示は”urn:sample:push−next;2”という文字列を、”push_directive”というプレフィックスの後ろに含めている。このプレフィックスは”push_directive”に限定しない。リクエスト1601はsegmentA1をリクエストするメッセージであり、segmentA1から再生時間的に連続する次の二つのセグメントをPUSH送信するようPUSH送信指示1602で指示している。
S601により、送信装置101の通信部207は、PUSH送信指示1602を含むリクエスト1601を受信装置102から受信する。
S602により、送信装置101の指示管理部206は、受信したPUSH送信指示1602に対し”/example/tmp/push1”という識別子1605を割り振る。図16の例では、識別子はURLの形式を採用している。
S603により、送信装置101の通信部207は、PUSH送信指示1602に対する応答1604と、を含むレスポンスをsegmentA1のバイナリデータを含むレスポンス1603を受信装置102へ送信する。この応答1604は、PUSH送信指示1602と同様の内容を有する。PUSH送信指示の応答1604は、”push_ack”というプレフィックスの後ろに含めている。このプレフィックスは”push_ack”に限定しない。PUSH送信指示の応答1606と対応させて識別子1605を含める。識別子1605は”push_url=”というプレフィックスの後ろに含めている。このプレフィックスは”push_url=”に限定しない。
S604により、送信装置101の指示管理部206は、受信したPUSH送信指示1602と識別子1605を紐づけて保持する。
S703により、受信装置102の通信部308は、PUSH送信指示1602の応答1604を含むレスポンス1603を受信する。
S704により、受信装置102の指示管理部306は、応答が返ってきて受理されたPUSH送信指示1602を識別子1605と紐づけて保持する。
S605により、送信装置101はPUSH送信を開始し、segmentA2のPUSH送信として、送信装置101の通信部207は、segmentA2のバイナリデータを含むレスポンス1606を受信装置102へ送信する。
S705により、受信装置102の通信部308は、レスポンス1606を受信する。
S706により、受信装置102の通信部308はPUSH送信指示1602によりPUSH送信する予定の全てのセグメントに対するPUSH送信キャンセル指示1608をリクエスト1607として送信する。識別子1605を指定することでキャンセルしたいPUSH送信対象を指定する。識別子1605は”segment_uri”というプレフィックスの後ろに含めている。このプレフィックスは”segment_uri”に限定しない。
S606により、送信装置101の通信部207は、PUSH送信キャンセル指示1608を含むリクエスト1607を受信装置102から受信する。
S607により、送信装置101の指示管理部206は、識別子1605から判定したキャンセル対象であるPUSH送信指示1602によるPUSH予定のセグメントで、その中の一つであるsegmentA3をキャンセル候補セグメントと特定する。送信装置101においてPUSH送信指示1602以外で指示されているPUSH送信指示はないため、S608をスキップしS609へ遷移する。
S609により、送信装置101の指示管理部206はセグメント決定部205へsegmentA3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はsegmentA3のPUSH送信をキャンセルする。
S610により、PUSH送信キャンセル指示1608によるPUSH送信指示1602のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は1602のみであるため(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示1608に対する応答1610を含むレスポンス1609を受信装置102へ送信する。応答1610は、PUSH送信キャンセル指示1608と同じ内容を有する。PUSH送信キャンセル指示の応答1610は”push_ack”というプレフィックスの後ろに含めている。このプレフィックスは”push_ack”に限定しない。
S707により、受信装置102の通信部308は、PUSH送信キャンセル指示の応答1610を含むレスポンス1609を送信装置101から受信する。
動作例9ではHTTP/2とWebSocketにおける説明をしたが、QUICやその他PUSH機能を有するプロトコルに対しても本実施形態は適用可能である。
以上のように、本実施形態によれば、送信装置101と受信装置102の間において、少ないトランザクション回数でPUSH送信のキャンセルを行うことができる。また複数のPUSH送信指示を行った際に一部のPUSH送信指示のみのキャンセルを行う場合や、PUSH送信予定のセグメントの一部のみをキャンセルする場合、受信装置102は一つのリクエスト送信でキャンセルを行うことができる。また、HTTP/2上でMPEG−DASHの送受信を行い受信装置102がPUSH送信のキャンセルを指示する際、PUSH_PROMISEにより送信予約をしていないセグメントを個別にキャンセルする必要がない。したがって、ネットワーク上の帯域を節約することができる。
(動作例10)
HTTP/2上で、PUSH送信指示を要求した後で、PUSH送信キャンセルと新たなPUSH送信指示を合わせて行う例について、図17A、図17Bを参照して説明する。この例では、セグメントのデータの種類を識別子として使用するため、受信装置102がPUSH送信指示に識別子を割り振るS701はスキップする。また、この例では“/example/video/”+セグメント名で映像データセグメントを、“/example/audio/”+セグメント名で音声データのセグメントを表すものとする。
S702において、受信装置102の通信部308は、PUSH送信指示1702と1703をaccept−push−policyヘッダーに含むリクエスト1701を送信装置101へ送信する。別々のaccept−push−policyヘッダーではなく、一つのaccept−push−policyヘッダーに、PUSH送信指示1702と1703を含めてもよい。1702において、“urn:sample:push−next”に続く数字“2”は、“/example/video/segmentA1”に続いて取得するセグメントの個数を指定している。したがって、受信装置102は、PUSH送信指示1702によってvideo/segmentA2及びvideo/segmentA3のPUSH送信を要求している。また、1703において、“/example/audio/segmentA(%01d)”に続く括弧内の二つの数字は、“(%01d)”が採りうる値の範囲により、要求対象のセグメントを特定している。1703の例では、“{2,3}”が範囲として指定されているから、PUSH送信指示1703によって、audio/segmentA2及びaudio/segmentA3のPUSH送信要求が行われている。
S601により、送信装置101の通信部207は、PUSH送信指示1702と1703を含むリクエスト1701を受信する。
動作例10ではセグメントのデータの種類を識別子として使用するため、送信装置101はS602の処理をスキップする。
S603により、送信装置101の通信部207はPUSH送信指示1702と1703に対する応答をpush−policyヘッダーに含むレスポンス1704を受信装置102へ送信する。レスポンス1704はまたvideo/segmentA1のバイナリデータを含んでいる。動作例10では、レスポンス1704は、PUSH送信指示1702と1703に対する応答として、PUSH送信指示1702及び1703と同じ内容であるPUSH送信指示の応答1705と1706を含んでいる。すなわち、レスポンス1704は二つのpush−policyヘッダーを持ち、これら二つのヘッダーによりPUSH送信指示の応答1705と1706を含んでいる。なお、別々のpush−policyヘッダーではなく、一つのpush−policyヘッダーにPUSH送信指示の応答1705と1706を含めてもよい。
レスポンス1704送信後、送信装置101は、HTTP/2における、PUSH送信予定のセグメント毎に、そのセグメントを送信するためのstreamを予約するPUSH_PROMISE1707〜1711を受信装置102へ送信する。受信装置102は、PUSH_PROMISE1707〜1711を送信装置101から受信する。PUSH_PROMISE1707、1708、1709、1710及び1711は、レスポンス1704の前に送受信してもよい。
動作例10ではセグメントのデータの種類を識別子として使用するため、送信装置101はS604の処理をスキップする。
S703により、受信装置102の通信部308は、PUSH送信指示1702に対する応答1705、及び、PUSH送信指示1703に対する応答1706を含むレスポンス1704を受信する。
S704により、受信装置102の指示管理部306は、応答が返ってきて受理されたPUSH送信指示1702及び1703を保持する。なお、動作例10では一組のリクエストとレスポンスで複数のPUSH送信指示のやり取りをしているが、一つのPUSH送信指示毎にリクエストとレスポンスを交わす方法でも本実施形態のPUSH送信キャンセル処理は実施可能である。
S605により、送信装置101はPUSH送信を開始し、audio/segmentA1のPUSH送信として、送信装置101の通信部207は、audio/segmentA1のバイナリデータを含むレスポンス1712を受信装置102へ送信する。
S705により、受信装置102の通信部308はレスポンス1712を受信する。
S706により、受信装置102の通信部308はPUSH送信キャンセル指示1715とPUSH送信指示1714を含むリクエスト1713を送信する。本実施形態ではPUSH送信キャンセル指示1715としてpush−cancelヘッダーが用いられるが、push−cancelとは異なる名前のヘッダーをキャンセル指示として用いても良い。動作例10では、映像データのセグメントをPUSH送信キャンセル対象とし、PUSH送信キャンセル対象を指示するためpush−cancelヘッダー1715の値に“video”という値を指定するが、“video”とは異なる値を用いても良い。また、“audio”や“metadata”という値を指定することで音声データやメタデータのセグメントなど映像データ以外のセグメントをPUSH送信キャンセル対象としてもよい。コーデック名や音声の言語などというようにセグメントのデータの種類を詳細に指定しても良い。“immediate”などを指定することですべてのセグメントをPUSH送信キャンセル対象としてもよい。PUSHキャンセル対象を指示するための値として“video”などデータの種類を表す文字列の代わりに、AdaptationSetやRepresetationのIDを用いても良い。PUSH送信指示1714において、“urn:sample:push−next”に続く数字“1”は、“/example/video/segmentB2”に続いて取得するセグメントの個数を指定している。したがって、受信装置102は、PUSH送信指示1714によってvideo/segmentB3のPUSH送信を要求している。
S606により、送信装置101の通信部207は、PUSH送信キャンセル指示1715とPUSH送信指示1714を含むリクエスト1713を受信装置102から受信する。キャンセル指示1715を含むリクエスト1713を送信した受信装置と、キャンセル指示1715に含まれているデータの種類(本例では、video)からキャンセル対象のプッシュ送信指示1702が特定される。
S607により、送信装置101の指示管理部206はPUSH送信キャンセル指示1715の値から、PUSH送信指示1702によるPUSH予定のセグメントで、その中の一つのセグメントをキャンセル候補セグメントとして特定する。この例では、PUSH送信指示1103によるPUSH予定のセグメントはvideo/segmentA2、video/segmentA3であるから、その中の一つであるvideo/segmentA2がキャンセル候補セグメントとして特定される。
S608により、キャンセル候補セグメントであるvideo/segmentA2は、PUSH送信指示1702以外で送信装置101が採用しているPUSH送信指示1703によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206は、セグメント決定部205へvideo/segmentA2のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はvideo/segmentA2のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1708による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1719の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1715によるPUSH送信指示1702のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行っていないと判定する(S610でNO)。PUSH予定のセグメントの中で、video/segmentA3について処理を行っていないためである。そこで、S607へ遷移する。
S607により、送信装置101の指示管理部206はPUSH送信キャンセル指示1715の値から、PUSH送信指示1702によるPUSH予定のセグメントで、その中の一つであるvideo/segmentA3をキャンセル候補セグメントと特定する。
S608により、キャンセル候補セグメントであるvideo/segmentA3が、PUSH送信指示1702以外で送信装置101が採用しているPUSH送信指示1703によるPUSH送信対象になっていないと判定し(S608でNO)、S609へ遷移する。
S609により、送信装置101の指示管理部206はセグメント決定部205へvideo/segmentA3のPUSH送信をキャンセルするよう指示を出し、セグメント決定部205はvideo/segmentA3のPUSH送信をキャンセルする。具体的なキャンセル処理として、既にPUSH_PROMISE1710による送信予約済みであるため、送信予約をキャンセルするためのRST_STREAM1721の送信と、送信装置101内部でPUSH送信を停止する処理を行う。
S610により、PUSH送信キャンセル指示1715によるPUSH送信指示1702のキャンセル候補セグメント全てに対し、キャンセル可能かの確認及びキャンセル処理を行ったと判定し(S610でYES)、S611へ遷移する。
S611により、キャンセル対象であるPUSH送信指示は1702のみであるため(S611でYES)、S612へ遷移する。
S612により、送信装置101の通信部207は、PUSH送信キャンセル指示1715に対する応答1718とPUSH送信指示1714に対する応答1717を含むレスポンス1716を受信装置102へ送信する。PUSH送信キャンセル指示1715に対する応答1718はpush−cancelヘッダーを用い、PUSH送信キャンセル指示1715と同じ内容を有する。なお、別のヘッダーが用いられても良い。レスポンス1717はまたvideo/segmentB2のバイナリデータを含んでいる。
S707により、受信装置102の通信部308はPUSH送信キャンセル指示1715に対する応答1718とPUSH送信指示1714に対する応答1717を含むレスポンス1716を受信する。
レスポンス1716の送信後、送信装置101は、HTTP/2における、PUSH送信予定のセグメント毎に、そのセグメントを送信するためのstreamを予約するPUSH_PROMISE1719を受信装置102へ送信する。受信装置102は、PUSH_PROMISE1719を送信装置101から受信する。
キャンセルされたvideo/segmentA2及びvideo/segmentA3に対して、送信装置101は受信装置102へPUSH_PROMISE1708及び1710を送信しているため、これらをキャンセルする必要がある。そこで、送信装置101は受信装置102へRST_STREAM1720及び1721を送信し、受信装置102はこれを受信する。このRST_STREAM1720及び1721はS706の前かS707の後に受信装置102が送信してもよい。
動作例10では、PUSH送信キャンセル指示1715とPUSH送信指示1714を合わせて行う場合の例を説明した。PUSH送信キャンセル指示1715とPUSH送信指示1714を同じリクエストで送信可能としたことで、PUSH送信指示の再設定を余分なトランザクションを必要とせずに行うことが出来る。またセグメントのデータの種類を指定可能としたことで、特定の種類のセグメントのみのPUSH送信キャンセルおよびPUSH送信再設定を容易に行うことが出来る。例として、映像セグメントと音声セグメントをPUSH対象としている中で、音声セグメントをキャンセルせずに映像セグメントのみをPUSH送信キャンセルし、異なる解像度の映像セグメントのPUSH送信再設定をすることなどが可能となる。
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。