帯域幅とストリーミング メディアの制作を理解する

帯域幅とストリーミング メディアの制作の基本

帯域幅の働きはとてもシンプルです。WMV のようなストリーミング メディアを作成する場合、帯域幅とは何か、また帯域幅がストリーミング メディアにどのように影響するかを理解しておく必要があります。

この文書では、帯域幅についての全体的な説明と、帯域幅がビデオ制作とコンテンツの配信にどのように関係するかをご説明します。また、技術論文ではないのでわかりやすくするために、文書内で使われているほとんどの計算には概算や四捨五入を使用しています。


帯域幅とは、基本的には与えられた接続時間内にどれだけのデータが転送されるかという単なる測定単位に過ぎません。


例えば、28.8 kbps のダイヤルアップモデム接続は、ケーブルモデム接続よりも遅くなります。ケーブルモデム接続は、同じ時間内で 28.8 kbps のダイヤルアップモデム接続よりも多くのデータをダウンロードできます。ケーブルモデムは 28.8 kbps のダイヤルアップモデム接続より高い接続帯域幅を持いると言えます。

これは普通の家庭の庭のホースと消防署の消防用ホースを比べるようなものです。消防用のホースは庭のホースよりも一分間により多くの水を放水できます。少しおかしな比喩ですが、消防用のホースは庭のホースよりも高い帯域幅を持つということができます。 

 

ファイル サイズ、ビット レート、帯域幅、データ転送

ファイル サイズはバイトという単位で測定されます。例えば、小さな画像ファイルは 20K (K または KB はキロバイトの省略記号です) または 20,000 バイト 程でしょう。1 キロバイトは約 1,000 バイトになります。

もしコンピューターが 1 秒あたり 5,000 バイトまたは 5K バイト受信できるとすれば、コンピューターが 20 K のファイルを受信するには 4 秒かかることになります。

しかし帯域幅はバイトではなく、ビットという単位で測られます。1 バイトは 8 ビットに相当します。コンピューターが 1 秒間に 5KB バイトもしくは 5,000 バイト受信できるとすれば、別の言い方をするとコンピューターは 1 秒間に 40,000 ビット (5,000 x 8) または 40 kbps (KB per second) 受信できると言えます。

1 秒あたりのビット数で測定されるデータ転送のことを通信速度 (ボーレート) またはビット レートと呼びます。これが帯域幅の測定単位です。通常、毎秒数千ビットまたは毎秒数キロビットで測定されます。毎秒数キロビット (kilobits per second) の省略を kbpsKbps または単に k と表します。1 キロビット = 約 1,000 ビットです。

コンピューターが 56 kbps のダイヤルアップモデムを使用してインターネットに接続している場合、理論的には、コンピューターは 1 秒あたり 56,000 ビット (56 kbps) のデータを受信できることになります。それはまた、コンピューターが 1 秒あたり 7,000 バイトのデータを受信できると言い換えることもできます。 (1 バイトが 8 ビットだということを思い出してください。56,000 ビット / 8 = 7,000 バイトとなります。)  20K の画像ファイルを 56 kbps のダイヤルアップ接続で受信する場合、3 秒弱かかることになります。 (20,000 バイト/7,000 バイト = 2.857 秒)

ビット/秒で測られるデータ転送が接続帯域幅です。上記の例では接続帯域幅は 56 kbps となります。

しかし、56 kbps モデムは、実際には 56 kbps で通信できず、35 ~ 52 kbps 程度であることに注意をしておく必要があります。言い換えると、56 kbps モデム接続は一般的に 35 ~ 45 kbps の帯域幅しか供給できないとも言えます。

 

帯域幅とストリーミング メディア ファイルの転送

パソコンのビデオ ファイルはフレーム (コマ) と呼ばれるたくさんの静止画が連続して一つのファイルに組み込まれています。ファイルが再生されている時、(Media Player を例にすると) プレーヤーはファイルの中身を全て読み込み、映画のフィルムが回転しプロジェクターに映画が投影されるように、連続した画像を表示します。

ファイルをストリーム再生している時、フレームはビデオをストリーミング配信しているコンピューターから再生しているコンピューターへ連続して配信されます。それぞれのフレームは実際に受信されると表示されます。

例えば、コンピューターがダイヤルアップ モデムを使用してインターネットに接続している場合、このような環境はストリーミングなどを再生するには、細く、低帯域幅のパイプ  (ホース) と言えます。それは、仮にモデムが 40 kbps で接続している場合、1 秒あたり 5,000 バイトのデータを受信していることになります。ビデオのそれぞれのフレームが 5KB の場合、モデムは 1 秒あたり 1 フレームしか受信できないことになります。商業映画は 24 fps (フレーム/秒)、テレビは 30 fps ですから、1 fps のビデオはとても遅くぎくしゃくしたものとなります。

帯域幅を高くすると、1 秒あたりより多くのフレームを受け取ることができるようになります。例えば 128 kbps の ISDN 接続では 1 秒あたり 5KB の画像を 3.2 フレーム受信できます。

5Kのフレームの画像は決して大きくありません。なぜなら 320 x 200 ピクセル で 16 ビットの JPG ファイルでも 20K のサイズになります。40 kbps の帯域幅で接続されているモデムは、20K のフレームを 1 つ受信するのに 4 秒もかかってしまいます。この通信速度ではビデオはスライドショーのようになり、もうビデオとは呼べません。

これが CNN などのニュースサイトの多くのビデオが 160 x 120 ピクセルという小さい画面サイズである理由であり、リッチ マルチメディア体験を楽しむにはダイヤルアップ接続では帯域幅が不十分である理由です。

 

ビデオ圧縮とキー フレーム

静止画が JPG のように多様な圧縮アルゴリズムを使用して圧縮されているのと同じように、ストリーミング メディア ファイル中のビデオとオーディオ データも圧縮されています。それによって、各フレームで多くのバイト数を減らし、ビデオを配信するのに必要な帯域幅を減らすことができます。必要な帯域幅を減らすためにデータの圧縮が大きく寄与している一方で、別の方法も取られています。

先にも述べたように、ビデオ ファイルはひとつのファイルに統合されたフレームと呼ばれる連続した静止画の集まりです。各フレームは、動きを投影するために毎秒与えられた数のフレーム分を表示されます。しかし多くの場合、ひとつのフレームから次のフレームの間では動きや変化がありません。アプリケーションのデモ ビデオなら、そのアプリケーションの新しいウィンドウが開かれるところを表示し、ナレーションがそのウィンドウやアプリケーションについて説明をしている数分間、画面はそのままでしょう。

画面が何も変わらないのであれば、新しいフレーム データを送信する必要はありません。プレーヤーは同じフレームを表示し続ければいいだけです。それによって必要な帯域幅を大きく減らすことができます。

ここで、ビデオ内で動いているのは、マウス ポインターのみというアプリケーションのデモ ビデオについて考えてみましょう。このマウス ポインターは、画面上のアプリケーションの中や周りをポイント デバイスとして移動しています。この場合、フレーム全体を送る代わりに、新しいフレームの変更部分のみ送ります。ひとつのフレームから次のフレーム間の変更が、マウス ポインターの位置だけであれば、画像の変更点はマウス ポインターの移動前と移動先だけとなります。

マウス ポインターはとても小さく、ビデオ データに占めるバイト数も少なく、フレーム間の変更を反映するために転送する必要があるビデオ データはとても少なく済みます。フレームの変更した部分のみを送ることで必要帯域幅を大きく減らすことができます。

このことから、画面での動きが、ひとつのフレームから次のフレームの変更部分となり、ビデオに必要な帯域幅を増減することが分かります。動きが多いほど、画面の変更も多くなり、結果として次のフレームを更新するのに多くのビデオのデータを送る必要があります。仮に、ひとつのフレームから次のフレームへ画面全体が変更されたら、フレーム全体を送る必要があります。

 

画面上の動きが必要な帯域幅を増加させる

ビデオ フレームにはキー フレームデルタ フレーム (差分フレーム) の 2 種類があります。キー フレームには完全なフレームを構成する全てのピクセル データが含まれます。デルタ フレームは前のフレームからの変更部分のみで構成されています。キー フレームはビデオ内で何秒間隔またはフレーム数の一定間隔で定期的に置き換えられます。例えば、Camtasia Recorder は既定の設定では、80 フレーム毎に 1 つのキーフレームが入ります。これは以下の様な仕組みとなります。

キーフレーム| デルタフレーム | デルタ | デルタ | デルタ | キー | etc…

もし、ひとつのフレームから次のフレームで変更がない場合、デルタ フレームのデータは 0 バイトとなります。次のフレームでの変更がマウス ポインターの動きだけであれば、デルタ フレームに含まれるデータはとても少なくなります。画面全体が変わったら、デルタ フレームはフレームの中に全てのピクセル データを含むことになるため、キー フレーム並みに大きくなります。

 

フレーム レートと帯域幅

フレーム レートは、ビデオの再生に必要な帯域幅に大きな影響を与えることも、あるいはそうでないこともあります。フレーム間で大きな変更があった場合、各フレームのサイズは大きくなり、多くのデータを転送しなければなりません。この場合、より高いフレーム レートであれば、帯域幅の増加を要求します。しかしフレーム間で変更が少ない、または変更がない場合は、各フレームに対しごくわずかのビデオ データの転送を必要するか、またはデータの転送は必要とされません。どれだけの帯域幅が必要かということについては、ビデオの内容次第であり、そのためフレーム レートの増加による影響は少なくも大きくもなります。

 

回線の混雑、帯域幅上昇とバッファリング

ストリーミングのビデオは受信されるにつれて表示されますが、何らかの理由でデータのストリーム転送が遅くなったり中断されたりした場合、そのビデオの再生は停止されます。ネットワークが混雑する等の問題は普通に起こるため、通常データ ストリームの中断を改善するためにバッファリングが実装されています。

バッファリングは、ローカル (コンピューター) でビデオの一部を保存し、ローカル バッファからデータを読み出してビデオを再生します。ビデオ再生が開始される前に、再生プレーヤーはビデオをある程度ダウンロードし、ローカルに保存しておきます。通常、ビデオの 10 秒位であり、それほど大きな割合ではありません。それからローカル バッファからフレームを読み出してビデオの再生をしながら、バッファを十分に保つようにビデオ データのダウンロードを続けます。

ネットワークが混雑した時や、何らかの理由でストリームが中断した場合、プレーヤーはバッファからのデータで再生を続け、バッファを使い果たし再生が止まる前にネットワークの中断が解消されるのを待ちます。

バッファリングは帯域幅が急上昇する箇所を含んでいるビデオのエンコードにも有効です。ビデオ内の何らかの要素で突然大きな帯域幅が必要になることもあります。例えば、あるアプリケーションのデモ ビデオで、多くのフレームで画面の動きはマウス ポインターの移動のみとします。しかし、ビデオ内でアプリケーションのあるボタンをクリックして新しいウィンドウが開いたとすると、フレーム全体が変わり、次のフレームを更新するために大量のデータを送信する必要が出てきます。これはもちろん、必要な帯域幅を大きく上昇させます。

比較的新しいメディア エンコーダーは、帯域幅の上昇により必要となる増加データが配信されるまで、バッファによって生じた余分な時間を考慮し、再生を妨げられずビデオがバッファから再生されます。バッファ時間の増加はエンコードの過程がうまくいくか失敗するかの違いを生み出します。

 

オーディオと帯域幅

ストリーミング コンテンツと帯域幅を考える上で、オーディオは非常に重要な要素です。オーディオはビデオと同じように帯域幅を必要とします。高音質オーディオは広い帯域幅が必要となります。

そのため Media Encoder のようなストリーミング メディア エンコードダーは、常に圧縮されたオーディオを使用します。未圧縮のオーディオは帯域幅を大量に消費します。例えば、22.050kHz、16 ビット モノラルの PCM 未圧縮オーディオは、43 kbps の帯域幅を必要とします。40 kbps のダイヤルアップ接続を考えると、ストリーミング再生をしようとしてもうまく行かないことになります。一方で 8 kHz、モノラルの ACELP.net のような高圧縮低品質オーディオでは 5 kbps の帯域幅で済みます。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています