各種操作
トランスコード
EMSにはさまざまな追加機能を提供するソフトウェアエンコーダが同梱されており、LibAVのAVConvエンコーダーが選択されています。AVConvのソースコードはこちらから取得できます。EvoStreamはAVConvの配布に関してGPLに完全に準拠しています。
EMSは任意のソフトウェアエンコーダを使用するように簡単に設定できます。別のソフトウェアエンコーダが必要な場合、統合にはスクリプトの変更のみが必要です。これはオンデマンドで実行できます。
トランスコーディングはビデオやオーディオの圧縮に非常に多くのオプションが絡む複雑なプロセスですが、EMSではプロセス全体を非常に簡単にする transcode
APIコールを提供しています。
トランスコードには膨大なコンピュータリソースを必要とするプロセスで、パフォーマンスに深刻な影響を与えます。一般的な保守的ガイドラインとしては、ひとつのHDストリームの処理にCPUコアひとつが必要です。
設定
ストリームのビットレート変換
トランスコードの一般的な使用例としては、Adaptive StreamingプロトコルやAndroidやiOSデバイス等の小規模クライアントのサポートするためにHDストリームを低ビットレートに「変換」(ダウンスケーリング)する事などが挙げられます。
これを実現するには、オリジナルのHDストリームをEMSに取り込み、以下のようなコマンドで複数の低ビットレートストリームを生成します。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Transcoding successfully started.
audioBitrates:
-- na
-- na
-- na
croppings:
-- na
-- na
-- na
destinations:
-- stream100
-- stream200
-- stream300
dstUriPrefix: -f flv tcp://localhost:6666/
emsTargetStreamName: stream300
fullBinaryPath: C:\EvoStream_171\emsTranscoder.bat
groupName: group1
keepAlive: true
localStreamName:
source: rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4
srcUriPrefix: rtsp://localhost:5544/
targetStreamNames:
-- stream100
-- stream200
-- stream300
videoBitrates:
-- 100k
-- 200k
-- 300k
videoSizes:
-- na
-- na
-- na
上記コマンドはSource1ストリームから3つの新規ストリームを生成します。それぞれstream100のビットレートは100kbps、stream200のビットレートは200kbps、stream300のビットレートは300kbpsです。
作成したストリームは listStreams
コマンドで確認できます。
その後、これらのストリームに(RTMPやRTSP経由で)各々直接アクセスする事ができます。また、HLSグループを生成してiOSデバイス向けのadaptive bitrateストリームを作成する事も可能です。
トランスコードしたストリームからHLSを生成する
異なるコーデックの使用
EMSでは、ストリームはH.264/AACタイプである必要がありますが、ストリームソースがこれ以外の形式の場合はEMS Transcoderを用いてH.264/AACに変換することができます。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Transcoding successfully started.
audioBitrates:
-- 800k
croppings:
-- na
destinations:
-- myTranscodedStream
dstUriPrefix: -f flv tcp://localhost:6666/
emsTargetStreamName: myTranscodedStream
fullBinaryPath: C:\EvoStream_171\emsTranscoder.bat
groupName: group1
keepAlive: true
localStreamName:
source: rtsp://127.0.0.1:5544/myStream
srcUriPrefix: rtsp://localhost:5544/
targetStreamNames:
-- myTranscodedStream
videoBitrates:
-- 5000k
videoSizes:
-- na
上記コマンドはRTSPソースからソースストリームを直接取得し、それをトランスコードして destinationName
としてEMSに渡します。
ビデオコーデックをトランスコードする時は videoBitrates
パラメータを指定する必要があります。また、オーディオコーデックをトランスコードする時は audioBitrates
パラメータを指定する必要があります。オーディオまたはビデオのいずれかをトランスコードする必要がない場合、そのパラメータはスキップされる可能性があります。
ここではソースストリームはビデオビットレート5Mbps、オーディオビットレート800kbpsが想定されています。
ファイルを入出力に使用
入力ストリームを出力ファイルに、或いは入力ファイルを出力ファイルに変更します。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Transcoding successfully started.
audioBitrates:
-- copy
croppings:
-- na
destinations:
-- file://C:\EvoStream\media\transcoded.mp4
dstUriPrefix: -f flv tcp://localhost:6666/
emsTargetStreamName:
fullBinaryPath: C:\EvoStream\emsTranscoder.bat
groupName: group1
keepAlive: false
localStreamName:
source: file://C:\EvoStream\media\bunny.mp4
srcUriPrefix: rtsp://localhost:5544/
targetStreamNames:
-- na
videoBitrates:
-- 100k
videoSizes:
-- na
ビデオオーバーレイ / 透かし(Watermarking)
EMSトランスコーダーはビデオオーバーレイを生成することができます。アルファレイヤー(透明度)のあるPNGファイル、もしくはJPEGファイルを用意する必要があります。画像はビデオと同一か、もしくはそれ以下の解像度(高さと幅)である必要があります。オーバーレイファイルはビデオの左上隅を起点として配置されます。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Transcoding successfully started.
audioBitrates:
-- na
croppings:
-- na
destinations:
-- OverlayedStream
dstUriPrefix: -f flv tcp://localhost:6666/
emsTargetStreamName: OverlayedStream
fullBinaryPath: C:\EvoStream_171\emsTranscoder.bat
groupName: group1
keepAlive: true
localStreamName: myStream
source: stream100
srcUriPrefix: rtsp://localhost:5544/
targetStreamNames:
-- OverlayedStream
videoBitrates:
-- na
videoSizes:
-- na
クロップ(トリミング)
EMS Transcoderはビデオクロッピングに対応しています。ビデオをトリミングして、映像の一部だけに焦点を当てることが可能です。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Transcoding successfully started.
audioBitrates:
-- na
croppings:
-- 0:0:50:50
destinations:
-- CroppedStream
dstUriPrefix: -f flv tcp://localhost:6666/
emsTargetStreamName: CroppedStream
fullBinaryPath: C:\EvoStream_171\emsTranscoder.bat
groupName: group1
keepAlive: true
localStreamName: myStream
source: myStream
srcUriPrefix: rtsp://localhost:5544/
targetStreamNames:
-- CroppedStream
videoBitrates:
-- na
videoSizes:
-- na
上記のケースでは、ビデオの右上隅から50px*50pxの正方形にビデオがクロップ(トリミング)されます。 croppings
パラメータの書式はhorizontalPosition:verticalPosition:width:heightで表され、horizontalPosition=0が左端ピクセルを、verticalPosition=0が上端ピクセルを表しています。
インバウンドRTSPにTCPを強制する
トランスコードプロセスの停止
トランスコーディングを停止するには removeconfig
APIを実行します。
フォーマット
サンプルAPIコール
JSONレスポンス
Command entered successfully!
Configuration terminated
この場合、group1内の全てのトランスコードプロセスが削除されます。
トランスコードログを有効にする
transcode
コマンドはemsTranscoder.shを呼び出します。
ログはトランスコード問題の根本的な原因を判別する手助けとなります。
1. コメントを削除して transcode
ログを有効にします。
Windows:emsTranscoder.bat
Linux: emsTranscoder.sh
2. EMSコンソールを起動し transcode
コマンドを実行すると、 evo-avconv
コマンドも画面に表示されます。
3. evo-avconv
の実行結果をコピーします。
サンプルログ
4. コピーした evo-avconv
の実行結果を新規コンソールにペーストします( evo-avconv
が実行可能なファイル内で探します)。
サンプルログ
C:\EvoStream>evo-avconv -y -i rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4 -b:v 10
0K -c:v libx264 -c:a copy -metadata streamName=testTransDest rtmp://192.168.2.35/live/testTransDest
avconv version 11.3, Copyright (c) 2000-2014 the Libav developers
built on Jul 15 2015 10:16:52 with gcc 4.8 (GCC)
[flv @ 0000000000302da0] max_analyze_duration 5000000 reached
Input #0, flv, from 'rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4':
Metadata:
moovPosition : 40
avcprofile : 66
avclevel : 30
aacaot : 2
videoframerate : 24
audiochannels : 2
©too : Lavf52.84.0
length : 2293760
timescale : 44100
sampletype : mp4a
Duration: 00:00:52.20, start: 0.000000, bitrate: N/A
Stream #0.0: Video: h264 (Constrained Baseline), yuv420p, 720x306 [PAR 254:255 DAR 2032:867], 24
fps, 1k tbn, 48 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, fltp
Unable to find a suitable output format for 'rtmp://192.168.2.35/live/testTransDest'