2014年01月30日

さくらVPSにAdobe Media Serverを入れて、ストリーミングしてみた結果

どうもみなさんこんにちは、ちっぷすです。


今日は、AdobeMediaServerをさくらVPSに入れてつかった感想を話します。

構築覚書はこちら
Adobe Media ServerをさくらVPSのCentOSにインストールして、HTTPStreamingのマルチビットレート配信してみた。

AdobeMediaServer環境を作って、ウェブサイトに配信ページを作ってみた。



では、本題です。わたしが使ったのは「さくらのVPS(v3) 1G」




↑これですね。

ストリーミング環境概念図


gainenzu.JPG

エンコードマシン1台【高スペック】から、2台のサーバーに送ります。
@高画質用サーバ(東京リージョン)
A低画質用サーバ(大阪リージョン)

それぞれのチャンネルを視聴サイトに埋め込み。
視聴用サイトは、PC,スマホ対応(それぞれのページを用意し、.htaccessで自動遷移)
視聴用サイトは、さくらレンタルサーバを利用
さくらスタンダード

こんな感じです。

マルチビットレートは、調整が必要


もともとマルチビットレートの機能があるので、
一つのサーバーに3種のストリームを送ろうとしました。

テスト時、1台のパソコンから40セッションほど貼って視聴したときは問題がなかったのですが、
現場でのプレ本番で接続してみると、10セッションほどでとぎれとぎれになって、視聴困難なレベルまで途切れが発生して、一時中断。
回線帯域に問題はなく、ディスクのIOが高負荷になっていたので、そのためだと思われます。
マルチビットレートを使うには、デフォルトのチューニングではダメでした。


1種類1ストリーミングが理想ですね。


AMSのマルチビットレートを安定化するためには、
どこをどういじればどうなるかは要研究しないとなんで、あとで置いておきました。

急遽東京リージョンのVPSをストリーミングサーバ化して、
@東京リージョンは高画質
A大阪リージョンは低画質
としました。
視聴側サイトに「高画質」「低画質」のページを用意しました。
視聴さんたちにはちょっと手間ですが、しかたないなと。


高画質は50接続、低画質は70接続までOKただし、クセあり


動画の視聴は、毎回100アクセスくらいあるのですが、
高画質(1.5Mbps)は50接続を超えると途切れが発生しやすくなり、
低画質(300kbps)は70を越えると途切れやすくなりました。

回線帯域幅は20-30M/100Mだったので問題なさそうですが、
途切れる原因は、ディスクスワップの大量発生と思われます。

SSDサービスにしたら、この辺は解決できそうですけどね。。。。
予算が組めたらぜひやってみたい。
さくらのSSD





そんなこんなで、概念図のような形に落ち着きました。

しかし、合計で120前後しか視聴できないのはちょっとなーーーー。と。

あ、ちなみに、視聴用サイトをBasic認証で制限しているので、完全クローズドな配信環境システムです。

日本で動画配信をするとなれば、ニコ生や、YouTubeLive・USTREAMなど、外部のサービスを利用するのが一般的のようですが、
海外では、ちょっとした著名人は自分専用のストリーミング環境を構築して、そこで動画配信を怒っていると聞きました。
日本と海外で事情が違うんですね。
僕としては、画質384kbpsの制限がかかった中でいかに高画質に配信するかを研究しているニコ生らへんをみて、狭い土地にいかに効率よく活用するかずっと考えてきた日本ならではのコンパクト・効率化にたいする執着心が見れて、面白いです。

それでは今回はこの辺で。
でわでわ
posted by チップスLOVE at 17:40| Comment(0) | AdobeMediaServer | このブログの読者になる | 更新情報をチェックする

2013年11月06日

AdobeMediaServer環境を作って、ウェブサイトに配信ページを作ってみた。

前回インストールまでをやった続きです。

前回「Adobe Media ServerをさくらVPSのCentOSにインストールして、HTTPStreamingのマルチビットレート配信してみた。

公開の仕方


AdobeMediaServerにもApacheという鉄板のWEBサーバーソフトがついているので、AdobeMediaServerをインストールしたサーバーでそのまま公開することも可能です。

しかし、他のウェブサーバを使っても良いです。
html5に対応しているので、videoタグを使えば、iPhone,iPad,一部のAndroidへ配信可能。
しかし一部Android端末は、HTML5に対応していないため、HLS配信を開始できないことがある。
なので、直接リンクを張り付けるのが良さそうです。

HDSについては、AMD付属のswfを使って配信します。
AdobeMediaServerの
webroot/swfs/StrobeMediaPlayback.swf をつかいます。

StrobeMediaPlaybackの設置コード



<p>
<object width="320" height="180">
 <param name="movie" value="http://サーバーのIP/swfs/StrobeMediaPlayback.swf"></param>
 <param name="flashvars" value="src=http%3A%2F%2FサーバーのIP%2Flivepkgr%2Fliveevent_single.f4m"></param>
 <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
 <param name="wmode" value="direct"></param>
 <embed src="http://サーバーのIP/swfs/StrobeMediaPlayback.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="direct" width="320" height="180" flashvars="src=http%3A%2F%サーバーのIP%2Flivepkgr%2Fliveevent_single.f4m"></embed>
</object>
</p>


ウェブサイトにBasic認証を掛ければ、保護された視聴環境にすることもできます。
BasicAuth(PHP環境が必要)


配信設定(STREAM名)


ストリーム名はいろいろやった結果、以下に落ち着きました。

マルチビットレートの場合
livestream%i?adbe-record-mode=record&adbe-live-event=liveevent&adbe-audio-stream-name=livestream1_audio_only&adbe-audio-stream-src=livestream1


シングルビットレートの場合
livestream?adbe-record-mode=record&adbe-live-event=liveevent&adbe-audio-stream-name=livestream_audio_only&adbe-audio-stream-src=livestream



核心である配信が不安定なので、実用にはもう少し研究が必要です。
LiveShell,買っちゃおうかなぁ〜…。
posted by チップスLOVE at 16:46| Comment(0) | AdobeMediaServer | このブログの読者になる | 更新情報をチェックする

2013年11月05日

Adobe Media ServerをさくらVPSのCentOSにインストールして、HTTPStreamingのマルチビットレート配信してみた。

どうもみなさんこんにちは、ちっぷすです。

最近訳あってストリーミングサーバーの検証を始めるようになりました。

覚書です。

Adobe Media Serverとは


Adobeが開発したストリーミングサーバーで、
FlashMediaServer4.5の後継としてAdobeMediaServer5がリリースされました。
rtmp配信だけではなく、
マルチデバイスに対応していて、iPhoneやAndroidが対応しているHLS配信、
既存のFlash対応のWindows,Mac,Androidでも利用可能です。

さくらVPSとは


サーバーを自前で用意するのは大変です。
サーバーだけで10万円はかかるし、回線も毎月4000〜5000円。
ハードウェアの減価償却に対する対策も必要です。電気代もかかるし・・・
かといって、レンタルサーバーは、WEBスペースの提供だけだったり、
追加であったとしても、PHPやMySQLに対応してWordpressなどのブログシステムを利用できるくらいです。
AdobeMediaServerは、OSにインストールするソフトウェアなので、
一般的なレンタルサーバーはストリーミングサーバーに向きません。
ここで近年登場したのがさくらVPS。
これは、サーバーの本体(仮想環境)と、ネットワーク100Mbps,バックボーン1Gbpsの環境を
毎月1000円でレンタルできます。
OSのインストールからこちらで好き勝手にできます。
OSも、WindowsServerなどを利用するときはOS代がかかりますが
CentOSなどLinuxベースの無料OSでも十分使えるので、わざわざOSを買わなくていいです。

サーバー本体、回線、電気代、全部込々で年間12000円なら、安いですよね。

さくらVPSを契約する


試用でもいいですが、帯域幅が2Mbpsに制限されるんで、
ストリーミングサーバとしては試用にすらなりません。
契約しましょう。一番安いのでいいです。
リージョンは、東京・大阪・石狩(北海道)の3か所から自由に選べるので、
自宅から一番近いリージョンを選びましょう。





AdobeMediaServerをインストール



インストールするときは、こちらのサイトが役立ちました。どうもありがとうございます。
賢者の漬物石さん

AdobeMediaServerの日本語説明書はまだ発行されていません。
しかし、基本的にFlashMediaServer4.5と同じで、違いはストリームの保護関連だけなので、
ProtectedHDS,ProtectedHLSを使わない限り、FMA4.5の説明書で充分です。

デベロッパーズガイドに関しては、日本の企業が訳してくれたものがあるので、そちらを参照すると良いです。
株式会社サムライズさんが訳したAMS5.03取説

配信イベントを作る


基本的にはlivepkgrというアプリケーションが用意されているのでこれを使えばいいですが、
1台のストリーミングサーバーで2種類以上のストリームを行いたい場合は、アプリケーションを複数用意する必要があります。
/opt/adobe/ams/apllication/livepkgr
このlivepkgrフォルダをコピーするだけ。

コマンドは、

# su ams
# mkdir /opt/adobe/ams/applications/testpkgr
# cp -R /opt/adobe/ams/applications/livepkgr/* /opt/adobe/ams/applications/testpkgr/

です。

マルチビットレート対応


マルチビットレートのmanifestファイルを作り、webroot化へ配置
(liveevent.m3u8と、liveevent.f4mを作る)

コマンド
vi /opt/adobe/ams/webroot/liveevent.m3u8
↓↓中身↓↓

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=250000
http://サーバーのIPorドメイン名/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000
http://サーバーのIPorドメイン名/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000
http://サーバーのIPorドメイン名/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8

↑↑ここまで↑↑

コマンド
vi /opt/adobe/ams/webroot/liveevent.f4m
↓↓中身↓↓

<manifest xmlns="http://ns.adobe.com/f4m/2.0">
<baseURL>http://サーバーのIPorドメイン名/hds-live/livepkgr/_definst_/liveevent</baseURL>
<dvrInfo windowDuration="10800"/>
<media href="livestream1.f4m" bitrate="250"/>
<media href="livestream2.f4m" bitrate="500"/>
<media href="livestream3.f4m" bitrate="750"/>
</manifest>

↑↑ここまで↑↑



シーク時間を長くする
サーバーはデフォルト設定で3時間分のコンテンツをキャッシュする。
それより短い時間内であればシークできるように設定が可能。
ここでは、3時間分シークが可能な設定にする。

HDS
liveevent.f4mに以下の記述を実施する

<dvrInfo windowDuration="10800"/>

10800秒間シーク可能という意味です。
(※マルチビットレートに対応する項目でマニフェストファイル作成時に既に定義してあるので、ここでの作業しなくても良い。)

HLS
サーバーにログインし、Event.xmlに記述する必要がある。
コマンド
vi applications/livepkgr/events/_definst_/liveevent/Event.xml
↓↓中身↓↓

<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>16000</SegmentDuration>
<DiskManagementDuration>3</DiskManagementDuration>
</Recording>
<HLS>
<MediaFileDuration>8000</MediaFileDuration>
<SlidingWindowLength>1350</SlidingWindowLength>
</HLS>
</Event>

↑↑ここまで↑↑

その他、注意事項



liveevent.m3u8と、liveevent.f4mは、どこにおいても良い、とありますが、他のサーバーにあるとStrobePlaybackがうまく機能しませんでした。swfファイルは同サーバー内のものじゃないとだめです。

AndroidのHLS配信について

Android4.0以降はHLSに対応と記載していますが、実装は各メーカーに任されていて、
実装の仕方が端末ごとによってばらばら。
ライブをシークできない(最初から聞き直せない)などの不具合がありました。
Android端末を利用するときは、Flashplayerをダウンロードして、HDS配信を聞くのが
現時点では無難な対策ですね。
ただし、Android向けのFlashplayerはサポート終了、開発終了しているので、
セキュリティホールが発見されても、重大なもの出ない限り更新されないです。
(重大であっても放置される可能性があります)
なので、ずーっとは使えないでしょうね。
Android端末のHLS実装方法を早く規格化してほしいですね。。。
ちなみに、HLS配信、iOSならすべてうまく再生できます。
(まぁHLS=AppleHTTPLiveStreamingと、Apple社が開発したストリーミング方法なので、まぁ当たり前ですよね。)

なんとなく不安定なマルチビットレート


マルチビットレートとは、回線の速さに応じてビットレートを自動調整してくれる便利な機能で、
Youtube,Hulu,U-NEXT等、動画オンデマンド配信にサービスにマルチビットレートが活用されています。
しかし、niconico動画,USTREAM,YoutubeLive等のライブ配信サービスは、マルチビットレートには対応していません。


ちっぷすとしては、マルチビットレートのライブ配信がいいなーとおもって、今回色々と試してみました。
@FMLEによるPC1台からのマルチビットレートのHDSとHLS配信
AXSplitによるPC3台からのマルチビットレートのHDSとHLS配信
BLiveshellからのシングルビットレート配信

結局@Aは、数回線つながるだけでバッファが多くなったり、音、映像が飛んだりして使い物になりませんでした。最高ビットレートでも700kpbsとかなんですけどね…。
LiveshellはRTMP配信の専用機なだけあってとても安定していましたね。
200kpbsでも十分高画質でした。400kbpsにすれば、さらに良い結果が得られると思います。

LiveShellってなんぞ?
ここで買うと高いので、ここで仕様を確認したらamazonが安いっす
LiveShellがいくらで買えるか見る

結論は、マルチビットレートよりも、Liveshellで、高画質低ビットレートのチューニングをする
という方が良さそうです。これからその作業ですね〜〜♪

続きは、ウェブサイトにこのストリーミングを公開する覚書です。

次回「AdobeMediaServer環境を作って、ウェブサイトに配信ページを作ってみた。





posted by チップスLOVE at 00:00| Comment(0) | AdobeMediaServer | このブログの読者になる | 更新情報をチェックする