Origine multimediale SAMI

L'interscambio multimediale accessibile sincronizzato (SAMI) è un formato per l'aggiunta di didascalie ai supporti digitali. Le didascalie vengono archiviate in un file di testo separato con estensione smi o sami.

In Media Foundation i file di didascalia SAMI sono supportati tramite l'origine multimediale SAMI. Usare il resolver di origine per creare un'istanza dell'origine multimediale SAMI da un URL o un flusso di byte. Media Foundation non fornisce un componente che visualizza le didascalie SAMI. L'applicazione deve interpretare i dati didascalia ricevuti dall'origine multimediale SAMI.

Di seguito viene illustrato un file SAMI di esempio.

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

L'elemento <STYLE> contiene informazioni sullo stile. Questo esempio contiene uno stile di base per <P> gli elementi, insieme a due stili denominati, "standard" e "hilite". Gli stili denominati vengono utilizzati per modificare lo stile di base. Le didascalie vengono inserite all'interno <SYNC> di elementi. L'attributo start fornisce il tempo di presentazione in millisecondi per tale didascalia. Le didascalie in questo esempio vengono fornite in due lingue, specificate dai tag di lingua RFC-1766, "en-US" e "fr -FR". All'interno delle didascalie, le lingue sono identificate dai nomi di classe; in questo caso, "ENUSCC" e "FRFRCC".

L'origine multimediale SAMI crea un flusso multimediale per ogni lingua. Per impostazione predefinita, viene selezionato il primo flusso e i flussi rimanenti vengono deselezionati. L'applicazione può modificare la selezione del flusso chiamando IMFPresentationDescriptor::SelectStream e IMFPresentationDescriptor::D eselectStream. Ogni descrittore di flusso contiene gli attributi seguenti.

Attributo Descrizione
MF_SD_LANGUAGE Tag lingua, come specificato dall'attributo lang .
MF_SD_SAMI_LANGUAGE Nome lingua, come specificato dall'attributo Name .

 

Ogni flusso ha il tipo di supporto seguente:

Attributo Valore
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

L'origine SAMI fornisce ogni didascalia in un esempio di supporto separato. Il timestamp di esempio e la durata sono derivati dall'elemento <SYNC> . Il buffer multimediale contenuto nell'esempio contiene il didascalia come testo ASCII. Lo stile didascalia è incorporato nel didascalia come attributo inlineSTYLE. Ad esempio, dato il file SAMI precedente e usando il flusso in lingua inglese con gli stili predefiniti, il primo buffer multimediale conterrà i dati seguenti. Le interruzioni di riga potrebbero differire da quelle visualizzate qui.

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

Stili SAMI

Per modificare lo stile corrente, utilizzare l'interfaccia IMFSAMIStyle . Questa interfaccia viene ottenuta chiamando IMFGetService::GetService nell'origine multimediale SAMI. Se si usa l'origine multimediale SAMI con la sessione multimediale, chiamare GetService nella sessione multimediale. L'identificatore del servizio è MF_SAMI_SERVICE.

Nell'esempio seguente viene impostato lo stile SAMI corrente, specificato dall'indice.

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 questo esempio vengono chiamati i metodi seguenti nell'origine multimediale SAMI:

L'elenco dei nomi di stile viene archiviato anche nel descrittore di presentazione, nell'attributo MF_PD_SAMI_STYLELIST .

Origini multimediali e sink

Formati multimediali supportati in Media Foundation