Źródło multimediów SAMI
Syncd Accessible Media Interchange (SAMI) to format dodawania podpisów do multimediów cyfrowych. Podpisy są przechowywane w osobnym pliku tekstowym z rozszerzeniem nazwy pliku smi lub sami.
W programie Media Foundation pliki podpisów SAMI są obsługiwane za pośrednictwem źródła multimediów SAMI. Użyj source resolver, aby utworzyć wystąpienie źródła multimediów SAMI na podstawie adresu URL lub strumienia bajtów. Program Media Foundation nie udostępnia składnika, który wyświetla podpisy SAMI. Aplikacja musi interpretować dane podpisów odbierane ze źródła multimediów SAMI.
Poniżej przedstawiono przykładowy plik 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>
Element <STYLE>
zawiera informacje o stylu. Ten przykład zawiera styl podstawowy dla elementów <P>
wraz z dwoma nazwanymi stylami, "standardem" i "hilite". Nazwane style są używane do modyfikowania stylu podstawowego. Podpisy są umieszczane w <SYNC>
elementach. Atrybut startowy daje czas prezentacji w milisekundach dla tego podpisu. Podpisy w tym przykładzie są podane w dwóch językach, określonych przez ich tagi języka RFC-1766, "en-US" i "fr -FR". W podpisach języki są identyfikowane przez ich nazwy klas; w tym przypadku "ENUSCC" i "FRFRCC".
Źródło multimediów SAMI tworzy jeden strumień multimediów dla każdego języka. Domyślnie jest zaznaczony pierwszy strumień, a pozostałe strumienie zostaną anulowane. Aplikacja może zmienić wybór strumienia, wywołując IMFPresentationDescriptor::SelectStream i IMFPresentationDescriptor::D eselectStream. Każdy deskryptor strumienia zawiera następujące atrybuty.
Atrybut | Opis |
---|---|
MF_SD_LANGUAGE | Tag języka podany przez atrybut lang . |
MF_SD_SAMI_LANGUAGE | Nazwa języka podana przez atrybut Name . |
Każdy strumień ma następujący typ nośnika:
Atrybut | Wartość |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_SAMI |
MF_MT_ALL_SAMPLES_INDEPENDENT | true |
Źródło SAMI dostarcza każdy podpis w osobnym przykładzie multimediów. Przykładowy sygnatura czasowa i czas trwania pochodzą z elementu <SYNC>
. Bufor multimediów zawarty w przykładzie zawiera podpis jako tekst ASCII. Styl podpisu jest osadzony w podpisie jako wbudowany atrybut STYLE
. Na przykład, biorąc pod uwagę poprzedni plik SAMI i używając strumienia języka angielskiego ze stylami domyślnymi, pierwszy bufor multimedialny będzie zawierać następujące dane. (Podziały wierszy mogą się różnić od pokazanych tutaj elementów).
<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.
Style SAMI
Aby zmienić bieżący styl, użyj interfejsu IMFSAMIStyle. Ten interfejs jest uzyskiwany przez wywołanie IMFGetService::GetService w źródle multimediów SAMI. (Jeśli używasz źródła multimediów SAMI z sesją multimediów, wywołaj GetService w sesji multimediów). Identyfikator usługi jest MF_SAMI_SERVICE.
Poniższy przykład ustawia bieżący styl SAMI określony przez indeks.
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;
}
Ten przykład wywołuje następujące metody w źródle multimediów SAMI:
- IMFSAMIStyle::GetStyleCount pobiera liczbę stylów.
- IMFSAMIStyle::GetStyles pobiera listę nazw stylów przechowywanych w PROPVARIANT.
- IMFSAMIStyle::SetSelectedStyle ustawia styl według nazwy.
Lista nazw stylów jest również przechowywana w deskryptorze prezentacji w atrybucie MF_PD_SAMI_STYLELIST.
Tematy pokrewne