Bagikan melalui


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:

Daftar nama gaya juga disimpan pada deskriptor presentasi, di atribut MF_PD_SAMI_STYLELIST.

Sumber dan Sink Media

Format Media yang Didukung di Media Foundation