以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の構成例および処理例を示す図である。図1に示す情報処理装置1は、処理部2を有する。処理部2は、例えば、情報処理装置1が備える図示しないプロセッサとして実現される。
情報処理装置1は、複数の映像データを受信する。情報処理装置1は、例えば、受信した複数の映像データを他の再生装置に配信する処理を実行する。これらの映像データは、再生時刻情報をそれぞれ含んでいる。また、これらの映像データは、例えば、互いに異なる撮像装置によって撮影された動画像のデータ、あるいは互いに異なるエンコーダによって符号化された動画データなど、互いに再生時刻情報の整合がとれていない可能性のある映像データである。
処理部2は、このような複数の映像データを受信する。すると、処理部2は、受信した複数の映像データの中から、再生時刻情報の基準となる基準映像データを特定する。そして、処理部2は、基準映像データに含まれる再生時刻情報を基準として、これらの複数の映像データのうち基準映像データ以外の他の映像データに含まれる再生時刻情報を変更する。これにより、複数の映像データ間で再生時刻情報を整合させることができる。
以下、図1を用いて処理部2の処理を具体的に説明する。
図1の例では、上記の複数の映像データとして映像データd1,d2が情報処理装置1に入力される。映像データd1は、先頭側から部分映像データd1−1,d1−2,d1−3,・・・を含んでいるとする。映像データd2は、先頭側から部分映像データd2−1,d2−2,d2−3,・・・を含んでいるとする。これらの部分映像データd1−1,d1−2,d1−3,・・・および部分映像データd2−1,d2−2,d2−3,・・・は、例えば、それぞれ一定の再生時間分の動画像の情報を含んでいる。
また、部分映像データd1−1,d1−2,d1−3,・・・および部分映像データd2−1,d2−2,d2−3,・・・は、それぞれ再生時刻情報を含んでいる。以下、再生時刻情報を「タイムスタンプ」(図1中では「ts」)と記載する。図1の例では、部分映像データd1−1,d1−2,d1−3は、それぞれタイムスタンプ「10」,「20」,「30」を含んでおり、部分映像データd2−1,d2−2,d2−3は、それぞれタイムスタンプ「20」,「30」,「40」を含んでいる。
部分映像データd1−1と部分映像データd2−1は、同じ時刻t1に情報処理装置1に受信されたとする。しかし、部分映像データd1−1と部分映像データd2−1との間ではタイムスタンプの値が異なっている。また、部分映像データd1−2と部分映像データd2−2は、同じ時刻t2に情報処理装置1に受信されたとする。しかし、部分映像データd1−2と部分映像データd2−2との間でもタイムスタンプの値が異なっている。さらに、部分映像データd1−3と部分映像データd2−3は、同じ時刻t3に情報処理装置1に受信されたとする。しかし、部分映像データd1−3と部分映像データd2−3との間でもタイムスタンプが異なっている。このように、映像データd1と映像データd2との間では、再生時刻情報の整合がとれていない。
このような場合、処理部2は、受信した映像データd1,d2の中から、タイムスタンプの基準となる基準映像データを特定する。図1の例では、映像データd1が基準映像データとして特定されたとする。処理部2は、基準映像データである映像データd1に含まれるタイムスタンプを基準として、映像データd1,d2のうち基準映像データ以外の映像データd2に含まれるタイムスタンプを変更する。
図1の例では、例えば部分映像データd1−1と部分映像データd2−1の各タイムスタンプを比較することで、映像データd1と映像データd2との間ではタイムスタンプに「10」の差分があると判定される。この場合、処理部2は、映像データd2における部分映像データd2−1〜d2−3のタイムスタンプから「10」を減算することで、元のタイムスタンプを変更する。その結果、部分映像データd2−1,d2−2,d2−3に含まれるタイムスタンプは、それぞれ「10」,「20」,「30」に変更される。
このような処理により、部分映像データd1−1と部分映像データd2−1との間ではタイムスタンプの値が同じになる。同様に、部分映像データd1−2と部分映像データd2−2との間でもタイムスタンプの値が同じになり、部分映像データd1−3と部分映像データd2−3との間でもタイムスタンプの値が同じになる。このように、映像データd1と映像データd2との間でタイムスタンプを整合させることができる。
このようなタイムスタンプの整合は、例えば、映像データd1,d2の一方が配信されて再生装置で再生されている状況において、再生装置が映像データを途中で切り替えながら再生することを可能にする。例えば、再生装置が情報処理装置1から部分映像データd1−1,d1−2の配信を受け、次に映像データを切り替えて部分映像データd2−3の配信を受けるとする。この場合、処理部2の上記処理によってタイムスタンプが変更された部分映像データd2−3が配信されることで、再生装置はタイムスタンプの値が連続した部分映像データを順番に受信することができる。これにより、再生装置は、映像データd1,d2を切り替え前後で途切れなく正常に再生できるようになる。
〔第2の実施の形態〕
次に、ストリーミング・プロトコルとしてHLSを用いた動画配信システムについて説明する。
図2は、第2の実施の形態に係る動画配信システムの構成例を示す図である。図2に示す動画配信システムは、Webサーバ100、カメラ210,220および再生端末310,320,330を含む。カメラ210,220とWebサーバ100との間は、例えば、図示しないネットワークを介して接続されている。また、再生端末310,320,330とWebサーバ100との間も、例えば、図示しないネットワークを介して接続されている。なお、Webサーバ100は、図1に示した情報処理装置1の一例である。
Webサーバ100は、カメラ210,220による撮影によって作成された動画ストリームを配信する配信サーバである。Webサーバ100は、HLSのプロトコルにしたがって、各動画ストリームを所定の再生時間単位の動画ファイルに分割して保存し、これらの動画ファイルを再生端末に送信することで動画ストリームを配信する。また、Webサーバ100は、再生端末からの要求に応じて、配信する動画ストリームを途中から他の動画ストリームに切り替えることが可能になっている。
カメラ210,220は、それぞれ動画像を撮影し、動画ストリームとしてWebサーバ100に送信する。カメラ210,220は、例えば監視用のカメラである。この場合、カメラ210,220は、それぞれ異なる位置(視点)から監視対象の領域を撮影する。
再生端末310,320,330は、Webサーバ100から配信される動画ストリームを受信して動画像を再生表示する端末装置である。再生端末310,320,330は、上記の動画ファイルを再生順にWebサーバ100からダウンロードすることで、動画像を再生し、表示装置に表示させる。
また、再生端末310,320,330は、Webサーバ100から配信される動画ストリームを途中から他の動画ストリームに切り替えることで、動画像を切り替えて再生できるようになっている。例えば、上記のようにカメラ210,220が監視用のカメラである場合、ユーザは再生端末310,320,330のそれぞれを用いて、異なる位置(視点)からの動画像を切り替えながら監視対象の領域の様子を確認することができる。
なお、Webサーバ100に接続されるカメラの台数は、図2のように2台に限定されるものではなく、3台以上のカメラがWebサーバ100に接続されてもよい。また、Webサーバ100に接続される再生端末の台数は、図2のように3台に限定されるものではなく、1台以上の任意の数の再生端末がWebサーバ100に接続されてもよい。
図3は、Webサーバのハードウェア構成例を示す図である。Webサーバ100は、例えば、図3に示すようなコンピュータとして実現される。
図3に示すWebサーバ100は、プロセッサ101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィックインタフェース(I/F)104、入力インタフェース(I/F)105、読み取り装置106および通信インタフェース(I/F)107を有する。
プロセッサ101は、Webサーバ100全体を統括的に制御する。プロセッサ101は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM102は、Webサーバ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
HDD103は、Webサーバ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
グラフィックインタフェース104には、表示装置104aが接続されている。グラフィックインタフェース104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置104aとしては、液晶ディスプレイや有機EL(ElectroLuminescence)ディスプレイなどを適用可能である。
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどを適用可能である。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどを適用可能である。
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、光磁気ディスク、半導体メモリなどを適用可能である。
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、Webサーバ100の処理機能を実現することができる。なお、再生端末310,320,330についても、図3に示すようなコンピュータとして実現可能である。
次に、図4〜図6を用いて、HLSを用いた動画配信処理の比較例について説明する。図4〜図6では、ABR(Adaptive Bitrate)方式の動画配信が行われる場合について例示する。
図4は、HLSを用いた動画配信処理の比較例を示す第1の図である。
HLSでは、動画ストリームは所定再生時間(以下、例として10秒とする)を単位として動画ファイルに分割される。図4の例では、カメラ401による撮影によって作成された動画ストリームが、トランスコーダ402に入力される。トランスコーダ402は、入力された動画ストリームを互いに異なる品質の動画ストリームにトランスコードし、配信サーバであるWebサーバ403に出力する。図4の例では、高品質、低品質の2つの動画ストリームが、トランスコーダ402からWebサーバ403に出力されている。これら2つの動画ストリームは、例えば圧縮率や解像度を変えることで、異なるビットレートの動画ストリームとして作成される。
Webサーバ403では、高品質、低品質の各動画ストリームが10秒分のストリームに分割されることで動画ファイルが作成される。すなわち、作成される動画ファイルは、10秒分の動画像を表示するためのストリームデータである。図4の例では、高品質の動画ストリームを基に動画ファイル411−1,411−2,411−3,・・・が作成され、Webサーバ403に保存される。また、低品質の動画ストリームを基に動画ファイル412−1,412−2,412−3,・・・が作成され、Webサーバ403に保存される。
また、Webサーバ403では、高品質の動画ストリームに対応するプレイリスト421と、低品質の動画ストリームに対応するプレイリスト422とが作成され、保存される。プレイリスト421には、動画ファイル411−1,411−2,411−3,・・・のファイル名や格納場所の情報が、再生順に記述される。プレイリスト422には、動画ファイル412−1,412−2,412−3,・・・のファイル名や格納場所の情報が、再生順に記述される。
さらに、Webサーバ403では、ABRプレイリスト420が作成され、保存される。ABRプレイリスト420には、プレイリスト421,422のファイル名や格納場所の情報が記述される。
図5は、HLSを用いた動画配信処理の比較例を示す第2の図である。この図5を用いて、図4に示した動画ストリームの配信手順について説明する。
再生端末は、最初にABRプレイリスト420をWebサーバ403からダウンロードし、ABRプレイリスト420に基づいて、所望品質の動画ストリームに対応するプレイリストの送信をWebサーバ403に要求する。そして、再生端末は、Webサーバ403から送信されたプレイリストに基づいて、所望品質の動画ストリームに対応する動画ファイルの送信を、順番にWebサーバ403に要求することができる。
図5の例では、再生端末404は、Webサーバ403との間の通信品質が高いため、高品質の動画ストリームを再生しようとする。この場合、再生端末404は、プレイリスト421をダウンロードし、プレイリスト421に基づいて動画ファイル411−1,411−2,411−3,・・・の送信を、順番にWebサーバ403に要求する。再生端末404は、Webサーバ403から動画ファイル411−1,411−2,411−3,・・・を順番に受信してデコードすることで、高品質の動画ストリームに基づく動画像を再生表示できる。
また、図5の例では、再生端末405は、Webサーバ403との間の通信品質が低いため、低品質の動画ストリームを再生しようとする。この場合、再生端末405は、プレイリスト422をダウンロードし、プレイリスト422に基づいて動画ファイル412−1,412−2,412−3,・・・の送信を、順番にWebサーバ403に要求する。再生端末405は、Webサーバ403から動画ファイル412−1,412−2,412−3,・・・を順番に受信してデコードすることで、低品質の動画ストリームに基づく動画像を再生表示できる。
さらに、再生端末404,405は、Webサーバ403との間の通信品質の変動に応じて、一方の動画ストリームの再生中に、再生する動画ストリームを他方の動画ストリームに切り替えることができる。ここで、図6を用いて、再生端末404が再生する動画ストリームを切り替える場合の例について説明する。
図6は、HLSを用いた動画配信処理の比較例を示す第3の図である。図6では、再生端末404は、高品質の動画ストリームに対応する動画ファイル411−1〜411−3を順番に受信し、これらをデコードして動画像を再生表示する。また、動画ファイル411−3を受信した時点で、Webサーバ403と再生端末404との間の通信品質が低下したとする。この場合、再生端末404は、再生対象の動画ストリームを高品質から低品質に切り替えることができる。
再生端末404はこの切り替えのために、まず、ABRプレイリスト420に基づいて、低品質の動画ストリームに対応するプレイリスト422の送信をWebサーバ403に要求する。再生端末404は、プレイリスト422を受信すると、プレイリスト422に基づき、低品質の動画ストリームに対応する動画ファイルの中から、動画ファイル411−3の次に取得すべき動画ファイルを特定する。
図6の例では、次に取得すべき動画ファイルとして動画ファイル412−4が特定され、再生端末404は、動画ファイル412−4の送信をWebサーバ403に要求する。再生端末404は、動画ファイル412−4を受信し、動画ファイル411−3に続いてデコードすることで、低品質の動画ストリームに基づく動画像を連続して再生表示することができる。この後、再生端末404は、次の動画ファイル412−5をWebサーバ403から取得して、低品質の動画ストリームに基づく動画像の再生表示を継続する。
このように、HLSを用いた動画配信では、再生端末は、配信サーバとの間の通信品質の変動に応じて最適な品質の動画ストリームを受信し、動画像を再生表示することができる。HLSでは、このような処理を、所定の再生時間単位で細切れにされた動画ファイルをプレイリストにしたがって順次選択する、という簡単な仕組みで実現できる。
ここで、動画ファイルに付加されるタイムスタンプ(再生時刻情報)について説明する。以下の説明において、図中に示される各動画ファイルのタイムスタンプ(TS)は、動画ファイルによって再生されるフレームのうち、先頭フレームに付加されるタイムスタンプを示す。また、以下の説明におけるタイムスタンプは、例えば、MPEG−2 TS(Moving Picture Experts Group-2 Transport Stream)におけるPTS(Presentation Time Stamp)である。
図4〜図6の比較例では、トランスコーダ402により、高品質、低品質それぞれの動画ストリームのトランスコードが同期して実行される。これにより、各動画ストリームにおいては、同じタイミングでトランスコードされたフレームに対応する動画データには、同じ値のタイムスタンプが付加される。
例えば、動画ファイル411−1,412−1は同じタイミングでトランスコードされるので、これらには同じタイムスタンプが付加される。図6の例では、これらにはタイムスタンプ「100」が付加されている。また、動画ファイル411−2,412−2は同じタイミングでトランスコードされるので、これらには同じタイムスタンプが付加される。図6の例では、これらにはタイムスタンプ「200」が付加されている。さらに、動画ファイル411−3,412−3は同じタイミングでトランスコードされるので、これらには同じタイムスタンプが付加される。図6の例では、これらにはタイムスタンプ「300」が付加されている。
このように各動画ストリームの画像ファイル間でタイムスタンプの整合が図られることで、再生端末404は、再生する動画ストリームを切り替えたときに、動画像を途切れることなく連続的に再生表示できるようになる。例えば図6では、再生端末404は、高品質の動画ストリームに対応する動画ファイル411−1〜411−3を受信した後、再生する動画ストリームを切り替える。このとき再生端末404は、前述のようにABRプレイリスト420およびプレイリスト422に基づいて低品質の動画ストリームに対応する動画ファイル412−4,412−5を受信する。
上記のように動画ファイル411−1〜411−3にそれぞれタイムスタンプ「100」,「200」,「300」が付加されている場合、切り替え後の動画ファイル412−4,412−5にはそれぞれタイムスタンプ「400」,「500」が付加されている。このように、切り替え前後でタイムスタンプの連続性が維持されている。このため、再生端末404は、動画ファイル411−1,411−2,411−3,412−4,412−5を順番にデコードすることで、切り替え前後で動画像を途切れることなく連続して再生表示できる。
次に、図7〜図9を用いて、第2の実施の形態での動画配信処理について説明する。
図7は、第2の実施の形態での動画配信処理の例を示す第1の図である。図7に示すように本実施の形態では、カメラ210は、撮像部211とエンコーダ212を備える。また、カメラ220は、撮像部221とエンコーダ222を備える。
撮像部211は、撮像素子によって動画像を撮影する。エンコーダ212は、撮像部211から入力される動画像のデータをエンコードし、動画ストリームとしてWebサーバ100に送信する。一方、撮像部221は、撮像素子によって動画像を撮影する。エンコーダ222は、撮像部221から入力される動画像のデータをエンコードし、動画ストリームとしてWebサーバ100に送信する。なお、各動画ストリームの品質は、同じであってもよいし、違ってもよい。また、エンコーダ212,222は、ハードウェアによって実現されてもよいし、ソフトウェアによって実現されてもよい。
Webサーバ100は、カメラ210からの動画ストリームを再生時間10秒分ごとに分割することで、動画ファイルF1−1,F1−2,F1−3,・・・を作成して保存する。また、Webサーバ100は、カメラ220からの動画ストリームを再生時間10秒分ごとに分割することで、動画ファイルF2−1,F2−2,F2−3,・・・を作成して保存する。
さらに、Webサーバ100は、カメラ210に対応するプレイリストL1と、カメラ220に対応するプレイリストL2と、ABRプレイリストL0を作成して保存する。プレイリストL1には、カメラ210からの動画ストリームに対応する動画ファイルF1−1,F1−2,F1−3,・・・のファイル名や格納場所を示す情報が、再生順に記述される。プレイリストL2には、カメラ220からの動画ストリームに対応する動画ファイルF2−1,F2−2,F2−3,・・・のファイル名や格納場所を示す情報が、再生順に記述される。ABRプレイリストL0には、プレイリストL1,L2のファイル名や格納場所を示す情報が記述される。
再生端末は、このようなABRプレイリストL0およびプレイリストL1,L2を参照することにより、上記の比較例と同様に、所望の動画ストリームに対応する動画ファイルを順番に取得して動画像を再生表示することができる。また、再生端末は、上記の比較例と同様の手順により、動画像の再生処理中に、異なる動画ストリームに対応する動画ファイルを切り替えて取得することができる。これにより、再生端末のユーザは、異なるカメラ210,220によって撮影された動画像を、リアルタイムに切り替えながら閲覧できる。ただし、切り替えの前後で動画像を正しく再生表示できるようにするためには、後述するようなWebサーバ100側でのタイムスタンプの制御が行われる。
図7に示すように、本実施の形態では、各動画ストリームは個別のエンコーダ212,222によって作成される。エンコーダ212とエンコーダ222との間では、エンコード処理が同期されない。このため、次の図8の例のように、これらの動画ストリームの間では、同じ時刻にエンコードされたフレームの動画データに同じ値のタイムスタンプが付加されるとは限らない。
図8は、第2の実施の形態での動画配信処理の例を示す第2の図である。図8の左上に示す動画データD1−1,D1−2,D1−3,・・・は、カメラ210から送信される動画ストリームに含まれる動画データである。また、図8の左下に示す動画データD2−1,D2−2,D2−3,・・・は、カメラ220から送信される動画ストリームに含まれる動画データである。これらの動画データは、Webサーバ100において1つの動画ファイルに含められるデータであるとする。
動画データD1−1,D2−1は、同じ時刻T1にエンコードされたものであるとする。同様に、動画データD1−2,D2−2は、同じ時刻T2にエンコードされたものであり、動画データD1−3,D2−3は、同じ時刻T3にエンコードされたものであるとする。
しかしながら、これらの動画ストリームの間では、同じ時刻にエンコードされた動画像データには異なる値のタイムスタンプが付加されている。例えば、動画データD1−1,D2−1には、それぞれタイムスタンプ「100」,「200」が付加されている。動画データD1−2,D2−2には、それぞれタイムスタンプ「200」,「300」が付加されている。動画データD1−3,D2−3には、それぞれタイムスタンプ「300」,「400」が付加されている。
このような場合に、Webサーバ100が、同じ時刻に受信した各動画ストリームの動画データを基に、付加されているタイムスタンプをそのまま用いて動画ファイルを作成したとする。この場合、再生端末は、動画ストリームを切り替えたときに動画像を連続して再生表示できなくなる。例えば、再生端末が、動画データD1−2に基づく動画ファイルを受信した後に、動画データD2−3に基づく動画ファイルを受信したとすると、タイムスタンプは「200」の次に「400」となる。このようにタイムスタンプの連続性がなくなることから、切り替え直後において動画像の再生表示が一時的に停止してしまう。また、以上の例では切り替え後にタイムスタンプが過度に増加してしまうが、逆に、切り替え後にタイムスタンプが減少してしまう場合には、再生表示を継続できない場合もある。
そこで、本実施の形態では、Webサーバ100は次のような手順で動画ファイルを作成する。
Webサーバ100は、入力される動画ストリームの中から、メイン動画ストリームを選択する。メイン動画ストリームとしては、例えば、最も先に入力された動画ストリームが選択される。Webサーバ100は、メイン動画ストリームのタイムスタンプを基準値として用いて、それ以外の動画ストリーム(サブ動画ストリーム)のタイムスタンプを書き換える。
図8の例では、カメラ210からの動画ストリームがメイン動画ストリームST1として選択され、カメラ220からの動画ストリームがサブ動画ストリームST2として選択されている。Webサーバ100は、メイン動画ストリームST1およびサブ動画ストリームST2の動画データのうち、同じ時刻に受信した動画データのタイムスタンプの差分を算出する。図8では例えば、動画データD1−1のタイムスタンプ「100」から動画データD2−1のタイムスタンプ「200」を減算することで、差分時間「−100」が算出される。
Webサーバ100は、メイン動画ストリームST1については、タイムスタンプをそのまま用いて動画ファイルを作成する。図8の例では、動画データD1−1〜D1−3からそれぞれ動画ファイルF1−1〜F1−3が作成される。動画ファイルF1−1,F1−2,F1−3には、それぞれタイムスタンプ「100」,「200」,「300」が付加される。
一方、Webサーバ100は、サブ動画ストリームST2については、各動画データに付加されているタイムスタンプに、上記のように算出された差分時間を加算し、加算後のタイムスタンプを動画ファイルに付加する。図8の例では、差分時間は「−100」であるので、サブ動画ストリームST2の各動画データに付加されたタイムスタンプに対して「−100」が加算される(すなわち、タイムスタンプから「100」が減算される)。したがって、動画データD2−1〜D2−3からそれぞれ動画ファイルF2−1〜F2−3が作成されたとき、動画ファイルF2−1,F2−2,F2−3にはそれぞれタイムスタンプ「100」,「200」,「300」が付加される。
このような処理により、Webサーバ100が同じ時刻に受信した各動画ストリームの動画データを基に作成された動画ファイルには、同じ値のタイムスタンプが付加される。これにより、動画ストリーム間におけるタイムスタンプの整合をとることができる。
図9は、第2の実施の形態での動画配信処理の例を示す第3の図である。この図9では、図8のようにして作成された動画ファイルF1−1,F1−2,F1−3,・・・および動画ファイルF2−1,F2−2,F2−3,・・・を用いた動画配信時の処理例を示す。ここでは例として、再生端末310が動画像を再生表示するものとする。
再生端末310は、最初にABRプレイリストL0をWebサーバ100からダウンロードし、ABRプレイリストL0に基づいて、所望のカメラからの動画ストリームに対応するプレイリストの送信をWebサーバ100に要求する。図9ではカメラ210からの動画ストリームを再生しようとするものとすると、再生端末310は、カメラ210に対応するプレイリストL1をWebサーバ100からダウンロードし、プレイリストL1に基づいて、カメラ210に対応する動画ファイルの送信を順番にWebサーバ100に要求する。
図9の例では、再生端末310は、Webサーバ100から動画ファイルF1−1〜F1−3を順番に受信し、これらに基づいて動画像の再生表示を行う。また、動画ファイルF1−3を受信したタイミングで、カメラ切り替え(カメラ210からカメラ220への切り替え)の操作がユーザにより行われたとする。この場合、再生端末310は、ABRプレイリストL0に基づいて、カメラ220に対応するプレイリストL2をWebサーバ100からダウンロードする。再生端末310は、受信したプレイリストL2に基づき、カメラ220に対応する動画ファイルの中から、動画ファイルF1−3の次に取得すべき動画ファイルを特定する。
図9の例では、次に取得すべき動画ファイルとして動画ファイルF2−4が特定され、再生端末310は、動画ファイルF2−4の送信をWebサーバ100に要求する。再生端末310は、動画ファイルF2−4を受信し、動画ファイルF2−4を動画ファイルF1−3に続いてデコードして、動画ファイルF2−4に基づく動画像の再生表示を行う。動画ファイルF1−3にはタイムスタンプ「300」が付加され、動画ファイルF2−4にはタイムスタンプ「400」が付加されている。このようにタイムスタンプの連続性が維持されているので、再生端末310は、カメラの切り替え前後で動画像を途切れることなく連続して再生表示することができる。
以下、第2の実施の形態に係る動画配信システムについて、さらに詳しく説明する。
図10は、Webサーバおよび再生端末が備える処理機能の構成例を示す図である。
まず、Webサーバ100は、受信バッファ111、管理情報記憶部112、画像バッファ113、ファイル記憶部114、ファイル作成部121および配信処理部122を備える。受信バッファ111、管理情報記憶部112、画像バッファ113およびファイル記憶部114は、例えばRAM102など、Webサーバ100が備える記憶装置の記憶領域によって実現される。ファイル作成部121および配信処理部122の処理は、例えば、Webサーバ100が備えるプロセッサ101が所定のプログラムを実行することで実現される。
受信バッファ111には、カメラ210,220から受信した動画ストリームのデータが一時的に格納される。ファイル作成部121は、受信バッファ111に格納されたデータに基づいて配信用の動画ファイルを作成し、ファイル記憶部114に格納する。また、ファイル作成部121は、プレイリストを作成してファイル記憶部114に格納する。
管理情報記憶部112は、ファイル作成部121の処理で参照される管理情報を記憶する。画像バッファ113には、ファイル作成部121の処理中に利用されるバッファ領域であり、例えばタイムスタンプが書き換えられた動画データが一時的に格納される。
配信処理部122は、再生端末310,320からの要求に応じて、ファイル記憶部114に格納されたプレイリストや動画ファイルを送信する。これにより、配信処理部122は、動画ストリームを配信する配信サーバとしての機能を果たす。
次に、再生端末310は、画像取得部311、デコーダ312および表示処理部313を備える。画像取得部311、デコーダ312および表示処理部313の処理は、例えば、再生端末310が備える図示しないプロセッサが所定のプログラムを実行することで実現される。
画像取得部311は、Webサーバ100の配信処理部122からプレイリストや動画ファイルを取得する。デコーダ312は、画像取得部311が取得した動画ファイルをデコードする。表示処理部313は、デコーダ312によってデコードされた動画データに基づいて動画像を生成し、図示しない表示装置に表示させる。
なお、図10では再生端末310の構成を例示したが、再生端末320も再生端末310と同様の処理機能を備えている。
図11は、グループ管理情報の構成例を示す図である。図11に示すグループ管理情報130は、Webサーバ100の管理情報記憶部112に記憶される管理情報の一例である。
グループ管理情報130は、動画ストリームのグループごとのグループ管理テーブル131を含む。グループとは、再生端末が切り替えて受信可能な動画ストリームの組み合わせを示し、例えばWebサーバ100の管理者によって任意に設定される。なお、前述のABRプレイリストは、グループごとに作成されてファイル記憶部114に記憶される。そして、各グループに含まれる動画ストリームごとに、動画ファイルの格納場所および再生順を示すプレイリストが作成されて、ファイル記憶部114に記憶される。
グループ管理テーブル131は、ストリームID、メインフラグ、受信状態および差分時間の各項目を有する。ストリームIDは、グループに含まれる動画ストリームの識別番号を示す。メインフラグは、動画ストリームがメイン動画ストリームか否かを示すフラグ情報である。ここでは例として、メイン動画ストリームの場合に「1」が登録され、サブ動画ストリームの場合に「0」が登録される。受信状態は、動画ストリームが受信中の状態か、受信していない状態かを示す。差分時間は、タイムスタンプの差分を示す。
図12は、プレイリストに記述される情報の例を示す図である。図12には、1つのグループに対応するABRプレイリストL0およびプレイリストL1,L2を例示している。すなわち、このグループには、プレイリストL1,L2に対応する2つの動画ストリームが含まれている。
ABRプレイリストL0には、プレイリストL1,L2のファイル名や格納場所の情報が記述される。図12の例では、第2行および第3行にプレイリストL1に関する情報が記述され、第4行および第5行にプレイリストL2に関する情報が記述されている。例えば、第3行には、プレイリストL1のファイル名「camA.m3u8」とそのパス情報が記述され、第5行にはプレイリストL2のファイル名「camB.m3u8」とそのパス情報が記述されている。
プレイリストL1には、一方の動画ストリームに対応する動画ファイルのファイル名や格納場所の情報が、動画ファイルの再生順(配信順)に記述される。図12の例では、第5行および第6行に先頭の動画ファイルに関する情報が記述され、第7行および第8行に2番目の動画ファイルに関する情報が記述され、第9行および第10行に3番目の動画ファイルに関する情報が記述されている。この例では、先頭から3番目までの動画ファイルのファイル名はそれぞれ「camA_file1.ts」,「camA_file2.ts」,「camA_file3.ts」であり、第6行、第8行、第10行に各動画ファイルのファイル名およびパス情報が記述されている。
プレイリストL2には、他方の動画ストリームに対応する動画ファイルのファイル名や格納場所の情報が、動画ファイルの再生順(配信順)に記述される。図12の例では、第5行および第6行に先頭の動画ファイルに関する情報が記述され、第7行および第8行に2番目の動画ファイルに関する情報が記述され、第9行および第10行に3番目の動画ファイルに関する情報が記述されている。この例では、先頭から3番目までの動画ファイルのファイル名はそれぞれ「camB_file1.ts」,「camB_file2.ts」,「camB_file3.ts」であり、第6行、第8行、第10行に各動画ファイルのファイル名およびパス情報が記述されている。
プレイリストL1,L2のいずれにも、新たな動画ファイルが作成されるたびにその動画ファイルの情報が順次追加されていく。例えば、リアルタイム再生が行われる場合、再生端末は、動画ファイルをダウンロードするたびに、最新のプレイリストをWebサーバ100から取得し、新たに追加された次の動画ファイルを認識して、その動画ファイルをWebサーバ100からダウンロードできる。
なお、例えば、各動画ストリームに対応する動画ファイルでは、ファイル名の末尾(拡張子を除く)に再生の順番を示す数字が記述される。また、動画ストリームの間では、同じ時刻に再生される動画像の動画ファイルについて、ファイル名の末尾(拡張子を除く)に記述された数字が同じ値となっている。これにより、再生端末は、受信する動画ストリームを切り替える際に、切り替え後の動画ストリームに対応する動画ファイルの中からどの動画ファイルをダウンロードするべきかを判断できる。すなわち、再生端末は、切り替え後の動画ストリームに対応する動画ファイルの中から、ファイル名の末尾の数字が、切り替え直前にダウンロードしたファイル名の末尾の数字に「1」を加算した値になっている動画ファイルを、次にダウンロードするべき動画ファイルと判断できる。
次に、Webサーバ100の処理について、フローチャートを用いて説明する。
図13は、動画ファイル作成処理の例を示すフローチャートである。
[ステップS11]ファイル作成部121は、管理者からの操作に応じて、グループを設定する。この処理では、グループに対応するグループ管理テーブル131がグループ管理情報130に新たに登録され、グループに含まれる各動画ストリームに関する情報がグループ管理テーブル131に登録される。各動画ストリームに対応するレコードでは、メインフラグが「0」に設定され、受信状態が受信していないことを示す「未受信」に設定され、差分時間が「0」に設定される。また、グループ管理テーブル131に登録される各ストリームIDには、例えば、対応する動画ストリームの送信元となるカメラの識別情報が関連付けられる。
また、ファイル作成部121は、このグループに対応するABRプレイリストと、グループに含まれる各動画ストリームに対応するプレイリストとを作成して、ファイル記憶部114に格納する。なお、この時点では、各動画ストリームに対応するプレイリストには、動画ファイルのファイル名や格納位置を示す情報は記述されない。
続いて、設定されたグループを処理対象としてステップS12以降の処理が実行される。
[ステップS12]グループに含まれるいずれかの動画ストリームについての動画データをWebサーバ100が受信すると、その動画データは受信バッファ111に格納される。ファイル作成部121は、受信された動画データを受信バッファ111から取得する。
なお、ステップS12での処理単位となる動画データは、動画ストリームに含まれるデータのうち、所定の送信単位となるひとまとまりのデータである。このような動画データとしては、例えば、一定数のフレームについてのデータが含まれるGOP(Group Of Picture)のデータを適用可能である。
[ステップS13]ファイル作成部121は、ステップS12で取得した動画データが、グループ内の最初の動画データであるかを判定する。ファイル作成部121は、取得した動画データがグループ内の最初の動画データである場合、処理をステップS14に進め、取得した動画データがグループ内の最初の動画データでない場合、処理をステップS15に進める。
[ステップS14]ファイル作成部121は、ステップS12で取得した動画データに対応する動画ストリームを、メイン動画ストリームに設定する。このとき、グループ管理テーブル131におけるこの動画ストリームに対応するレコードにおいて、メインフラグが「1」に設定される。
[ステップS15]ファイル作成部121は、ステップS12で取得した動画データが、メイン動画ストリームに対応する動画データであるかを判定する。ファイル作成部121は、取得した動画データがメイン動画ストリームに対応する動画データである場合、処理をステップS19に進め、取得した動画データがメイン動画ストリームに対応する動画データでない場合、処理をステップS16に進める。
[ステップS16]ファイル作成部121は、ステップS12で取得した動画データが、その動画データに対応する動画ストリームにおける最初の動画データであるかを判定する。ファイル作成部121は、取得した動画データが最初の動画データである場合、処理をステップS17に進め、取得した動画データが最初の動画データでない場合、処理をステップS18に進める。
[ステップS17]ファイル作成部121は、ステップS12で取得した動画データに付加されているタイムスタンプを取得する。また、ファイル作成部121は、直近に受信バッファ111から取得した、メイン動画ストリームに対応する動画データについて、その動画データに付加されているタイムスタンプを取得する。ファイル作成部121は、後者のタイムスタンプから前者のタイムスタンプを減算することで、差分時間を算出する。ファイル作成部121は、グループ管理テーブル131において、ステップS12で取得した動画データに対応する動画ストリームに対応付けられた差分時間の項目に、算出された差分時間を登録する。
[ステップS18]ファイル作成部121は、グループ管理テーブル131から、ステップS12で取得した動画データに対応する動画ストリームに対応付けられた差分時間を読み出し、この差分時間に基づいて、取得した動画データに付加されているタイムスタンプを書き換える。この処理では、ファイル作成部121は、取得した動画データに付加されていたタイムスタンプに、グループ管理テーブル131から読み出した差分時間を加算し、加算後のタイムスタンプによって元のタイムスタンプを書き換える。
[ステップS19]ファイル作成部121は、ファイル作成条件を満たすかを判定する。ステップS12で取得した動画データと、画像バッファ113に蓄積されている動画データのうちステップS12で取得した動画データと同じ動画ストリームに対応する動画データとの合計数が一定数に達していた場合、ファイル作成条件を満たすと判定される。ファイル作成部121は、ファイル作成条件を満たさない場合、処理をステップS20に進め、ファイル作成条件を満たす場合、処理をステップS21に進める。
[ステップS20]ファイル作成部121は、ステップS12で取得した動画データを画像バッファ113に格納する。このとき、ステップS18においてタイムスタンプの書き換えが行われていた場合には、タイムスタンプが書き換えられた動画データが画像バッファ113に格納される。この後、処理はステップS12に進められる。
[ステップS21]ファイル作成部121は、画像バッファ113から、ステップS12で取得した動画データと同じ動画ストリームに対応するすべての動画データを読み出す。ファイル作成部121は、読み出した動画データとステップS12で取得した動画データとを用いて、動画ファイルを作成し、ファイル記憶部114に格納する。また、ファイル作成部121は、作成された画像ファイルのファイル名や格納場所を示す情報を、対応するプレイリストに追記する。この後、処理はステップS12に進められる。
図14、図15は、動画データの受信が断絶した場合における動画ファイル作成処理の例を示すフローチャートである。
[ステップS31]ファイル作成部121は、グループに含まれる1つの動画ストリームの受信が断絶したことを検出すると、ステップS32以降の処理を実行する。
[ステップS32]ファイル作成部121は、グループに対応するグループ管理テーブル131を参照し、グループに含まれる各動画ストリームの受信状態を確認する。
[ステップS33]ファイル作成部121は、ステップS31の受信断絶によりグループ内の全動画ストリームの受信が断絶したかを判定する。ファイル作成部121は、全動画ストリームの受信が断絶した場合、処理をステップS34に進め、受信中の動画ストリームが1つ以上ある場合、処理をステップS36に進める。
[ステップS34]ファイル作成部121は、グループに対応するグループ管理テーブル131において、各動画ストリームについての差分時間をすべて破棄する(「0」に初期化する)。
[ステップS35]ファイル作成部121は、グループに対応するグループ管理テーブル131において、ステップS31で受信が断絶した動画ストリームについての受信状態を、受信していないことを示す「未受信」に更新する。これにより、グループに含まれるすべての動画ストリームについての受信状態が「未受信」となる。また、ファイル作成部121は、ステップS31で受信が断絶した動画ストリームについてのメインフラグを「0」に更新する。以上の処理が終了すると、処理が図13のステップS12に進められる。
[ステップS36]ファイル作成部121は、ステップS31で受信が断絶した動画ストリームがメイン動画ストリームであるかを判定する。ファイル作成部121は、当該動画ストリームがメイン動画ストリームの場合、処理をステップS37に進め、サブ動画ストリームの場合、処理をステップS38に進める。
[ステップS37]ファイル作成部121は、メイン動画ストリームを、グループ内の受信中のサブ動画ストリームの1つに変更する。具体的には、グループに対応するグループ管理テーブル131において、変更対象のサブ動画ストリームについてのメインフラグが「1」に更新される。なお、この処理では、新たなメイン動画ストリームについての差分時間はそのまま維持される。すなわち、メイン動画ストリームについての差分時間として「0」以外の値が登録された状態となる。
[ステップS38]ファイル作成部121は、グループに対応するグループ管理テーブル131において、ステップS31で受信が断絶した動画ストリームについての差分時間を破棄する(「0」に初期化する)。
[ステップS39]ファイル作成部121は、グループに対応するグループ管理テーブル131において、ステップS31で受信が断絶した動画ストリームについての受信状態を、受信していないことを示す「未受信」に更新する。また、ファイル作成部121は、ステップS31で受信が断絶した動画ストリームについてのメインフラグを「0」に更新する。以上の処理が終了すると、処理が図15のステップS41に進められる。
以下、図15を用いて説明を続ける。
[ステップS41]グループに含まれるいずれかの動画ストリームについての動画データをWebサーバ100が受信すると、その動画データは受信バッファ111に格納される。ファイル作成部121は、受信された動画データを受信バッファ111から取得する。
[ステップS42]ファイル作成部121は、ステップS41で取得した動画データが、メイン動画ストリームに対応する動画データであるかを判定する。ファイル作成部121は、取得した動画データがメイン動画ストリームに対応する動画データである場合、処理をステップS43に進め、取得した動画データがメイン動画ストリームに対応する動画データでない場合、処理をステップS44に進める。
[ステップS43]ファイル作成部121は、グループに対応するグループ管理テーブル131から、ステップS41で取得した動画データに対応する動画ストリーム(メイン動画ストリーム)に対応付けられた差分時間を読み出す。読み出した差分時間が「0」でない場合、ファイル作成部121は、ステップS41で取得した動画データに付加されていたタイムスタンプに、読み出した差分時間を加算し、加算後のタイムスタンプによって元のタイムスタンプを書き換える。
[ステップS44]ファイル作成部121は、ステップS41で取得した動画データが、サブ動画ストリームにおける最初の動画データであるかを判定する。ファイル作成部121は、取得した動画データが最初の動画データである場合、処理をステップS45に進め、取得した動画データが最初の動画データでない場合、処理をステップS46に進める。
[ステップS45]ファイル作成部121は、ステップS41で取得した動画データに付加されているタイムスタンプを取得する。また、ファイル作成部121は、直近に受信バッファ111から取得した、メイン動画ストリームに対応する動画データについて、その動画データに付加されているタイムスタンプを取得する。ファイル作成部121は、後者のタイムスタンプから前者のタイムスタンプを減算することで、差分時間を算出する。ファイル作成部121は、グループ管理テーブル131において、ステップS41で取得した動画データに対応する動画ストリームに対応付けられた差分時間の項目に、算出された差分時間を登録する。
[ステップS46]ファイル作成部121は、グループ管理テーブル131から、ステップS41で取得した動画データに対応する動画ストリームに対応付けられた差分時間を読み出し、この差分時間に基づいて、取得した動画データに付加されているタイムスタンプを書き換える。この処理では、ファイル作成部121は、取得した動画データに付加されていたタイムスタンプに、グループ管理テーブル131から読み出した差分時間を加算し、加算後のタイムスタンプによって元のタイムスタンプを書き換える。
[ステップS47]ファイル作成部121は、ファイル作成条件を満たすかを判定する。ステップS41で取得した動画データと、画像バッファ113に蓄積されている動画データのうちステップS41で取得した動画データと同じ動画ストリームに対応する動画データとの合計数が一定数に達していた場合、ファイル作成条件を満たすと判定される。ファイル作成部121は、ファイル作成条件を満たさない場合、処理をステップS48に進め、ファイル作成条件を満たす場合、処理をステップS49に進める。
[ステップS48]ファイル作成部121は、ステップS41で取得した動画データを画像バッファ113に格納する。このとき、ステップS43またはステップS46においてタイムスタンプの書き換えが行われていた場合には、タイムスタンプが書き換えられた動画データが画像バッファ113に格納される。この後、処理はステップS41に進められる。
[ステップS49]ファイル作成部121は、画像バッファ113から、ステップS41で取得した動画データと同じ動画ストリームに対応するすべての動画データを読み出す。ファイル作成部121は、読み出した動画データとステップS41で取得した動画データとを用いて、動画ファイルを作成し、ファイル記憶部114に格納する。また、ファイル作成部121は、作成された画像ファイルのファイル名や格納場所を示す情報を、対応するプレイリストに追記する。この後、処理はステップS41に進められる。
以上の図14、図15の処理によれば、グループ内のメイン動画ストリームの受信が断絶した場合、サブ動画ストリームの1つが新たなメイン動画ストリームに設定される(ステップS37)。新たなメイン動画ストリームについては、すでに算出されていた差分時間がそのまま維持され、その差分時間によってタイムスタンプが書き換えられ続ける(ステップS43)。これにより、どの動画ストリームの受信が断絶した場合でも、切り替え前後で問題なく再生可能な動画ストリームの動画ファイルを作成し続けることができる。
図16は、動画配信処理の例を示すフローチャートである。
[ステップS51]配信処理部122は、再生端末からプレイリストまたは動画ファイルの送信要求を受信する。
[ステップS52]送信対象のデータ(送信が要求されたデータ)が判定される。プレイリストの送信が要求された場合、処理はステップS53に進められ、動画ファイルの送信が要求された場合、処理はステップS54に進められる。
[ステップS53]配信処理部122は、送信が要求されたプレイリストまたはABRプレイリストをファイル記憶部114から読み出し、要求元の再生端末に送信する。
[ステップS54]配信処理部122は、送信が要求された動画ファイルをファイル記憶部114から読み出し、要求元の再生端末に送信する。
次に、再生端末の処理について、フローチャートを用いて説明する。
図17は、再生端末の処理例を示すフローチャートである。図17では例として再生端末310の処理について示すが、再生端末320,330も同様の処理を実行可能である。
[ステップS61]再生端末310の画像取得部311は、Webサーバ100に対してABRプレイリストの送信を要求する。
[ステップS62]送信が要求されたABRプレイリストがWebサーバ100から送信され、画像取得部311は、このABRプレイリストを受信する。
[ステップS63]画像取得部311は、ユーザによる動画ストリームの選択の操作を受け付ける。この動画ストリームは、受信したABRプレイリストに記述された動画ストリームの中から選択される。
[ステップS64]画像取得部311は、受信したABRプレイリストから、選択された動画ストリームに対応するプレイリストのパス情報を読み出し、このパス情報に基づいて当該プレイリストの送信をWebサーバ100に要求する。
[ステップS65]送信が要求されたプレイリストがWebサーバ100から送信され、画像取得部311は、このプレイリストを受信する。
[ステップS66]画像取得部311は、受信したプレイリストに基づいて、次に受信するべき動画ファイルを選択する。なお、ステップS66の初回実行時には、例えば、プレイリスト内の先頭の動画ファイルが選択される。あるいは、初回実行時には、ユーザの操作によって指定された動画ファイルが選択されてもよい。
[ステップS67]画像取得部311は、受信したプレイリストから、選択された動画ファイルのパス情報を読み出し、このパス情報に基づいて当該動画ファイルの送信をWebサーバ100に要求する。
[ステップS68]送信が要求された動画ファイルがWebサーバ100から送信され、画像取得部311は、この動画ファイルを受信してデコーダ312に入力する。デコーダ312は、入力された動画ファイルをデコードし、デコードされた動画データを表示処理部313に入力する。表示処理部313は、入力された動画データに基づく画像を表示装置に表示させる。
[ステップS69]画像取得部311が、ユーザによる動画ストリームの切り替え操作を受け付けた場合、処理はステップS71に進められる。一方、動画ストリームの切り替え操作を受け付けていない場合、処理はステップS70に進められる。
[ステップS70]画像取得部311は、直近にプレイリストの送信を要求した際に用いたパス情報に基づいて、前回受信したプレイリストと同じファイル名のプレイリストの送信をWebサーバ100に要求する。この後、処理がステップS65に進められ、要求したプレイリストがWebサーバ100から送信される。この場合、現在再生中の動画ストリームの再生表示が継続される。
[ステップS71]画像取得部311は、ステップS62で受信したABRプレイリストから、切り替え後の動画ストリームに対応するプレイリストのパス情報を読み出し、このパス情報に基づいて当該プレイリストの送信をWebサーバ100に要求する。この場合、切り替え後の動画ストリームに対応するプレイリストの送信が要求される。したがって、この後に処理がステップS65に進められると、切り替え後の動画ストリームに対応するプレイリストがWebサーバ100から送信される。これにより、再生する動画ストリームが切り替えられる。前述のように、切り替え前の動画ストリームに対応する動画ファイルのタイムスタンプと、切り替え後の動画ストリームに対応する動画ファイルのタイムスタンプとの間では、連続性が保証される。このため、切り替え前後で問題なく動画像の再生表示が継続される。
なお、上記の第2の実施の形態では、個別のカメラにより撮影されて作成された動画ストリームを、Webサーバ100が配信する場合について説明した。しかし、Webサーバ100が配信する動画ストリームは、このような例に限定されない。例えば、同一のカメラにより撮影された動画像に基づき、タイムスタンプが互いに連携されない個別のエンコーダを用いて作成された品質の異なる動画ストリームをWebサーバ100が配信する場合にも適用可能である。この場合、各エンコーダは同一のサーバ(例えばWebサーバ100)に搭載されていてもよいし、異なるコンピュータ上にそれぞれ搭載されていてもよい。各エンコーダが同一のサーバに搭載されるケースとしては、例えば、各エンコーダが個別のハードウェアとして用意されるケースがある。
また、上記の各実施の形態に示した装置(例えば、情報処理装置1、Webサーバ100、再生端末310,320,330)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。