Sdílet prostřednictvím


Zdroj médií SAMI

Synchronizovaná technologie Media Interchange (SAMI) je formát pro přidávání titulků do digitálních médií. Titulky jsou uložené v samostatném textovém souboru s příponou názvu souboru .smi nebo .sami.

Ve službě Media Foundation se soubory titulků SAMI podporují prostřednictvím zdroje médií SAMI. Pomocí zdrojového překladače vytvořte instanci zdroje médií SAMI z adresy URL nebo datového proudu bajtů. Media Foundation neposkytuje komponentu, která zobrazuje titulky SAMI. Aplikace musí interpretovat data titulků, která přijímá ze zdroje médií SAMI.

Následující příklad ukazuje soubor 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>

Prvek <STYLE> obsahuje informace o stylu. Tento příklad obsahuje základní styl pro prvky <P> spolu se dvěma pojmenovanými styly, "standard" a "hilite". Pojmenované styly slouží k úpravě základního stylu. Titulky se umístí do <SYNC> prvků. Počáteční atribut poskytuje čas prezentace v milisekundách pro tento titulek. Titulky v tomto příkladu jsou uvedeny ve dvou jazycích, které jsou určené značkami jazyka RFC-1766, "en-US" a "fr -FR". V rámci titulků jsou jazyky identifikovány jejich názvy tříd; v tomto případě "ENUSCC" a "FRFRCC".

Zdroj médií SAMI vytvoří pro každý jazyk jeden datový proud médií. Ve výchozím nastavení je vybrán první datový proud a zbývající datové proudy jsou zrušeny. Aplikace může změnit výběr datového proudu voláním MMFPresentationDescriptor::SelectStream a MMFPresentationDescriptor::D eselectStream. Každý popisovač datového proudu obsahuje následující atributy.

Atribut Popis
MF_SD_LANGUAGE Značka jazyka, jak je uvedeno atributem lang.
MF_SD_SAMI_LANGUAGE Název jazyka zadaný atributem Name.

 

Každý datový proud má následující typ média:

Atribut Hodnota
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

Zdroj SAMI doručí každý titulek v samostatné ukázce médií. Vzorové časové razítko a doba trvání jsou odvozeny od <SYNC> elementu. Vyrovnávací paměť médií obsažená v ukázce obsahuje titulek jako text ASCII. Styl titulku se vloží do titulku jako vložený atribut STYLE. Například vzhledem k předchozímu souboru SAMI a použití streamu anglického jazyka s výchozími styly by první vyrovnávací paměť médií obsahovala následující data. (Konce řádků se můžou lišit od zobrazených konců řádků.)

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

STYLY SAMI

Chcete-li změnit aktuální styl, použijte MMFSAMIStyle rozhraní. Toto rozhraní se získá voláním MMFGetService::GetService na zdroji médií SAMI. (Pokud používáte zdroj médií SAMI s relací médií, zavolejte GetService v relaci médií.) Identifikátor služby je MF_SAMI_SERVICE.

Následující příklad nastaví aktuální styl SAMI určený indexem.

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

Tento příklad volá následující metody zdroje médií SAMI:

Seznam názvů stylů je také uložen na popisovači prezentace v atributu MF_PD_SAMI_STYLELIST.

zdroje médií a jímky

podporované formáty médií ve službě Media Foundation