Sumber Media SAMI
Synchronized Accessible Media Interchange (SAMI) adalah format untuk menambahkan keterangan ke media digital. Keterangan disimpan dalam file teks terpisah dengan ekstensi nama file .smi atau .sami.
Di Media Foundation, file keterangan SAMI didukung melalui sumber media SAMI. Gunakan Source Resolver untuk membuat instans sumber media SAMI dari URL atau aliran byte. Media Foundation tidak menyediakan komponen yang menampilkan keterangan SAMI. Aplikasi harus menginterpretasikan data keterangan yang diterimanya dari sumber media SAMI.
Berikut ini memperlihatkan contoh file SAMI.
<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>
Elemen <STYLE>
berisi informasi gaya. Contoh ini berisi gaya dasar untuk elemen <P>
, bersama dengan dua gaya bernama, "standar" dan "hilite". Gaya bernama digunakan untuk memodifikasi gaya dasar. Keterangan ditempatkan dalam elemen <SYNC>
. Atribut start memberikan waktu presentasi dalam milidetik untuk keterangan tersebut. Keterangan dalam contoh ini diberikan dalam dua bahasa, yang ditentukan oleh tag bahasa RFC-1766 mereka, "en-US" dan "fr -FR". Dalam keterangan, bahasa diidentifikasi dengan nama kelasnya; dalam hal ini, "ENUSCC" dan "FRFRCC".
Sumber media SAMI membuat satu aliran media untuk setiap bahasa. Secara default, aliran pertama dipilih dan aliran yang tersisa tidak dipilih. Aplikasi dapat mengubah pilihan aliran dengan memanggil IMFPresentationDescriptor::SelectStream dan IMFPresentationDescriptor::D eselectStream. Setiap deskriptor streaming berisi atribut berikut.
Atribut | Deskripsi |
---|---|
MF_SD_LANGUAGE | Tag bahasa, seperti yang diberikan oleh atribut lang . |
MF_SD_SAMI_LANGUAGE | Nama bahasa, seperti yang diberikan oleh atribut Name . |
Setiap aliran memiliki jenis media berikut:
Atribut | Nilai |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_SAMI |
MF_MT_ALL_SAMPLES_INDEPENDENT | TRUE |
Sumber SAMI memberikan setiap keterangan dalam sampel media terpisah. Stempel waktu sampel dan durasi berasal dari elemen <SYNC>
. Buffer media yang terkandung dalam sampel menyimpan keterangan sebagai teks ASCII. Gaya keterangan disematkan dalam keterangan sebagai atribut STYLE
sebaris. Misalnya, mengingat file SAMI sebelumnya, dan menggunakan aliran bahasa Inggris dengan gaya default, buffer media pertama akan berisi data berikut. (Hentian baris mungkin berbeda dari apa yang ditunjukkan di sini.)
<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.
Gaya SAMI
Untuk mengubah gaya saat ini, gunakan antarmukaIMFSAMIStyle. Antarmuka ini diperoleh dengan memanggil IMFGetService::GetService pada sumber media SAMI. (Jika Anda menggunakan sumber media SAMI dengan Sesi Media, panggil GetService pada Sesi Media.) Pengidentifikasi layanan MF_SAMI_SERVICE.
Contoh berikut mengatur gaya SAMI saat ini, yang ditentukan oleh indeks.
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;
}
Contoh ini memanggil metode berikut pada sumber media SAMI:
- IMFSAMIStyle::GetStyleCount mendapatkan jumlah gaya.
- IMFSAMIStyle::GetStyles mendapatkan daftar nama gaya, disimpan dalam PROPVARIANT.
- IMFSAMIStyle::SetSelectedStyle mengatur gaya menurut nama.
Daftar nama gaya juga disimpan pada deskriptor presentasi, di atribut MF_PD_SAMI_STYLELIST.
Topik terkait