ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


翻訳:株式会社サムライズ

 

注意

Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。

 

クローズドキャプションの設定

 

クローズドキャプション(CC)を使うと、ビデオコンテンツの上に文字を表示し、視聴者に追加情報を提供することが可能になります。クローズドキャプションは主にビデオの音声を文字にして表示するために使われます。クローズドキャプションの「クローズド」という言葉は、デフォルトではビデオに字幕がついていないということを示しています。よって、字幕は外部ツールを使ってデコードする必要があります。Adobe Media Server (AMS) 5.0.1は、以下のストリーミング技術においてビデオストリームへのクローズドキャプションデータの挿入をサポートしています。

 

    HDS (LiveVOD)

    HLS (LiveVOD)

    RTMP

AMSにおけるクローズドキャプションは、ANSI/SCTE 128 2010のセクション8で規定されている、H264SEI NALUに字幕データを埋め込むという方式で実装されています。Adobe Media Serverは業界標準608708規格のクローズドキャプションを、以下のチャンネル・デバイスへのビデオストリーミングにおいてサポートしています。

 

    Adobe Flash PlayerAIR (OSMFフレームワークによる)

    iOSデバイス(HLSによる)

このドキュメントでは入出力のワークフローや、使用事例、AMS608708規格のクローズドキャプションをサポートするための設定を示します。クローズドキャプションのデータはVODストリームの中に埋め込まれ、受信者がHDSHLS、及びRTMPを通じて見ることができます。

 

 

クローズドキャプションのワークフロー

ビデオストリームへの字幕データ埋め込みを実装する技術は数多くあります。いくつか例を挙げると、

 

    ビデオコンテンツに字幕データを埋め込む。例えば、メディアストリームやストレージフォーマットには、ATSCピクチャーデータの一部としてH.264SEI NALU内に608/708規格の字幕データを埋め込むことができます。

    MP4ビデオにはtimedトラックを含めることができ、そこに字幕データを格納することができます。

 

AMSでは以下のクローズドキャプションのワークフローがサポートされています。

    タイプ1–  ATSCピクチャーユーザーデータに字幕データを格納してストリーミングする。

    タイプ2– timedトラックから字幕データを展開し、H.264SEI NALU内の ATSCピクチャーユーザーデータに字幕データを埋め込む。

    タイプ3–  AMSで定義されたonCaptionInfoというAMSメッセージ内に字幕データを埋め込む。

 

タイプ 1 –ATSCピクチャーユーザーデータにCCを格納する

このタイプでは、CCの入力はHLSでネイティブにサポートされています。タイプ1の入力はジャストインタイムでOnCaptionInfoメッセージに変換することができるので、HDSRTMPでも字幕を表示することができます。コンテンツプロバイダーはクローズドキャプションのデータを、ATSCピクチャーユーザーデータの一部としてH.264SEI NALU内に埋め込むことができます。しかし、この方法はH.264のコーデックタイプをサポートしているビデオストリームでしか使えません。

 

ATSCピクチャーユーザーデータにクローズドキャプションを埋め込む

 

注:このタイプはMPEG2 TSストリームで広く使われます。

 

HLSのプレイヤーはそのように手が加えられたストリームをサポートしています。AMSを使用して、この埋め込みフォーマットをAMSで定義されたonCaptionInfoメッセージにジャストインタイムでパッケージ化し、HDSRTMPで字幕を表示することもできます。これが字幕データを埋め込む理想的な方法です。この形式でビデオコンテンツを用意・パッケージ化するには、以下の方法があります。

 

    AMSで字幕データをパッケージ化する。

    元々MPEG2 TSとして入手できるストリームをこのタイプに変換する。

 

タイプ2–Timed Track内のCCを展開する

クローズドキャプションのデータは、別のtimedトラック内に存在していることもあります。アップルはQuickTimeムービーファイル用にtimedトラックのフォーマットを定義しています。AMSに付属しているツールを使って、字幕データが含まれているこのタイプのtimedトラックをATSCピクチャーユーザーデータに変換することができます。

 

 

timed trackに含まれているクローズドキャプション

 

タイプ3 –AMFメッセージにCCを格納する

タイプ1のデータからはクローズドキャプションのデータをジャストインタイムで展開し、AMSで定義されたonCaptionInfoというAMFメッセージに格納することができます。以下のファイルタイプがサポートされています:

 

    MP4

    F4V

AMSを使ってそのようなファイルをパッケージ化し、onCaptionInfoメッセージを利用して字幕データをLiveVODストリームの一部として送ることができます。

 

AMFメッセージに格納されたクローズドキャプション

 

注:もしコンテンツがこの形式で記録されているなら、AMSで更にパッケージ化・ストリーミングしなくても、RTMPHDS経由で再生することができます。

 

このタイプではHLSはサポートされないことに注意してください。

 

以下の表にHLSHDSRTMPでサポートされているタイプをまとめてあります。

 

クローズドキャプションのタイプ

 

字幕のパッケージ化

HLSプロトコルでは字幕データをuser_data_registered_itu_t_t35としてパッケージ化する必要があり、user_data_registered_itu_t_t35MPEG2 TSストリームのビデオアクセスユニット内にH.264SEI NALUとして埋め込まれています。よって、入力されるビデオのフレームはそのままMPEG2トランスポートストリームに変換されます。字幕データに関して再パッケージ化は全く必要ありません。HDSRTMPの場合は、H264SEI NALUonCaptionInfoデータメッセージに変換されます。タイプ4のペイロード(user_data_registered_itu_t_t35)を伴うタイプ6NALUは、字幕データを取り出すためパースされます。もしビデオフレームの1つのアクセスユニット内に複数のNALUがあった場合は、1つのデータメッセージへとパッケージ化されます。この場合、元の字幕データとそれに対応するH.264のアクセスユニット内のNALUは無傷のまま保たれます。この処理はコンテンツをパッケージ化する際に行われます。

 

 

設定

AMSは、サーバー側で字幕データの処理のオンオフを切り替える簡単な設定を提供しています。しかし、これらの設定では、前のセクションで定義されたどのタイプでカプセル化された字幕データも展開することはありません。

 

VODの使用例

 

サーバーレベルでhttpd.confを設定する(HDS-VOD専用)

Apacheサーバーのhttpd.confファイルのJitGenerateCaptionInfo要素を以下のように変更することで、クローズドキャプションをサーバーレベルで設定することができます:

 

<Location /hds-vod>

JitGenerateCaptionInfo true

...

</Location>

 

コンテンツレベルでjit.confを設定する(HDS-VOD専用)

jit.confファイルのcc-info-enabled要素を以下のように変更することで、クローズドキャプションをコンテンツレベルで設定することができます:

<hds>

<cc-info-enabled> true

</cc-info-enabled>

</hds>

 

Server.xmlを設定する(RTMP専用)

RTMPでは、server.xmlファイルに以下のコードスニペットを追加することでクローズドキャプションの設定が行えます。

 

<Mp4>

<Playback>

<GenerateCCInfo>true</GenerateCCInfo >

</Playback>

</Mp4>

 

注:VODの場合、クローズドキャプションのデータはH.264でエンコードされたMP4F4Vのコンテンツでのみサポートされています。

 

Liveの使用例

 

アプリケーションレベル(HDSRTMP

Application.xmlファイルのGenerateCCInfo要素を以下のように変更することで、クローズドキャプションをアプリケーションレベルで設定することができます:

 

<StreamManager>

<Live>

<GenerateCCInfo>true</GenerateCCInfo>

</Live>

</StreamManager>

 

注:もしタグが一つでも欠けていると、AMSはその設定を“false”と判断します。クローズドキャプションも同様で、Application.xmlファイルではオフになります。

 

ストリームレベル(HDSRTMP

アプリケーションのmain.ascを変更しStream関数のgenerateCCInfoを設定することで、アプリケーションレベルの設定をオーバーライドすることもできます:

 

Stream.generateCCInfo = true;

 

注:VODでもライブでも、エンコーダーやVODファイルから字幕が既にタイプ3の形式で提供されていないか確認し、そのような場合はonCaptionInfoメッセージが重複するのを避けるため、これらの設定をオフにしてください。

 

注:ライブの場合は、onCaptionInfoメッセージ生成のオンオフを切り替えることができるのはストリームを取り込むサーバーだけです。他のサーバーからストリームが中継されている場合、これらの設定は機能せず、デフォルトでオフになります。

 

 

OSMFのサポート

OSMFプレイヤーではOSMFCCDecoderクラスを通じてクローズドキャプションを有効化することができます。OSMFCCDecoderクラスはdisplayObjectを使い、ビデオサイズを更新し、デコーダーをリセットします。OSMFCCDecoderを使うと以下のアクションを行うことができます:

 

    字幕表示の有効・無効の切り替え

    字幕チャンネルの選択

    フォント、テキスト、背景色など、様々な字幕表示属性の変更

以下のセクションではOSMFでクローズドキャプションを使い始めるために必要な手順を説明します。

 

ステップ1 - コンテンツの準備

まず、クローズドキャプションのデータを含むコンテンツを用意します。

VODを再生するためには、以下のようにServer.xmlGenerateCCInfoを有効化します。

<Root>

<Server>

<Streams>

<Mp4>

<Playback>

<GenerateCCInfo>true</GenerateCCInfo>

</Playback>

</Mp4>

</Streams>

</Server>

</Root>

 

GenerateCCInfoオプションが有効だと、AMSはクローズドキャプションを求めてビデオパケットを処理してonCaptionInfoメッセージを生成し、それがクライアントに送られます。

 

ライブを再生するためには、以下のようにApplication.xmlGenerateCCInfoを有効化します:

 

<Application>

<StreamManager>

<Live>

<GenerateCCInfo>true</GenerateCCInfo>

</Live>

</StreamManager>

</Application>

 

ステップ2 – ActionScriptのコードを書く

以下のように、OSMFCCDecoderを初期化して全てのカスタマイズ可能な属性を外部に公開します:

var player:MediaPlayer = ...;

 

// Initialize the player.

// Listen for MediaPlayerStateChangeEvent on player and

// when the state is MediaPlayerState.READY, then initialize the

// decoder as shown below:

var ccDecoder:OSMFCCDecoder;

 

// Create a new instance

ccDecoder = new OSMFCCDecoder();

// Bind the instance to your media player

 

ccDecoder.mediaPlayer = player;

// Bind the instance to the media player view area

// that can be used to render.

ccDecoder.mediaContainer = mediaContainer;

// Enable the instance

ccDecoder.enabled = true;

// Optionally, select a type and service

// At present, only one type is supported; CEA-708 wrapped over 608,

// which is identified by the value CCType.CEA708.

ccDecoder.type = CCType.CEA708;

ccDecoder.service = CEA708Service.CC1;

 

注:ビデオプレイヤーにはOSMFCCDecoderのインスタンスが少なくとも1つは必要です。

 

OSMFCCDecoderにはUIコントロールで露出させることのできる多数のプロパティがあります。これらのプロパティの殆どはフォントや色の属性のオーバーライドを有効化するもので、またFCCガイドラインでは必須とされています。これらのプロパティを露出させるため、UIコントロールを追加しなければなりません。また、セッション間でそれらの設定を保存・リストアするために必要なコードも追加しなければなりません。クローズドキャプションの表示の有効・無効を切り替え、また好きな字幕のサービス・チャンネルを選べるようなUIコントロールを提供してください。表示されるフォントサイズ、背景色、不透明度の値をエンドユーザーが選ぶことのできるUIコントロールを提供してもいいでしょう。

 

以下のコードスニペットではActionScriptでカスタム属性を露出するための手順を説明します:

 

/**

*  The type of closed captioning data to decode and render.

*  A value of null indicates no selected type.

*  Valid values are values of the CC Type enumeration class.

*  The default value is null .

*

*  @throws ArgumentError if the specified type is not supported.

*  /

public function gettype():String;

public function settype(value:String):void;

/ **

*  The MediaPlayer this OSMFCCDecoder is associated with.

*  Assig ning any value disassociates the OSMFCCDecoder from a

*  currently assigned MediaPlayer (if any).

*  If the assigned value is non-null, the OSMFCCDecoder will

*  automatically register itself as an event listener on

*  the provided MediaPlayer and access its view property

*  to use as the video surface to render captions over.

*/

public function get mediaPlayer():MediaPlayer

public function set mediaPlayer(value:MediaPlayer):void

/**

*  Whether caption data decoding and rendering is enabled or disabled.

*  The default value is true.

*  When this property transitions from true to false a side-effect

*  is a reset of internal decoder state and

*  any currently rendered captions are cleared.

*/

public function get enabled():Boolean

public function set enabled(value:Boolean):void

/**

*  The caption "service" to decode and render.

*  For CEA-708 wrapped over 608 closed captioning, supported values

*  are values of the CEA708Service enumeration class.

*  CEA708Service.CC1, CEA708Service.CC2, CEA708Service.CC3, CEA708Service.CC4

*  @throws ArgumentError if the assigned service value is not supported

*  or available for the closed captioning

*  type specified at construction time.

*/

public function get service():String

public function set service(value:String):void

/**

*  Font override to apply to rendered text.

*  Default value is null, indicating no override, and text will

*  assume its intrinsic font according to caption

*  authoring.

*  To override the font assign an embedded or system font

*  name and to disable an override assign null.

*/

public function get font():String

public function set font(value:String):void

/**

*  Text color override to apply to rendered text.

*  Default value is -1, indicating no override, and text

*  will assume its intrisic color which may vary according

*  to caption authoring.

*  To override the text color assign a RGB hex value (e.g. 0xFF00FF)

*  and to disable an override assign -1.

*  @throws ArgumentError if the value is not -1 and not within the RGB hex range.

*/

public function get textColor():int

public function set textColor(value:int):void

/**

*  Background color override to apply to the background of text character cells.

*  Default value is -1, indicating no override, and cell backgrounds

*  will assume their intrinsic color which

*  may vary according to caption authoring.

*  To override the background color assign a RGB hex value (e.g. 0xFF00FF)

*  and to disable an override assign -1.

*  @throws ArgumentError if the value is not -1 and not within the RGB hex range.

*/

public function get backgroundColor():int

public function set backgroundColor(value:int):void

/**

*  Text opacity override to apply to rendered text.

*  Default value is -1, indicating no override, and text

*  will assume its intrinsic opacity which may vary

*  according to caption authoring.

*  To override text opacity assign a value between 0 (fully transparent)

*  to 1 (fully opaque) and to disable

*  an override assign -1.

*  @throws ArgumentError if the value is not -1 and not within the range of [0, 1].

*/

public function get textOpacity():Number

public function set textOpacity(value:Number):void

/**

*  Background opacity override to apply to the background of text character cells.

*  Default value is -1, indicating no override, and backgrounds will

*  assume their intrinsic opacity which may

*  vary according to caption authoring.

*  To override background opacity assign a value between 0 (fully transparent)

*  to 1 (fully opaque) and to

*  disable an override assign -1.

*  @throws ArgumentError if the value is not -1 and not within the range of [0, 1].

*/

public function get backgroundOpacity():Number

public function set backgroundOpacity(value:Number):void

/**

*  Resets the OSMFCCDecoder's internal state, clearing any

*  currently rendered captions.

*  The currently selected caption service and display overrides are not changed.

*/

public function reset():void

/**

*  The default font to use when no custom font is specified.

*  This is set to a reasonable default for the device. When using custom devices,

*  you may alter this property to change the default font.

*/

public function get defaultFont():String

public function set defaultFont(value:String):void

/**

*  Edge type override to apply to rendered text.

*

*  Valid values are indicated by the EdgeType enumeration, or null to

*  indicate no override. Valid Values:

*  EdgeType.NONE: Indicates that no edge decoration should be used.

*  EdgeType.DEPRESSED: Indicates that the edge will appear as depressed.

*  EdgeType.UNIFORM: Indicates that the edge will with a uniform border.

*  EdgeType.LEFT_DROP_SHADOW: Indicates that the edge will with a

*  shadow falling to the left.

*  EdgeType.RIGHT_DROP_SHADOW: Indicates that the edge will with a

*  shadow falling to the right.

*

*  @default null

*

*  @throws ArgumentError if the value is not null and not a memory of

*  the EdgeType enumeration.

**/

public function get edgeType():String

public function set edgeType(value:String):void

/**

*  Edge color override to apply to rendered text.

*  The value should be an RGB hex value (e.g. 0xFF00FF).

*

*  A value of -1 indicates no override. A reasonable

*  default edge color will be selected.

*

*  @default -1

*

*  @throws ArgumentError if the value is not -1 and not within the RGB hex range.

**/

public function get edgeColor():int

public function set edgeColor(value:int):void

 

注:サーバー側はH.264のビデオでのみクローズドキャプションをサポートしています。OSMFHDSRTMPで(VODの)クローズドキャプションを再生するため、DXPおよびTTMLの仕様はサイドカーファイルでサポートされています。

 

 

ccConvertorツールを使用する

ccConvertorツールは、クローズドキャプションコンテンツ(clcpトラック)が含まれているあらゆるMOVファイルを、708形式で(608形式も含みつつ)NALUに字幕を埋め込んだMP4ファイルに変換することができるコマンドラインユーティリティです(Adobe Media Serverにバンドルされています)。

 

使い方

WindowsでのccConverterツールの使い方は以下の通りです:

 

ccConvertor.exe --input-file=<file> --[setting]=[arg]...

 

パラメーター

以下の表で、サポートされているパラメーターを説明します:

 

パラメーター

説明

--input-file arg

入力するコンテナファイルのパスです。絶対パスか相対パスで指定することができます。

--output-file arg

出力先のパスです。入力ファイルと同じパスは指定できません。絶対パスか相対パスで指定することができます。

--conf-file arg

パッケージ化処理の設定を記述した設定ファイルです。

 

設定ファイルで相対パスを渡す場合、設定ファイルがあるディレクトリへの相対パスとなることに注意してください。

 

設定ファイルのフォーマットを知るには、以下の場所にあるサンプル設定ファイルを参照してください。

<AMS_INSTALL_DIR>\tools\ccConvertor\sample_cfg.xml

 

 

最終更新日 2013/9/30