印刷する

各種操作

トランスコード

EMSにはさまざまな追加機能を提供するソフトウェアエンコーダが同梱されており、LibAVのAVConvエンコーダーが選択されています。AVConvのソースコードはこちらから取得できます。EvoStreamはAVConvの配布に関してGPLに完全に準拠しています。
EMSは任意のソフトウェアエンコーダを使用するように簡単に設定できます。別のソフトウェアエンコーダが必要な場合、統合にはスクリプトの変更のみが必要です。これはオンデマンドで実行できます。
トランスコーディングはビデオやオーディオの圧縮に非常に多くのオプションが絡む複雑なプロセスですが、EMSではプロセス全体を非常に簡単にする transcode APIコールを提供しています。

設定

ストリームのビットレート変換

トランスコードの一般的な使用例としては、Adaptive StreamingプロトコルやAndroidやiOSデバイス等の小規模クライアントのサポートするためにHDストリームを低ビットレートに「変換」(ダウンスケーリング)する事などが挙げられます。
これを実現するには、オリジナルのHDストリームをEMSに取り込み、以下のようなコマンドで複数の低ビットレートストリームを生成します。

フォーマット

transcode source=rtmp://<stream_source> groupName=<groupName> videoBitrates=<bitrate> destinations=<destinationName>

サンプルAPIコール

transcode source=rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4 groupName=group1 videoBitrates=100k,200k,300k destinations=stream100,stream200,stream300

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を生成する

createhlsstream localstreamnames=stream100,stream200,stream300 targetfolder=/mywebroot/hls groupname=MyGroup playlisttype=rolling playlistLength=10 chunkLength=20
異なるコーデックの使用

EMSでは、ストリームはH.264/AACタイプである必要がありますが、ストリームソースがこれ以外の形式の場合はEMS Transcoderを用いてH.264/AACに変換することができます。

フォーマット

transcode source=<stream_source>/localStreamName groupName=<groupName> videoBitrates=<bitrate> audioBitrates=<bitrate> destinations=<destinationName>

サンプルAPIコール

transcode source=rtsp://IpOfStreamSource:554/myStream groupName=group1 videoBitrates=5000k audioBitrates=800k destinations=myTranscodedStream

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が想定されています。

ファイルを入出力に使用

入力ストリームを出力ファイルに、或いは入力ファイルを出力ファイルに変更します。

フォーマット

transcode source=file://path_to_sourceFile groupName=group videoBitrates=<bitrate> audioBitrates=<bitrate> destinations=file://path_to_outputFile

サンプルAPIコール

transcode source=file://C:\EvoStream\media\bunny.mp4 groupName=group1 videoBitrates=100k audioBitrates=copy destinations=file://C:\EvoStream\media\transcoded.mp4 keepAlive=0

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ファイルを用意する必要があります。画像はビデオと同一か、もしくはそれ以下の解像度(高さと幅)である必要があります。オーバーレイファイルはビデオの左上隅を起点として配置されます。

フォーマット

transcode source=<localStreamName> groupName=<groupName> overlays0=<path/to/image.ext> destinations=destinationName

サンプルAPIコール

transcode source=myStream groupName=group1 overlays=/path/to/evologo.jpg destinations=OverlayedStream

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はビデオクロッピングに対応しています。ビデオをトリミングして、映像の一部だけに焦点を当てることが可能です。

フォーマット

transcode source=<localStreamName> groupName=<groupName> croppings=<horizontalPosition:verticalPosition:width:height> destinations=destinationName

サンプルAPIコール

transcode source=myStream groupName=group1 croppings=0:0:50:50 destinations=CroppedStream

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を強制する
transcode source=rtmp:///live/streamname groupName=group videoBitrates=copy videoSizes=360x200 $EMS_RTSP_TRANSPORT=tcp

トランスコードプロセスの停止

トランスコーディングを停止するには removeconfig APIを実行します。

フォーマット

removeConfig groupName=<groupName>

サンプルAPIコール

removeConfig groupName=group1

JSONレスポンス

Command entered successfully!
Configuration terminated

この場合、group1内の全てのトランスコードプロセスが削除されます。

トランスコードログを有効にする

 transcode コマンドはemsTranscoder.shを呼び出します。
ログはトランスコード問題の根本的な原因を判別する手助けとなります。

1. コメントを削除して transcode ログを有効にします。

Windows:emsTranscoder.bat

rem echo %TRANSCODER_BIN% %TRANSCODE% //remove rem

Linux: emsTranscoder.sh

#echo "$TRANSCODER_BIN $TRANSCODE" //remove #

2. EMSコンソールを起動し transcode コマンドを実行すると、 evo-avconv コマンドも画面に表示されます。
3.  evo-avconv の実行結果をコピーします。

サンプルログ

evo-avconv -y -i rtmp://s2pchzxmtymn2k.cloudfront.net/cfx/st/mp4:sintel.mp4 -b:v 100K -c:v libx264 -c:a copy -metadata streamName=testTransDest rtmp://192.168.2.35/live/testTransDest

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'