SAMI-Medienquelle

Syncd Accessible Media Interchange (SAMI) ist ein Format zum Hinzufügen von Beschriftungen zu digitalen Medien. Die Beschriftungen werden in einer separaten Textdatei mit der Dateinamenerweiterung .smi oder .sami gespeichert.

In Media Foundation werden SAMI-Beschriftungsdateien über die SAMI-Medienquelle unterstützt. Verwenden Sie den Quelllöser , um eine Instanz der SAMI-Medienquelle aus einer URL oder einem Bytedatenstrom zu erstellen. Media Foundation stellt keine Komponente bereit, die SAMI-Beschriftungen anzeigt. Die Anwendung muss die Beschriftungsdaten interpretieren, die sie aus der SAMI-Medienquelle empfängt.

Im folgenden Beispiel wird eine SAMI-Datei gezeigt.

<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>

Das <STYLE> Element enthält Formatvorlageninformationen. Dieses Beispiel enthält eine Basisformatvorlage für <P> Elemente zusammen mit zwei benannten Formatvorlagen, "Standard" und "Hilite". Die benannten Formatvorlagen werden verwendet, um die Basisformatvorlage zu ändern. Beschriftungen werden innerhalb <SYNC> von Elementen platziert. Das Startattribute gibt die Präsentationszeit in Millisekunden für diese Beschriftung. Die Beschriftungen in diesem Beispiel werden in zwei Sprachen angegeben, die von ihren RFC-1766-Sprachtags, "en-US" und "fr -FR" angegeben werden. Innerhalb der Beschriftungen werden Sprachen durch ihre Klassennamen identifiziert; in diesem Fall "ENUSCC" und "FRFRCC".

Die SAMI-Medienquelle erstellt einen Medienstrom für jede Sprache. Standardmäßig ist der erste Datenstrom ausgewählt, und die verbleibenden Datenströme werden deaktiviert. Die Anwendung kann die Streamauswahl ändern, indem SIE IMFPresentationDescriptor::SelectStream und IMFPresentationDescriptor::D eselectStream aufrufen. Jeder Streamdeskriptor enthält die folgenden Attribute.

attribute Beschreibung
MF_SD_LANGUAGE Sprachtag, wie vom lang Attribut angegeben.
MF_SD_SAMI_LANGUAGE Sprachname, wie vom Name Attribut angegeben.

 

Jeder Stream verfügt über den folgenden Medientyp:

attribute Wert
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

Die SAMI-Quelle liefert jede Beschriftung in einem separaten Medienbeispiel. Der Beispielzeitstempel und die Dauer werden aus dem <SYNC> Element abgeleitet. Der im Beispiel enthaltene Medienpuffer enthält die Beschriftung als ASCII-Text. Die Beschriftungsformatvorlage wird in die Beschriftung als Inlineattribute STYLE eingebettet. Wenn Sie beispielsweise die vorherige SAMI-Datei und den englischen Datenstrom mit den Standardformatvorlagen verwenden, enthält der erste Medienpuffer die folgenden Daten. (Die Zeilenumbrüche unterscheiden sich möglicherweise von dem, was hier gezeigt wird.)

<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-Formatvorlagen

Um die aktuelle Formatvorlage zu ändern, verwenden Sie die IMFSAMIStyle-Schnittstelle . Diese Schnittstelle wird durch Aufrufen von IMFGetService::GetService auf der SAMI-Medienquelle abgerufen. (Wenn Sie die SAMI-Medienquelle mit der Mediensitzung verwenden, rufen Sie GetService auf der Mediensitzung auf.) Der Dienstbezeichner ist MF_SAMI_SERVICE.

Im folgenden Beispiel wird der aktuelle SAMI-Stil festgelegt, der durch Index angegeben wird.

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;
}

In diesem Beispiel werden die folgenden Methoden in der SAMI-Medienquelle aufgerufen:

Die Liste der Formatvorlagennamen wird auch im Präsentationsdeskriptor im MF_PD_SAMI_STYLELIST-Attribut gespeichert.

Medienquellen und Sinken

Unterstützte Medienformate in Media Foundation