Source du média SAMI

L’échange multimédia accessible synchronisé (SAMI) est un format permettant d’ajouter des légendes aux médias 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 à partir 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> les é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> les éléments. L’attribut de début donne l’heure 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 classes; 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 fournit chaque légende dans un exemple de média distinct. L’exemple d’horodatage et de durée sont dérivés 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 en tant qu’attribut inline STYLE . Par exemple, compte tenu du fichier SAMI précédent et de l’utilisation du flux de langue anglaise avec les styles par défaut, la première mémoire tampon multimédia contiendrait les données suivantes. (Les sauts de ligne peuvent différer de ce qui est affiché 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 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_PD_SAMI_STYLELIST .

Sources multimédias et récepteurs

Formats multimédias pris en charge dans Media Foundation