Compartir a través de


Origen de medios SAMI

El intercambio de medios accesibles sincronizado (SAMI) es un formato para agregar subtítulos a medios digitales. Los subtítulos se almacenan en un archivo de texto independiente con la extensión de nombre de archivo .smi o .sami.

En Media Foundation, los archivos de subtítulos sami se admiten a través de la fuente multimedia SAMI. Use el resolución de origen para crear una instancia del origen multimedia SAMI a partir de una dirección URL o secuencia de bytes. Media Foundation no proporciona un componente que muestre subtítulos SAMI. La aplicación debe interpretar los datos de título que recibe del origen multimedia SAMI.

A continuación se muestra un archivo SAMI de ejemplo.

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

El elemento <STYLE> contiene información de estilo. Este ejemplo contiene un estilo base para <P> elementos, junto con dos estilos con nombre, "standard" y "hilite". Los estilos con nombre se usan para modificar el estilo base. Los títulos se colocan dentro de <SYNC> elementos. El atributo start proporciona el tiempo de presentación en milisegundos para ese título. Los títulos de este ejemplo se proporcionan en dos idiomas, especificados por sus etiquetas de idioma RFC-1766, "en-US" y "fr -FR". Dentro de los títulos, los idiomas se identifican por sus nombres de clase; en este caso, "ENUSCC" y "FRFRCC".

El origen multimedia SAMI crea una secuencia multimedia para cada idioma. De forma predeterminada, se selecciona la primera secuencia y se deseleccionan las secuencias restantes. La aplicación puede cambiar la selección de secuencias llamando a IMFPresentationDescriptor::SelectStream y IMFPresentationDescriptor::D eselectStream. Cada descriptor de secuencia contiene los siguientes atributos.

Atributo Descripción
MF_SD_LANGUAGE Etiqueta de idioma, tal como se indica en el atributo lang.
MF_SD_SAMI_LANGUAGE Nombre del idioma, tal como se indica en el atributo Name.

 

Cada secuencia tiene el siguiente tipo de medio:

Atributo Valor
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

La fuente SAMI entrega cada título en un ejemplo de medios independiente. La marca de tiempo y la duración de ejemplo se derivan del elemento <SYNC>. El búfer multimedia contenido en el ejemplo contiene el título como texto ASCII. El estilo de título se incrusta en el título como un atributo STYLE insertado. Por ejemplo, dado el archivo SAMI anterior y usando la secuencia en inglés con los estilos predeterminados, el primer búfer multimedia contendrá los datos siguientes. (Los saltos de línea pueden diferir de lo que se muestra aquí).

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

Estilos SAMI

Para cambiar el estilo actual, use la interfazIMFSAMIStyle. Esta interfaz se obtiene llamando a IMFGetService::GetService en el origen multimedia SAMI. (Si usa el origen multimedia SAMI con la sesión multimedia, llame a GetService en la sesión multimedia). El identificador de servicio es MF_SAMI_SERVICE.

En el ejemplo siguiente se establece el estilo SAMI actual, especificado por índice.

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

En este ejemplo se llama a los métodos siguientes en el origen multimedia SAMI:

La lista de nombres de estilo también se almacena en el descriptor de presentación, en el atributo MF_PD_SAMI_STYLELIST.

orígenes y receptores de medios de

formatos multimedia admitidos en Media Foundation