SAMI-Medienquelle
Synchronized Accessible Media Interchange (SAMI) ist ein Format zum Hinzufügen von Untertiteln zu digitalen Medien. Die Untertitel werden in einer separaten Textdatei mit der Dateinamenerweiterung .smi oder .sami gespeichert.
In Media Foundation werden SAMI-Untertitel-Dateien über die SAMI-Medienquelle unterstützt. Verwenden Sie den Quelllöser, um eine instance der SAMI-Medienquelle aus einer URL oder einem Bytestream zu erstellen. Media Foundation stellt keine Komponente bereit, die SAMI-Beschriftungen anzeigt. Die Anwendung muss die Untertitel Daten interpretieren, die sie von der SAMI-Medienquelle empfängt.
Die folgende Abbildung zeigt 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 Formatinformationen. Dieses Beispiel enthält eine Basisformatvorlage für <P>
Elemente sowie zwei benannte Stile, "standard" und "hilite". Die benannten Stile werden verwendet, um den Basisstil zu ändern. Beschriftungen werden in <SYNC>
Elementen platziert. Das start-Attribut gibt die Präsentationszeit für diese Untertitel in Millisekunden an. Die Beschriftungen in diesem Beispiel werden in zwei Sprachen angegeben, die durch die RFC-1766-Sprachtags "en-US" und "fr -FR" angegeben werden. Innerhalb der Untertitel werden Sprachen durch ihre Klassennamen identifiziert. in diesem Fall "ENUSCC" und "FRFRCC".
Die SAMI-Medienquelle erstellt einen Medienstream für jede Sprache. Standardmäßig ist der erste Stream ausgewählt, und die restlichen Datenströme werden deaktiviert. Die Anwendung kann die Streamauswahl ändern, indem sie IMFPresentationDescriptor::SelectStream und IMFPresentationDescriptor::D eselectStream aufruft. Jeder Streamdeskriptor enthält die folgenden Attribute.
attribute | BESCHREIBUNG |
---|---|
MF_SD_LANGUAGE | Sprachtag, wie vom lang Attribut angegeben. |
MF_SD_SAMI_LANGUAGE | Sprachname, wie vom Name Attribut angegeben. |
Jeder Stream weist den folgenden Medientyp auf:
attribute | Wert |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_SAMI |
MF_MT_ALL_SAMPLES_INDEPENDENT | TRUE |
Die SAMI-Quelle liefert jede Untertitel in einem separaten Medienbeispiel. Der Beispielzeitstempel und die <SYNC>
Dauer werden vom -Element abgeleitet. Der im Beispiel enthaltene Medienpuffer enthält die Untertitel als ASCII-Text. Das Untertitel-Format wird als Inlineattribut STYLE
in die Untertitel eingebettet. Wenn Sie beispielsweise die vorherige SAMI-Datei und den englischsprachigen Stream mit den Standardformaten verwenden, enthält der erste Medienpuffer die folgenden Daten. (Die Zeilenumbrüche können sich von den hier gezeigten unterscheiden.)
<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-Stile
Um den aktuellen Stil zu ändern, verwenden Sie die IMFSAMIStyle-Schnittstelle . Diese Schnittstelle wird durch Aufrufen von 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 der aktuelle SAMI-Stil festgelegt, der durch den 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 nach Name fest.
Die Liste der Formatvorlagennamen wird auch im Präsentationsdeskriptor im MF_PD_SAMI_STYLELIST-Attribut gespeichert.
Zugehörige Themen