RTMP によるライブストリーミングソフトウェア

株式会社ドワンゴの糸柳です。業務に関わるエントリでは所属を名乗るよう言われているのでこう書きましたが、もちろん本職はグッドウィルで日雇いの肉体労働をやっていて、登録している営業局が営業停止命令を受けたため生活に困窮しています。100 万円ほどください。と言いたいのですが先日実際にもらったので本題に入ります。

RTMP によるライブストリーミングでは、Flash Player が対応しているコーデックでエンコードしたビデオ、及びオーディオのストリームを RTMP に乗せる必要がある。

現在最新の Flash Player が対応しているオーディオの圧縮形式は以下の通りである。

ライブストリーミングを実現するときに技術的面からネックになるのは、配信側及び受信側の CPU 使用率と、帯域の占有である。そのほとんどはビデオストリームによるものであり、オーディオストリームはストリーム全体からすると比較的消費するリソースの割合がかなり小さいために致命的な問題になることが少ない。仮に圧縮形式が目的に不向きで音質に問題があったとしても、多少の CPU 使用率や帯域の増加を犠牲すればよいため改善しやすい。よって、この記事では RTMP ライブストリーミングにおけるオーディオについてこれ以上深く扱わない。

対してビデオの圧縮形式にはかなり切実な問題があり、形式そのものの特性や、様々なライセンスが複雑に絡んでいる。今回はこの点を掘り下げて扱う。

RTMP でライブストリーミングに使用することのできるビデオの圧縮形式

現在最新の Flash Player が対応しているビデオの圧縮形式は以下の 3 つのみである。

これらはそれぞれに強い個性がある。世界の中でもとりわけブロードバンドが普及している日本においても数百人から数千人以上といった規模のライブストリーミングを軽々扱えるほどの帯域を用意するのは難しい。用途と帯域に相談して適切なビデオの圧縮形式を選択する必要がある。

Sorenson Spark

別名を Sorenson H.263 という。国際電気通信連合電気通信標準化部門(以下、ITU-T)によって規格化された H.263 のサブセットで、Sorenson Media という企業によって作られた。元の H.263 と大きな差はないようだ。Sorenson Media によって実装された商品としては Sorenson Spark Professional があり、2002 年 3 月 14 日のSorenson Media Announces Sorenson Squeeze for Macromedia Flash MX というプレスリリースにおいて Flash Player 6 に内蔵されるという旨が記載されている。

そもそも H.263 は低解像度や低帯域の環境に向いた圧縮形式でテレビ電話などに活用されていたのだが、最近では YouTube が Flash Video のビデオ圧縮形式に Sorenson Spark を使うようになったことで PC ユーザーにも知られるようになった。テレビ電話での解像度は CIF(352x288)や QCIF(176x144)などが使われているのだが、YouTube では QVGA(320x240)を使用している。

Flash Player にエンコーダーが内蔵された唯一の圧縮形式であり、モダンブラウザを使って手軽にライブストリーミングを実現することができるという最大の利点がある。但し、Ustream.tv などを使用している人はわかると思うが、常に誰もが満足できるような画質とは程遠いと言わざるを得ない。かなり高い画質で圧縮をかけない限りは細かな文字などを読ませるなどといった用途に使用することが難しいため、画質を求める場合には別の形式を使用する必要がある。

On2 VP6 (On2 Technologies)

On2 Technologies が開発したビデオ圧縮形式で、Sorenson Spark に比べると同じビットレートでかなりの画質を実現することができる。On2 Technologies 公式サイトにおける VP6 のページでは Flash Player 8 及び 9 で使用できるとある。

あまりの高ビットレートになると重くなるようだが、近年の PC であれば特に問題なく再生できる。古い環境の例として、Pentieum III 600MHz で 512x384 600kbps の動画を再生するとかなりのコマ落ちが発生した。これは現時点でニコニコ動画の無料ユーザーがアップロードすることのできる最大のビットレートだが、実際にライブストリーミングで使う場合には 1pass でリアルタイム圧縮をかける必要があるため画質はこれよりかなり落ちる。それでも Sorenson Spark よりはかなり改善されるため、環境が許すならば VP6 を利用するのが現時点で最も良い選択であると言える。

但し、Flash Player では再生することしかできず、エンコーダーは内蔵されていないため配信のためには別にソフトウェアを用意する必要がある。

H.264

ITU-T によって規格化されたビデオ圧縮形式である。ワンセグでの動画配信に利用されており、意識はされないがかなり身近な存在であると言える。QuickTime Player ではデフォルトで再生が可能になり、Blu-ray Disc と HD DVD ではサポートするコーデックのひとつとして採用されるなど利用できる場面は増えてきている。

Adobe Labs の Flash Player:9:Update:H.264 というページにおいて Flash Player 9 Update 3(v 9.0.115.0)から H.264 がサポートされる旨が記載され、「the next version of Flash Media Server will support streaming of H.264 content and HE-AAC content - both live and on demand.」とライブストリーミングにおいても H.264 が使用できることが明らかになった。

地上デジタル放送や DVD-Video で採用されている MPEG-2 ビデオの 2 倍以上の圧縮効率を誇るとされている。しかし複雑な仕様によりエンコード・デコード処理に高い負荷がかかり、VP6 に比べかなり重くなっている。不特定多数のユーザーに対して高画質配信を実現しようとする場合には、使用する画面解像度、ビットレートなどにおいて低スペックマシンを使うユーザーに対する考慮をしておいた方がいいだろう。

RTMP ライブストリーミングのパブリッシャー

RTMP では、プロトコル内部でのストリーム送出命令が publish というものであるためか、ストリームを送出するソフトウェアのことをパブリッシャーと呼ぶことが多い。ブロードキャスターと呼ぶこともある。この項では、現在 Flash Player が再生することのできる圧縮形式のビデオストリームを RTMP で送出することが可能なパブリッシャーを紹介する。

Flash Player 内蔵

前述の通り、Flash Player に内蔵された機能では Sorenson Spark にしか対応することができず、あまり高い画質は期待できない。しかし Ustream.tv や Orgoo Video Chat などのような一般ユーザーが何らかの配信を行うことが前提となったサービスにおいては配信するためのハードルを可能な限り低くする必要があるため、ブラウザだけで配信環境が完結するというのはかなりの利点である。

Sorenson Spark のデコードはかなり軽いため、視聴側における問題も少ない。

また Sorenson Spark が Flash Player 6 から実装されているというのも多少のアドバンテージになる。例えば管理者権限を与えられていないために On2 TrueMotion VP6 が実装された Flash Player 8 よりも前のものしか使えないままになっているユーザーというのはいまだにある程度残っているため、そういったユーザーも視聴することが可能になる。Wii に搭載された標準の Flash Player は 7 相当なので、このような組み込み用途で機能の制限された Flash Player の一部からも視聴することが可能になる。

また、RTMP との通信部分が ActionScript によってプログラマブルになっているため、RTMP やよりセキュアな RTMPS(Real Time Messaging Protocol over SSL)による認証などを実現することが可能になっている。

Flash Media Encoder 2

Adobe 公式のパブリッシャーであり、On2 TrueMotion VP6 による配信が可能になっている。残念ながら少々不安定であり、配信の開始や停止の時点で数秒から十数秒のフリーズが発生し、何度も配信と停止を繰り返すようなことをすると完全に復帰しなくなることがある。但し一度配信が始まれば動作は安定しており、長時間の連続配信なら問題は無い。ほぼ間違いなく最も運用実績のあるパブリッシャーである。

おまけ程度の機能として、数値を手入力することでビデオリソースの一部分だけを切り取って配信することが可能である。これは他のソフトウェアを使えば簡単に解決する問題なので、複雑な項目の設定が必要なこのソフトウェアを使うようなユーザーにとってはあまり大きな利点ではない。

Flash Media Encoder 2 において最も注意しなければならないのはライセンスの問題である。Flash Media Encoder 2 のライセンス条文 4.3 General Restrictions. には次のようにある。

When used for streaming the Encoded Content to the Flash Media Server, you may only use the Software to stream Encoded Content to the Flash Media Server. You may not use the Software in any way to create a server, executable, or other program that will steam or deliver data and/or content from a client to a server, from a server to another server, or from a server to a client.

この縛りによって、Flash Media Encoder 2 が配信を行うネットワークは Flash Media Server シリーズのみで構成しなければならなくなっている。

特に有用であろう特徴として、公式のプラグインによって配信時の認証機能を追加することができるようになっている。認証においてどのような通信を行っているのか、パケットキャプチャーなどを行わない限り詳細まではわからない。Flash Media Server シリーズ縛りであるからこそ可能な囲い込みによるの機能と言える。

サーバー周りは先日値下げ合戦が行われ、新しく現れた Flash Media Server 3 においても大幅な価格やラインナップの変更があったものの、やはり RTMP によるライブストリーミングを実現可能なサーバーソフトウェア製品の中では Flash Media Server が最も高い。Flash Media Encoder 2 自体が無料であるとしても、やはりサーバー側にかける金額を考えれば、サポートが余程重要であると判断できない限りは他の選択肢を探った方がいいだろう。

Flix Live (On2 Technologies)

On2 VP6 を作った On2 Technologies 自身による、Flash Video 用ソリューションラインナップのライブ版である。動作は Flash Media Encoder 2 よりも安定しており、インターフェイスも簡潔かつ明瞭で、主なパブリッシャーの中では現時点で最も質が高いと言える。

価格は年間 999 ドルで、Flash Media Server シリーズのみといった構成を回避したい場合にはこれを選択するのが最も手早く安い。flix-j.com という日本代理店サイトの Flix ラインナップの中に Flix Live は含まれていないので、On2 Technologies と直接交渉するか代理店に Flix Live を購入できるよう交渉する必要がある。

GUI 上からは一見、あらかじめ用意されたいくつかの設定でしか配信できないように見えるが、これはインストールディレクトリに存在する XML ファイルを直接編集することで詳細な配信設定が可能になる。Flash Media Encoder 2 の設定がところどころ簡略化されているのに比べれば詳細な設定が可能だし、一度書いてしまえばあとはプルダウンメニューから選択するだけで済む。

RTMP 上における最低限のやりとりだけで配信することしかできないという最大の問題があり、プログラマブルな部分が一切存在しない。つまり誰でも無条件に受け入れる状態の RTMP サーバーに対してしか配信を行うことができない。認証機能など極一部に関しては Flix SDK for Live で一部解決することができる。但しこれに実装されている認証機能は Flash Media Server 2 との通信でのみ使えるものであり、Flash Media Server シリーズを購入するのならば Flash Media Encoder 2 を無料で使うことができるため Flix を使う必要性は激減する。

ニコニコ生放送では、パブリッシュするネットワークとサーバーのあるネットワークを VPN で繋ぐことによって、Flix Live を使った認証無しのセキュアな配信を実現している。但しこれには、配信先において独立した固定 IP アドレスが確保できないなどといった問題が発生する可能性があり、ハードルは高い。

ちなみに、少なくとも Wowza Media Server で確認した限りでは、誰の配信でも受け入れる状態だと、一度配信が開始された後で他の誰かが同じストリーム名で配信を乗っ取ることができる。何らかの保護機構は必須である。

H.264 独自実装

Wowza Media Server は Build number 5368 で H.264 のライブストリーミングに対応したようだが、「H.264/AAC live streaming is not supported in this Preview1. At this time there are no live H.264 encoders that support RTMP.」とあるように現時点ではライブでストリーミングが可能なパブリッシャーが存在しない。

しかし前述のように Adobe Labs が既に Flash Player 側での対応を表明していること、Wowza Media Server でも「現時点ではサポートしていない」と言っているだけであることなどから、ライブストリーミングにおいて H.264 を使っての配信は可能であると思われる。

と書いたところでほんの数日前にドワンゴに技術デモをしにきてくれた株式会社エスグラの森さんが RTMP ライブストリーミングにおける H.264 のビデオストリーム送信に成功しているという記事が出た。RTMP で H.264 をライブストリーミングした実装コードをオープンにすることに躊躇しているようだが、せめて解析結果を Open Source Flash の技術文書に書き足して欲しい。Flash Pleyer 9 Update 3 の英語圏における広まりや日本以外での一般家庭における帯域の細さなどを考えると、ライブストリーミングに関わる最新文書が整うまでには時間がかかる。

総括

手軽さを重視するならば Flash Player 内蔵の Sorenson Spark を使う。画質を重視するならば Flash Media Server に囲い込まれた Flash Media Encoder か、RTMP による認証機能を諦めて Flex Live による On2 VP6 を使う。どうしても H.264 によるビデオストリームを使用したかったり RTMP による配信以外の制御が行いたければ自前で実装するしかない。

現状は各ベンダーの思惑や実装レベルでの技術的背景の不備などといった問題があまりにも多いため、これといった決定打も無く、トレードオフの中で目的に合った選択をしなければならない。

そもそも配信をする際の帯域の問題により実運用レベルでは政治的な要素が伴うため、誰もが手軽に配信を行えるような環境を整えるための社会的圧力が発生しにくい。現時点における現実的な解決策を提案しながらも、Open Source Flash などのようなオープンな団体の活動を含めた今後の傾向を窺う必要がある。