SAMI Medya Kaynağı

Eşitlenmiş Erişilebilir Medya Değişimi (SAMI), dijital medyaya açıklamalı alt yazı ekleme biçimidir. Resim yazıları, .smi veya .sami dosya adı uzantısıyla ayrı bir metin dosyasında depolanır.

Media Foundation'da SAMI açıklamalı alt yazı dosyaları SAMI medya kaynağı üzerinden desteklenir. URL veya bayt akışından SAMI medya kaynağının bir örneğini oluşturmak için Kaynak Çözümleyicisi kullanın. Media Foundation, SAMI açıklamalı alt yazıları görüntüleyen bir bileşen sağlamaz. Uygulamanın SAMI medya kaynağından aldığı resim yazısı verilerini yorumlaması gerekir.

Aşağıda örnek bir SAMI dosyası gösterilmektedir.

<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>

<STYLE> öğesi stil bilgilerini içerir. Bu örnek, <P> öğeleri için temel stilin yanı sıra "standard" ve "hilite" adlı iki adlandırılmış stil içerir. Adlandırılmış stiller, temel stili değiştirmek için kullanılır. Açıklamalı alt yazılar <SYNC> öğelerin içine yerleştirilir. start özniteliği, bu resim yazısı için sunu süresini milisaniye cinsinden verir. Bu örnekteki açıklamalı alt yazılar RFC-1766 dil etiketleriyle belirtilen iki dilde verilmiştir: "en-US" ve "fr -FR". Açıklamalı alt yazılarda diller sınıf adlarıyla tanımlanır; bu durumda, "ENUSCC" ve "FRFRCC".

SAMI medya kaynağı her dil için bir medya akışı oluşturur. Varsayılan olarak, ilk akış seçilidir ve kalan akışlar da seçili değildir. Uygulama, IMFPresentationDescriptor::SelectStream ve IMFPresentationDescriptor::D eselectStreamçağrısı yaparak akış seçimini değiştirebilir. Her akış tanımlayıcısı aşağıdaki öznitelikleri içerir.

Öznitelik Açıklama
MF_SD_LANGUAGE lang özniteliği tarafından verilen dil etiketi.
MF_SD_SAMI_LANGUAGE Name özniteliği tarafından verilen dil adı.

 

Her akış aşağıdaki medya türüne sahiptir:

Öznitelik Değer
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT true

 

SAMI kaynağı her resim yazısını ayrı bir medya örneğinde sunar. Örnek zaman damgası ve süresi <SYNC> öğesinden türetilir. Örnekte yer alan medya arabelleği, resim yazısını ASCII metin olarak tutar. Resim yazısı stili, açıklamalı alt yazıya satır içi STYLE özniteliği olarak eklenir. Örneğin, önceki SAMI dosyası ve varsayılan stiller ile İngilizce akışı kullanıldığında, ilk medya arabelleği aşağıdaki verileri içerir. (Satır sonları burada gösterilenden farklı olabilir.)

<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 Stilleri

Geçerli stili değiştirmek için IMFSAMIStyle arabirimini kullanın. Bu arabirim, SAMI medya kaynağında IMFGetService::GetService çağrılarak elde edilir. (SAMI medya kaynağını Medya Oturumu ile kullanıyorsanız, Medya Oturumu'nda GetService 'ı arayın.) Hizmet tanımlayıcısı MF_SAMI_SERVICE.

Aşağıdaki örnek, dizin tarafından belirtilen geçerli SAMI stilini ayarlar.

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;
}

Bu örnekte SAMI medya kaynağında aşağıdaki yöntemler çağrılır:

Stil adları listesi, MF_PD_SAMI_STYLELIST özniteliğindeki sunu tanımlayıcısında da depolanır.

Medya Kaynakları ve Havuzları

Media Foundation 'da Desteklenen Medya Biçimlerini