SAMI メディア ソース

同期アクセシビリティ メディア インターチェンジ (SAMI) は、デジタル メディアにキャプションを追加するための形式です。 キャプションは、ファイル名拡張子が .smi または .sami の別のテキスト ファイルに格納されます。

Media Foundation では、SAMI キャプション ファイルは SAMI メディア ソースを通じてサポートされます。 ソース リゾルバーを使用して、URL またはバイト ストリームから SAMI メディア ソースのインスタンスを作成します。 Media Foundation には、SAMI キャプションを表示するコンポーネントは用意されていません。 アプリケーションは、SAMI メディア ソースから受信したキャプションデータを解釈する必要があります。

SAMI ファイルの例を次に示します。

<SAMI>
<HEAD>
    <STYLE TYPE="text/css">
    <!--
    P {
        font-family: Arial;
        background: #000000;
        text-align: center;
        }

#standard {Name: Standard; color: #FFFFFF; font-size: 14pt; } 
#hilite {Name: Youth; color: greenyellow; font-size: 18pt;}

    .ENUSCC { Name: English; lang: EN-US-CC; }
    .FRFRCC { Name: French; lang: fr-FR; } 

    -->
    </STYLE>
</HEAD>
<BODY>
    <SYNC Start="0">
        <P Class="ENUSCC">The <I>first</I> caption.</P>
        <P Class="FRFRCC">Un</P>
    </SYNC>
    <SYNC Start="3000">
        <P Class="ENUSCC">The <I>second</I> caption.</P>
        <P Class="FRFRCC">Deux</P>
    </SYNC>
    <SYNC Start="5000">
        <P Class="ENUSCC">The <I>third</I> caption.</P>
        <P Class="FRFRCC">Trois</P>
    </SYNC>
</BODY>
</SAMI>

要素には <STYLE> スタイル情報が含まれています。 この例には、要素の <P> 基本スタイルと、"standard" と "hilite" という 2 つの名前付きスタイルが含まれています。 名前付きスタイルは、基本スタイルを変更するために使用されます。 キャプションは要素内に <SYNC> 配置されます。 start 属性は、そのキャプションのプレゼンテーション時間をミリ秒単位で示します。 この例のキャプションは、RFC-1766 言語タグ "en-US" と "fr -FR" で指定された 2 つの言語で指定されています。 キャプション内では、言語はクラス名によって識別されます。この場合は、"ENUSCC" と "FRFRCC" です。

SAMI メディア ソースは、言語ごとに 1 つのメディア ストリームを作成します。 既定では、最初のストリームが選択され、残りのストリームは選択解除されます。 アプリケーションは、IMFPresentationDescriptor::SelectStream と IMFPresentationDescriptor::D eselectStream を呼び出すことによって、ストリームの選択を変更できます。 各ストリーム記述子には、次の属性が含まれています。

属性 説明
MF_SD_LANGUAGE 属性によって指定された lang 言語タグ。
MF_SD_SAMI_LANGUAGE 属性によって指定された Name 言語名。

 

各ストリームには、次のメディアの種類があります。

属性
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

SAMI ソースは、各キャプションを個別のメディア サンプルに配信します。 サンプルのタイム スタンプと期間は、 <SYNC> 要素から派生します。 サンプルに含まれるメディア バッファーは、キャプションを ASCII テキストとして保持します。 キャプション スタイルは、インラインSTYLE属性としてキャプションに埋め込まれます。 たとえば、前の SAMI ファイルを指定し、既定のスタイルの英語ストリームを使用すると、最初のメディア バッファーには次のデータが含まれます。 (改行は、ここに示されているものと異なる場合があります)。

<P STYLE="
    font-family: Arial;
    background: #000000;
    text-align: center;
    Name: English; lang: EN-US-CC;  
    Name: Standard; color: #FFFFFF; 
    font-size: 14pt; ">The<I>first</I> caption.

SAMI スタイル

現在のスタイルを変更するには、 IMFSAMIStyle インターフェイスを使用します。 このインターフェイスは、SAMI メディア ソースで IMFGetService::GetService を呼び出すことによって取得されます。 (メディア セッションで SAMI メディア ソースを使用している場合は、メディア セッションで GetService を呼び出します)。サービス識別子が MF_SAMI_SERVICE

次の使用例は、index で指定された現在の SAMI スタイルを設定します。

HRESULT SetSAMIStyleByIndex(IMFMediaSource *pSource, DWORD index)
{
    IMFSAMIStyle *pSami = NULL;

    DWORD cStyles;
    PROPVARIANT varStyles;

    HRESULT hr = MFGetService(pSource, MF_SAMI_SERVICE, IID_PPV_ARGS(&pSami));
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pSami->GetStyleCount(&cStyles);
    if (FAILED(hr))
    {
        goto done;
    }

    if (index >= cStyles)
    {
        hr = E_INVALIDARG;
        goto done;
    }

    hr = pSami->GetStyles(&varStyles);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pSami->SetSelectedStyle(varStyles.calpwstr.pElems[index]);

done:
    PropVariantClear(&varStyles);
    SafeRelease(&pSami);
    return hr;
}

この例では、SAMI メディア ソースで次のメソッドを呼び出します。

スタイル名のリストは、プレゼンテーション記述子の MF_PD_SAMI_STYLELIST 属性にも格納されます。

メディア ソースとシンク

メディア ファンデーションでサポートされるメディア形式