Partager via


Source multimédia SAMI

L’échange de média accessible synchronisé (SAMI) est un format permettant d’ajouter des légendes à des supports numériques. Les légendes sont stockées dans un fichier texte distinct avec l’extension de nom de fichier .smi ou .sami.

Dans Media Foundation, les fichiers de légende SAMI sont pris en charge par le biais de la source multimédia SAMI. Utilisez le programme de résolution de source pour créer une instance de la source multimédia SAMI à partir d’une URL ou d’un flux d’octets. Media Foundation ne fournit pas de composant qui affiche les légendes SAMI. L’application doit interpréter les données de légende qu’elle reçoit de la source multimédia SAMI.

Voici un exemple de fichier 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>

L’élément <STYLE> contient des informations de style. Cet exemple contient un style de base pour <P> éléments, ainsi que deux styles nommés, « standard » et « hilite ». Les styles nommés sont utilisés pour modifier le style de base. Les légendes sont placées dans <SYNC> éléments. L’attribut de début donne le temps de présentation en millisecondes pour cette légende. Les légendes de cet exemple sont fournies dans deux langues, spécifiées par leurs balises de langue RFC-1766, «en-US» et « fr -FR ». Dans les légendes, les langues sont identifiées par leurs noms de classe ; dans ce cas, « ENUSCC » et « FRFRCC ».

La source multimédia SAMI crée un flux multimédia pour chaque langue. Par défaut, le premier flux est sélectionné et les flux restants sont désélectionnés. L’application peut modifier la sélection de flux en appelant IMFPresentationDescriptor ::SelectStream et IMFPresentationDescriptor ::D eselectStream. Chaque descripteur de flux contient les attributs suivants.

Attribut Description
MF_SD_LANGUAGE Balise de langue, comme indiqué par l’attribut lang.
MF_SD_SAMI_LANGUAGE Nom de la langue, comme indiqué par l’attribut Name.

 

Chaque flux a le type de média suivant :

Attribut Valeur
MF_MT_MAJOR_TYPE MFMediaType_SAMI
MF_MT_ALL_SAMPLES_INDEPENDENT TRUE

 

La source SAMI remet chaque légende dans un exemple de média distinct. L’exemple d’horodatage et de durée est dérivé de l’élément <SYNC>. La mémoire tampon multimédia contenue dans l’exemple contient la légende en tant que texte ASCII. Le style de légende est incorporé dans la légende sous la forme d’un attribut STYLE inline. Par exemple, étant donné le fichier SAMI précédent et en utilisant le flux de langue anglaise avec les styles par défaut, la première mémoire tampon multimédia contient les données suivantes. (Les sauts de ligne peuvent différer de ce qui est illustré ici.)

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

Pour modifier le style actuel, utilisez l’interface IMFSAMIStyle. Cette interface est obtenue en appelant IMFGetService ::GetService sur la source multimédia SAMI. (Si vous utilisez la source multimédia SAMI avec la session multimédia, appelez GetService sur la session multimédia.) L’identificateur de service est MF_SAMI_SERVICE.

L’exemple suivant définit le style SAMI actuel, spécifié par l’index.

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

Cet exemple appelle les méthodes suivantes sur la source multimédia SAMI :

La liste des noms de style est également stockée sur le descripteur de présentation, dans l’attribut MF__SAMI_STYLELIST.

sources et récepteurs multimédias

formats multimédias pris en charge dans Media Foundation