その他
プロトコルサポート
ここではEvoStream Media serverの機能の詳細について説明します。以下、「インバウンド」や「アウトバウンド」といった方向性に関する言葉が出てくる際は、常にEMSの観点からのものである事に注意してください。「インバウンド」とは入ってくるストリームを指し、「アウトバウンド」はEMSから外に出ていくストリームを意味します。
Real Time Messaging Protocol(RTMP)
EMSはRTMPプロトコルと完全な互換性があります。これはEMSがAdobe Flash Media Live Encoder(FMLE)、Wirecast、Flash Applet、その他多くのソースからストリームを受信できることを意味します。また、EMSからのストリームはFlowPlayer、JWPlayer、VLCといったAdobe-Airベースのクライアントで再生可能です。RTMPを使用すると、Windows、Mac OSX、Linux等のFlash対応Webブラウザストリーム受信できる事となります。
RTMPの取り込み
EMSがRTMPをストリームソースとして使用できる方法のひとつに、ランタイムAPIを使用してソースからストリームを取得する方法があります。
pullstreamコマンドの例)
このコマンドは192.168.1.5のサーバーから MyTestStream
を取得し、ローカルストリーム名を TestStream
とするようEMSに命令しています。
ローカルストリーム名の詳細についてはpullStream APIをご確認ください。
RTMPストリームをリクエストする一般的なURI書式
アウトバウンドRTMP(ライブ/VOD)
RTMP経由で任意のソースストリームを再生することができます。大半の場合はFlashベースのプレーヤーソフトが使用されます。
EMSからRTMPストリームをリクエストするには、以下のようにフォーマットされたURIを使用する必要があります。
URIの例)
EMSは他のサーバーや他の宛先へ向けてストリームをpushすることもできます。
これには pushStream
ランタイムAPIが使用されます。
pushStream APIの例)
RTMPT
EMSはHTTP経由のRTMPをサポートしています。URIやアドレスで"RTMP"となる箇所を"RTMPT"に変更する事により、RTMPTはRTMPと全く同様に利用できます。
EMSがRTMPTクライアントからのリクエストを受け付けるようにするには config/config.lua
ファイルに以下のようなAcceptor(listner)を作成する必要があります。
ip="0.0.0.0",
port=8081,
protocol="inboundRtmpt"
},
RTMPS
EMSはSSLで保護されたRTMPをサポートしています。URIやアドレスで"RTMP"となる箇所を"RTMPS"に変更する事により、RTMPSはRTMPと全く同様に利用できます。RTMPSストリームを配信するには証明書とキーの作成と指定もしなければなりません。
OpenSSL(.crt)などのライブラリとそれに対応するパブリックキーファイル(.pem)を使用して、署名付き証明書ファイルを作成する必要があります。また、 config/config.lua
ファイルに以下のようなAcceptor(listner)を作成する必要があります。
ip="0.0.0.0",
port=8082,
protocol="inboundRtmps",
sslKey="server.key",
sslCert="server.crt"
},
上記の例ではsslKeyとsslCertへのパスはランタイムディレクトリからの相対パス表記ですが、これらのファイルを指定するときは絶対パスの方が良いでしょう。
この設定は、これらのファイルを配信する(クライアントからのRTMPSストリームリクエストを受ける)時のみ必要となります。
これらのキーはストリームをpushもしくはpullする際には使用されません(外部サーバーが独自のキーを使用して認証をおこないます)。
RTMPインジェストポイント
インジェストポイントがアクティブな場合、EMSにpushされるストリームは特定のターゲットストリーム名を持っている必要があります。これは信頼されるパートナーからのEMSサーバーへのストリームのpushを容易にします。
インジェストポイントはprivateStreamNameとpublicStreamNameの2つの関連する値を指定することにより機能します。privateStreamNameとpublicStreamNameはいずれもEMSインスタンスごとにユニークな値である必要があります。RTMPストリームがEMSにプッシュされる際、RTMPストリーム内に定義されたターゲットストリーム名は、定義されたprivateStreamNameのいずれかと一致しなければなりません。一致するとストリームはEMSにより受信されます。また、関連するpublicStreamNameを参照してEMSからこのストリームにアクセスする事ができます。
インジェストポイントは config.lua
ファイル内の hasIngestPoints
パラメータを"true"に変更することで有効化します。
インジェストポイントの追加や削除をおこなうAPI関数のフルセットがあります。
・createIngestPoint
・removeIngestPoint
・listIngestPoints
詳しくはAPIガイドをご確認ください。
インジェストポイントはconfig/ingestPoints.xmlファイルに保存されます。
・ingstpoints.xml
Real Time Streaming Protocol(RTSP)
RTSPプロトコルを使用すると、ネイティブのAndroidメディアプレーヤーを含む様々なプレーヤーやサーバーが使用できます。また、RTSPはストリームソースとしてもアウトバウンドストリームプロトコルとしても使用できます。
RTSPにはいくつかのバリエーションがある為、プロトコルそのものについて多少の知識は必要となります。
RTSPそのものはネゴシエーションプロトコルで、ビデオとオーディオデータの転送を扱うための接続を設定し調整をおこないます。通常、RTSPトランザクションではオーディオ、ビデオ、そしてオーディオストリームとビデオストリームを同期するための2つのReal Time Control Protocol(RTCP)接続、計4つの追加チャンネルが作成されます。これは一般的にRTSPストリームが5つの別々の接続/ストリームを持っていることを意味します。
この他、オーディオ及びビデオストリームはReal-time Transfer Protocol(RTP)もしくはMPEG Transport Stream(MPEG-TS)の2つの異なるメカニズム経由で転送する事が可能です。EMSはRTSP over RTP/MPEG-TSのどちらにも対応しておりRTCPチャンネルの有無に関わらずTSPの全ての組み合わせをサポートします。
通常RTCPチャンネルはRTSPストリームに含まれていますが、必須コンポーネントではありません。EMSでもこれらを必須とはしませんが、EMSではRTCPチャンネルを検出しようとしている間に新規RTSPストリームが導入されると、一定時間待機します。この間、RTSPストリームのすべてのパケットはdropされます。待機時間は config.lua
の rtcpDetectionInterval
パラメータを変更する事によって調整が可能です。
RTSPの取り込み
EMSがRTSPをストリームソースとして使用できる方法のひとつに、ランタイムAPIを使用してソースからストリームを取得する方法があります。
pullstreamコマンドの例)
このコマンドは192.168.1.5のサーバーから MyTestStream
を取得し、ローカルストリーム名を TestStream
とするようEMSに命令しています。
ローカルストリーム名の詳細についてはpullStream APIをご確認ください。
RTSPストリームをリクエストする一般的なURI書式
HTTPプロキシ経由でRTSPストリームを取得する場合の pullstream
コマンドは以下のようになります。
HTTP経由でRTSPストリームを取得する場合は httpProxy
パラメータを利用する事ができます。
・
httpProxy=self
パラメータはプロキシが存在しないことを意味し、指定したURIからHTTP経由で直接ストリームを取得します。・EMSにRTSPストリームをpushすることもできます。EMSはポート5544でRTSPストリームを受けています(デフォルトRTSPポート554ではありません)。そのため、RTSPストリームをEMSにpushする場合はポート5544を指定する必要があります。
ポートは
config.lua
ファイルを編集することによって変更が可能です。・EMSにストリームをプッシュする場合に認証と必要とするよう設定できます。認証が有効になっている場合は、pushされたストリームと共に認証の詳細を提供するか、EMSがストリームを受け入れる前にEMSの認証を無効にする必要があります。
詳しくはセキュリティと認証をご確認ください。
アウトバウンドRTSP(ライブ/VOD)
RTSP経由で任意のソースストリームを再生することができますよく使われるRTSPプレーヤーにはVLC、Android Devices、Quicktime等があります。
EMSからRTMPストリームをリクエストするには、以下のようにフォーマットされたURIを使用する必要があります。
RTSPリクエストのサンプル
ライブRTSP/RTPストリーム
ライブRTSP/MPEG-TSストリーム
RTSP/RTP経由のVOD MP4ファイル
RTSP/MPEG-TS経由のVOD MP4ファイル
VODリクエストでは、ファイル名にはメディアフォルダからの相対パスも含めることができます。
RTSP VOD再生ではMP4ファイルのみ使用できます。TSファイルとFLVファイルは、現時点ではソースとして使用できません。
また、EMSは他のサーバーや他の宛先へ向けてストリームをpushすることもできます。
これには pushStream
ランタイムAPIが使用されます。
pushStream APIの例)
MPEG Transport Stream(MPEG-TS)
EMSではUDPとTCPの両方においてMPEG2 Transport Streamを完全にサポートしています。
UDP MPEG-TSストリームはユニキャスト・ブロードキャスト・マルチキャストをおこなう事が可能です。UDPマルチキャストストリームを受信するには dmpegtsudp://
プロトコルインジケータ("d"はdeep-parseを意味します)を使用して pullStream
コマンドを実行する必要があります。
TCP MPEG-TSストリームを取得するには上記のコマンドの"udp"を"tcp"に書き換えてください。
MPEG-TS TCPストリームはサーバーにpushする事も可能ですが、事前に config.lua
で"acceptor"を作成し、どのポートでlistenするかを設定しておく必要があります。
{
ip="0.0.0.0",
port=9998,
protocol="inboundTcpTs"
},
{
ip="0.0.0.0",
port=9999,
protocol="inboundUdpTs"
},
上記のacceptor設定のいずれに対しても、"localstreamname"変数を定義してacceptorにpushするストリームの名前を設定する事が可能です。これにより、acceptorは単一のインバウンドストリームに制限されます(TCP acceptorは必要に応じて複数の受け入れが可能です)が、既知のストリーム名を作成できるという利点があります。
たとえば、以下の設定ではMPEG-TSストリームがTCP経由でポート9998にpushされた場合、"test1"という名前でストリームが生成されます。
config.lua
ファイルを変更した後、変更を適用するにはEMSを再起動する必要があります。
HTML5 Web Sockets
HTML5 Web Socketテクノロジーは、従来のようにサーバーがクライアントにデータを送信するためにクライアント側からリクエストを送り、その後サーバーがレスポンスを返すというHTTPのリクエスト/レスポンスモデルではなく、Webブラウザとサーバとの間のソケット接続を提供する技術です。
HTTPは多大なオーバーヘッドを被るので、低遅延のアプリケーションにとっては理想的ではありません。
Web Socketを使用するとクライアント(webブラウザ)とサーバー間での途切れがない接続を確立され、双方どちらからいつでもデータの送信を開始できるため、クライアント側からリクエストを始めなければならないという制限がありません。これにより、より「低レイテンシー」での接続と、より「リアルタイム」でのデータ配信が可能となります。
EMSはこのテクノロジーを利用して以下の機能を実現しています。
- メタデータアウトバウンドプッシュ:ブラウザにメタデータを転送
- メタデータインジェスト:受信メタデータの受け入れ
- FMP4プレーヤー:フラグメントMP4(FMP4)ストリームを配信するacceptor
詳しくはこちら
プロトコル対応プレーヤー
以下にEvoStream 2.0がサポートするプロトコルと各プレーヤーとの互換性を示します。