今回は、Flash Media Live Encoder を使ってライブ配信を試してみたい。
【関連記事】
※動画ストリーミング配信には Flash Player 10.1 以上が必要なので、もしインストールしていなければインストールしておく。
1. Flash Media Live Encoderのインストール
まず、AdobeのホームページからFlash Media Live Encoderを探し、ダウンロード&インストールする。必要であれば、認証アドオンもダウンロード&インストールする (今回は行わなかった)。
※キャプチャー画像は Mac OS X のものだが、Windows でも手順は同じ。
2. Flash Media Encoderの設定
以下の設定手順は HTTP 経由でシングルストリームのライブ配信する場合のもの。Flash Media Server のホスト名は test.jp とする。
- Flash Media Live Encoder は閉じておく。
- Flash Media Live Encoder の設定ファイル
(インストール先)\conf\config.xml
をテキストエディタで開き、タグ
//flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable
をtrue
にして保存する。 - Flash Media Live Encoder を起動する。
- "Encoding Options" パネルの [Preset] プルダウンから "High Bandwidth (800 Kbps) - H.264" を選ぶ。
- [Audio]-[Format] は "AAC" を選ぶ。
※と、Adobe のサイトには書かれているが、"Mp3" でもうまくいくみたい。
Windows 版で "AAC" 使うには別途エンコーダー (有料) が必要。 - [Video]-[Format] の右にあるレンチアイコンをクリックして "Advanced Encoder Settings" ダイアログを開き、[Keyframe Frequency] を "4 seconds" とする (この値は、
applications/livepkgr/events/_definst_/liveevent/Event.xml
の <FragmentDuration> の値 (デフォルト値 4000 ミリ秒) の整数倍にする)。 - [Stream to Flash Media Server]-[FMS URL] に "rtmp://test.jp/livepkgr" と入力する。
- [Stream to Flash Media Server]-[Stream] に "livestream?adbe-record-mode=record&adbe-live-event=liveevent" と入力する。
- [Stream to Flash Media Server]-[Save to File] のチェックをはずす。
- [Start] ボタンをクリックする。
3. 埋め込み用コードの作成
Flash Media Server のインストール先にある samples/videoPlayer ディレクトリを Web 経由で見られるところにコピーする (ここではhttp://test.jp/fms/samples/videoPlayer
とする)。そして、Web ブラウザーで
http://test.jp/fms/samples/videoPlayer/videoplayer.html
にアクセスする。
動画エリアの下の "STREAM YOUR OWN VIDEO" の [STREAM URL] に
http://test.jp:8134/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
と入力し、[LIVE] にチェックを入れて [PLAY STREAM] ボタンをクリックする。
正常に設定できていれば動画エリアにライブ映像が表示される。
表示されない場合は、[STREAM URL] に入力した URL を直接 Web ブラウザーで表示させてみる。
正しければ、XML 形式のマニフェストファイルが表示されるはずである。
ページ下部に埋め込み用コードが表示されるので、それをコピーして任意のページにペーストすれば、ライブ配信ページが作れる。
コードを見ればわかるとおり、
swfs/StrobeMediaPlayback.swf
が必要なので、このファイルを適当な場所に設置して使う。
なお、サーバーが Development Server の場合は映像は30分で切断される (10分という記述を見かけたが、試したら30分だった)。
4. トラブルシューティング
4.1. Flash Media Playback Setup でエラーとなる
上記の例では Flash Media Server 同梱のサンプルコードを使って埋め込みコードを生成したが、Flash Media Playback Setup ( http://www.osmf.org/configurator/fmp/ ) も利用できる。
Flash Media Playback Setup で "We are having problems with..." というエラーが出る場合は、クロスドメインポリシーを疑ってみる必要がある。
【参考】
さわいじり
「クロスドメインポリシーファイル(crossdomain.xml)設定について」
クロスドメインポリシーは、Flash Media Server の (インストール先)/webroot/crossdomain.xml
というファイルで設定される (デフォルト設定の場合)。
このファイルで、www.osmf.org からのアクセスが許可されているか確認する。
もしファイル自体が存在しなければ自前で作成する。
内容は以下のようなもの。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
上記の例では、あらゆるドメインからのアクセスを許可している。
4.2. Buffering... と表示されたまま映像が表示されない
原因はいろいろあるらしいが、一度ハマると解決しにくいのが以下の例。
Flash Media Live Encoder の [Stream] の 値を livestream?adbe-live-event=liveevent
(これが Adobe の解説に書かれている設定値) としている場合、配信時間が 30 分を超えると Flash Media Server のログ (logs/core.00.log) に:
Failed to record livestream (disk quota exceeded).
というエラーが出て動画配信ができなくなる。
こうなった場合は、
applications/livepkgr/streams/_definst_/livestream
内のファイルをすべて削除してサーバーを再起動すれば、また配信できるようになる。
[Stream] の値を "livestream?adbe-record-mode=record&adbe-live-event=liveevent" に変更して配信しなおしても解消する。
さわいじり
「クロスドメインポリシーファイル(crossdomain.xml)設定について」
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>