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:
- IMFSAMIStyle::GetStyleCount ottiene il numero di stili.
- IMFSAMIStyle::GetStyles ottiene un elenco dei nomi di stile, archiviati in un PROPVARIANT.
- IMFSAMIStyle::SetSelectedStyle imposta uno stile in base al nome.
L'elenco dei nomi di stile viene archiviato anche nel descrittore di presentazione, nell'attributo MF_PD_SAMI_STYLELIST .
Argomenti correlati