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 SAMI caption didukung melalui sumber media SAMI. Gunakan Pemecah Masalah Sumber untuk membuat instans sumber media SAMI dari URL atau aliran byte. Media Foundation tidak menyediakan komponen yang menampilkan keterangan SAMI. Aplikasi harus menafsirkan data caption yang diterimanya dari sumber media SAMI.
Berikut ini menunjukkan 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 <P>
elemen, bersama dengan dua gaya bernama, "standar" dan "hilite". Gaya bernama digunakan untuk memodifikasi gaya dasar. Keterangan ditempatkan dalam <SYNC>
elemen. Atribut start memberikan waktu presentasi dalam milidetik untuk caption 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 aliran berisi atribut berikut.
Atribut | Deskripsi |
---|---|
MF_SD_LANGUAGE | Tag bahasa, seperti yang lang diberikan oleh atribut . |
MF_SD_SAMI_LANGUAGE | Nama bahasa, seperti yang Name diberikan oleh atribut . |
Setiap aliran memiliki jenis media berikut:
Atribut | Nilai |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_SAMI |
MF_MT_ALL_SAMPLES_INDEPENDENT | TRUE |
Sumber SAMI memberikan setiap caption dalam sampel media terpisah. Stempel waktu sampel dan durasi berasal dari <SYNC>
elemen . Buffer media yang terkandung dalam sampel menyimpan caption sebagai teks ASCII. Gaya caption disematkan di caption sebagai atribut sebarisSTYLE
. Misalnya, mengingat file SAMI sebelumnya, dan menggunakan aliran bahasa Inggris dengan gaya default, buffer media pertama akan berisi data berikut. (Pemisah 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 antarmuka IMFSAMIStyle . Antarmuka ini diperoleh dengan memanggil IMFGetService::GetService pada sumber media SAMI. (Jika Anda menggunakan sumber media SAMI dengan Sesi Media, panggil GetService di 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