Udostępnij za pośrednictwem


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

Lista nazw stylów jest również przechowywana w deskryptorze prezentacji w atrybucie MF_PD_SAMI_STYLELIST.

źródła i ujścia multimediów

obsługiwane formaty multimediów w programie Media Foundation