Delen via


SAMI-mediabron

Gesynchroniseerde Accessible Media Interchange (SAMI) is een indeling voor het toevoegen van bijschriften aan digitale media. De bijschriften worden opgeslagen in een afzonderlijk tekstbestand met de bestandsnaamextensie .smi of .sami.

In Media Foundation worden SAMI-bijschriftbestanden ondersteund via de SAMI-mediabron. Gebruik de Source Resolver om een exemplaar van de SAMI-mediabron te maken op basis van een URL of bytestream. Media Foundation biedt geen onderdeel waarin SAMI-bijschriften worden weergegeven. De toepassing moet de bijschriftgegevens interpreteren die worden ontvangen van de SAMI-mediabron.

Hieronder ziet u een voorbeeld van een SAMI-bestand.

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

Het element <STYLE> bevat stijlgegevens. Dit voorbeeld bevat een basisstijl voor <P> elementen, samen met twee benoemde stijlen, 'standaard' en 'hilite'. De benoemde stijlen worden gebruikt om de basisstijl te wijzigen. Bijschriften worden in <SYNC> elementen geplaatst. Het beginkenmerk geeft de presentatietijd in milliseconden voor dat bijschrift. De bijschriften in dit voorbeeld worden gegeven in twee talen, opgegeven door hun RFC-1766 taallabels, "en-US" en "fr -FR". Binnen de bijschriften worden talen geïdentificeerd door hun klassenamen; in dit geval "ENUSCC" en "FRFRCC".

De SAMI-mediabron maakt één mediastroom voor elke taal. Standaard wordt de eerste stream geselecteerd en worden de resterende streams gedeselecteerd. De toepassing kan de stroomselectie wijzigen door IMFPresentationDescriptor::SelectStream en IMFPresentationDescriptor::D eselectStreamaan te roepen. Elke stroomdescriptor bevat de volgende kenmerken.

Attribuut Beschrijving
MF_SD_LANGUAGE Taaltag, zoals opgegeven door het kenmerk lang.
MF_SD_SAMI_LANGUAGE Taalnaam, zoals opgegeven door het kenmerk Name.

 

Elke stream heeft het volgende mediatype:

Attribuut Waarde
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE-

 

De SAMI-bron levert elk bijschrift in een afzonderlijk mediavoorbeeld. De voorbeeldtijdstempel en duur zijn afgeleid van het <SYNC> element. De mediabuffer in het voorbeeld bevat het bijschrift als ASCII-tekst. De bijschriftstijl wordt ingesloten in het bijschrift als een inline STYLE kenmerk. Op basis van het vorige SAMI-bestand en het gebruik van de Engelse stream met de standaardstijlen bevat de eerste mediabuffer bijvoorbeeld de volgende gegevens. (De regeleinden kunnen verschillen van wat hier wordt weergegeven.)

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

Als u de huidige stijl wilt wijzigen, gebruikt u de interface IMFSAMIStyle. Deze interface wordt verkregen door IMFGetService::GetService op de SAMI-mediabron aan te roepen. (Als u de SAMI-mediabron gebruikt met de mediasessie, belt u GetService- op de mediasessie.) De service-id is MF_SAMI_SERVICE.

In het volgende voorbeeld wordt de huidige SAMI-stijl ingesteld, opgegeven door index.

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 dit voorbeeld worden de volgende methoden aangeroepen voor de SAMI-mediabron:

De lijst met stijlnamen wordt ook opgeslagen in de presentatiedescriptor, in het kenmerk MF_PD_SAMI_STYLELIST.

mediabronnen en sinks

Ondersteunde media-indelingen in Media Foundation