SAMI-Medienquelle
Synchronized Accessible Media Interchange (SAMI) ist ein Format zum Hinzufügen von Beschriftungen zu digitalen Medien. Die Beschriftungen werden in einer separaten Textdatei mit der Dateinamenerweiterung SMI oder Sami gespeichert.
In Media Foundation werden SAMI-Untertiteldateien über die SAMI-Medienquelle unterstützt. Verwenden Sie die Source Resolver-, um eine Instanz der SAMI-Medienquelle aus einer URL oder einem Bytedatenstrom zu erstellen. Media Foundation stellt keine Komponente bereit, die SAMI-Untertitel anzeigt. Die Anwendung muss die Beschriftungsdaten interpretieren, die sie von der SAMI-Medienquelle empfängt.
Im Folgenden sehen Sie eine Beispiel-SAMI-Datei.
<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>
Das <STYLE>
-Element enthält Formatvorlageninformationen. Dieses Beispiel enthält eine Basisformatvorlage für <P>
Elemente sowie zwei benannte Formatvorlagen, "Standard" und "hilite". Die benannten Formatvorlagen werden verwendet, um die Basisformatvorlage zu ändern. Beschriftungen werden in <SYNC>
Elementen platziert. Das Start-Attribut gibt der Präsentation Zeit in Millisekunden für diese Beschriftung. Die Beschriftungen in diesem Beispiel werden in zwei Sprachen angegeben, die durch ihre RFC-1766-Sprachtags angegeben werden, "en-US" und "fr -FR". Innerhalb der Beschriftungen werden Sprachen durch ihre Klassennamen identifiziert; in diesem Fall "ENUSCC" und "FRFRCC".
Die SAMI-Medienquelle erstellt für jede Sprache einen Medienstream. Standardmäßig ist der erste Datenstrom ausgewählt, und die verbleibenden Datenströme werden deaktiviert. Die Anwendung kann die Streamauswahl ändern, indem sie IMFPresentationDescriptor::SelectStream und IMFPresentationDescriptor::D eselectStreamaufrufen. Jeder Datenstromdeskriptor enthält die folgenden Attribute.
Attribut | Beschreibung |
---|---|
MF_SD_LANGUAGE | Sprachtag, wie vom attribut lang angegeben. |
MF_SD_SAMI_LANGUAGE | Sprachname, wie vom attribut "Name " angegeben. |
Jeder Datenstrom hat den folgenden Medientyp:
Attribut | Wert |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_SAMI |
MF_MT_ALL_SAMPLES_INDEPENDENT | TRUE- |
Die SAMI-Quelle liefert jede Beschriftung in einem separaten Medienbeispiel. Der Beispielzeitstempel und die Dauer werden vom <SYNC>
-Element abgeleitet. Der im Beispiel enthaltene Medienpuffer enthält die Beschriftung als ASCII-Text. Die Beschriftungsformatvorlage wird in die Beschriftung als Inline-STYLE
-Attribut eingebettet. Wenn Sie beispielsweise die vorherige SAMI-Datei verwenden und den englischsprachigen Datenstrom mit den Standardformatvorlagen verwenden, würde der erste Medienpuffer die folgenden Daten enthalten. (Die Zeilenumbrüche unterscheiden sich möglicherweise von den hier gezeigten Zeilenumbrüchen.)
<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-Formatvorlagen
Um die aktuelle Formatvorlage zu ändern, verwenden Sie die IMFSAMIStyle Schnittstelle. Diese Schnittstelle wird durch Aufrufen IMFGetService::GetService für die SAMI-Medienquelle abgerufen. (Wenn Sie die SAMI-Medienquelle mit der Mediensitzung verwenden, rufen Sie GetService- für die Mediensitzung auf.) Der Dienstbezeichner ist MF_SAMI_SERVICE.
Im folgenden Beispiel wird die aktuelle SAMI-Formatvorlage festgelegt, die durch Index angegeben wird.
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 diesem Beispiel werden die folgenden Methoden für die SAMI-Medienquelle aufgerufen:
- IMFSAMIStyle::GetStyleCount ruft die Anzahl der Formatvorlagen ab.
- IMFSAMIStyle::GetStyles ruft eine Liste der Formatvorlagennamen ab, die in einer PROPVARIANT-gespeichert sind.
- IMFSAMIStyle::SetSelectedStyle legt eine Formatvorlage anhand des Namens fest.
Die Liste der Formatvorlagennamen wird auch im Präsentationsdeskriptor im attribut MF_PD_SAMI_STYLELIST gespeichert.
Verwandte Themen