印刷する

その他

プロトコルサポート

ここでは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コマンドの例)

pullstream uri=rtmp://192.168.1.5/live/MyTestStream localStreamName=TestStream

このコマンドは192.168.1.5のサーバーから MyTestStream を取得し、ローカルストリーム名を TestStream とするようEMSに命令しています。
ローカルストリーム名の詳細についてはpullStream APIをご確認ください。

RTMPストリームをリクエストする一般的なURI書式

rtmp://[username[:password]@]IP[:port]/<appName>/<localStreamName>
アウトバウンドRTMP(ライブ/VOD)

RTMP経由で任意のソースストリームを再生することができます。大半の場合はFlashベースのプレーヤーソフトが使用されます。
EMSからRTMPストリームをリクエストするには、以下のようにフォーマットされたURIを使用する必要があります。

rtmp://[username[:password]@]IP[:port]/<live/vod>/<localStreamName>

URIの例)

rtmp://192.168.1.5/live/MyTestStream

EMSは他のサーバーや他の宛先へ向けてストリームをpushすることもできます。
これには pushStream ランタイムAPIが使用されます。

pushStream APIの例)

pushStream uri=rtmp://192.168.1.5/live/ localStreamName=MyTestStream targetStreamName=PushedStreamName
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を容易にします。
インジェストポイントはprivateStreamNamepublicStreamNameの2つの関連する値を指定することにより機能します。privateStreamNamepublicStreamNameはいずれもEMSインスタンスごとにユニークな値である必要があります。RTMPストリームがEMSにプッシュされる際、RTMPストリーム内に定義されたターゲットストリーム名は、定義されたprivateStreamNameのいずれかと一致しなければなりません。一致するとストリームはEMSにより受信されます。また、関連するpublicStreamNameを参照してEMSからこのストリームにアクセスする事ができます。

インジェストポイントは config.lua ファイル内の hasIngestPoints パラメータを"true"に変更することで有効化します。

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コマンドの例)

pullstream uri=rtsp://192.168.1.5/MyTestStream localStreamName=TestStream

このコマンドは192.168.1.5のサーバーから MyTestStream を取得し、ローカルストリーム名を TestStream とするようEMSに命令しています。
ローカルストリーム名の詳細についてはpullStream APIをご確認ください。

RTSPストリームをリクエストする一般的なURI書式

rtsp://[username[:password]@]IP[:port]/<stream or sdp file name>

HTTPプロキシ経由でRTSPストリームを取得する場合の pullstream コマンドは以下のようになります。

pullstream uri=rtsp://[username[:password]@]HostName/StreamName httpProxy=IP[:PORT] localStreamName=TestStream

HTTP経由でRTSPストリームを取得する場合は httpProxy パラメータを利用する事ができます。

pullstream uri=rtsp://[username[:password]@]HostName/StreamName httpProxy=self localStreamName=TestStream
アウトバウンドRTSP(ライブ/VOD)

RTSP経由で任意のソースストリームを再生することができますよく使われるRTSPプレーヤーにはVLC、Android Devices、Quicktime等があります。
EMSからRTMPストリームをリクエストするには、以下のようにフォーマットされたURIを使用する必要があります。

rtsp://[username[:password]@]IP[:port]/[ts|vod|vodts]/<LocalStreamName or MP4 file name>

RTSPリクエストのサンプル

ライブRTSP/RTPストリーム

rtsp://192.168.1.5:5544/MyTestStream

ライブRTSP/MPEG-TSストリーム

rtsp://192.168.1.5:5544/ts/MyTestStream

RTSP/RTP経由のVOD MP4ファイル

rtsp://192.168.1.5:5544/vod/MyMP4File.mp4

RTSP/MPEG-TS経由のVOD MP4ファイル

rtsp://192.168.1.5:5544/vodts/MyMP4File.mp4

VODリクエストでは、ファイル名にはメディアフォルダからの相対パスも含めることができます。

rtsp://192.168.1.5:5544/vod/folder1/folder2/MyMP4File.mp4

RTSP VOD再生ではMP4ファイルのみ使用できます。TSファイルとFLVファイルは、現時点ではソースとして使用できません。
また、EMSは他のサーバーや他の宛先へ向けてストリームをpushすることもできます。
これには pushStream ランタイムAPIが使用されます。

pushStream APIの例)

pushStream uri=rtsp://192.168.1.5:5544 localStreamName=MyTestStream targetStreamName=PushedStreamName

MPEG Transport Stream(MPEG-TS)

EMSではUDPとTCPの両方においてMPEG2 Transport Streamを完全にサポートしています。
UDP MPEG-TSストリームはユニキャスト・ブロードキャスト・マルチキャストをおこなう事が可能です。UDPマルチキャストストリームを受信するには dmpegtsudp:// プロトコルインジケータ("d"はdeep-parseを意味します)を使用して pullStream コマンドを実行する必要があります。

pullstream uri=dmpegtsudp://229.0.0.1:5555 localstreamname=TestTSMulticast

TCP MPEG-TSストリームを取得するには上記のコマンドの"udp"を"tcp"に書き換えてください。

pullstream uri=dmpegtstcp://192.168.1.5:5555 localstreamname=TestTSMulticast

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"という名前でストリームが生成されます。

{ ip="0.0.0.0", port=9998, localstreamname="test1",protocol="inboundTcpTs" },

 config.lua ファイルを変更した後、変更を適用するにはEMSを再起動する必要があります。

HTML5 Web Sockets

HTML5 Web Socketテクノロジーは、従来のようにサーバーがクライアントにデータを送信するためにクライアント側からリクエストを送り、その後サーバーがレスポンスを返すというHTTPのリクエスト/レスポンスモデルではなく、Webブラウザとサーバとの間のソケット接続を提供する技術です。
HTTPは多大なオーバーヘッドを被るので、低遅延のアプリケーションにとっては理想的ではありません。

Web Socketを使用するとクライアント(webブラウザ)とサーバー間での途切れがない接続を確立され、双方どちらからいつでもデータの送信を開始できるため、クライアント側からリクエストを始めなければならないという制限がありません。これにより、より「低レイテンシー」での接続と、より「リアルタイム」でのデータ配信が可能となります。

EMSはこのテクノロジーを利用して以下の機能を実現しています。

  • メタデータアウトバウンドプッシュ:ブラウザにメタデータを転送
  • メタデータインジェスト:受信メタデータの受け入れ
  • FMP4プレーヤー:フラグメントMP4(FMP4)ストリームを配信するacceptor

詳しくはこちら

プロトコル対応プレーヤー

以下にEvoStream 2.0がサポートするプロトコルと各プレーヤーとの互換性を示します。