Origen multimedia DE 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ítulo SAMI se admiten a través del origen multimedia SAMI. Use el Solucionador 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 DE SAMI. La aplicación debe interpretar los datos subtí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 <STYLE> elemento contiene información de estilo. Este ejemplo contiene un estilo base para <P> los 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> los elementos. El atributo start proporciona el tiempo de presentación en milisegundos para ese subtí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 subtí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, según lo indicado por el lang atributo .
MF_SD_SAMI_LANGUAGE Nombre del idioma, según lo indicado por el Name atributo .

 

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 subtítulo en una muestra de medios independiente. La marca de tiempo de ejemplo y la duración se derivan del <SYNC> elemento . El búfer multimedia contenido en el ejemplo contiene el subtítulo como texto ASCII. El estilo subtítulo se inserta en el subtítulo como un atributo insertadoSTYLE. Por ejemplo, dado el archivo SAMI anterior y usando el flujo en inglés con los estilos predeterminados, el primer búfer multimedia contendrá los siguientes datos. (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 interfaz IMFSAMIStyle . 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 de medios y receptores

Formatos de medios admitidos en Media Foundation