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:
- MMFSAMIStyle::GetStyleCount získá počet stylů.
- MMFSAMIStyle::GetStyles získá seznam názvů stylů uložených v PROPVARIANT.
- MMFSAMIStyle::SetSelectedStyle nastaví styl podle názvu.
Seznam názvů stylů je také uložen na popisovači prezentace v atributu MF_PD_SAMI_STYLELIST.
Související témata