Source de média SAMI

Le format SAMI (Synchronized Accessible Media Interchange) 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 un 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 des légendes SAMI. L’application doit interpréter les données 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> 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 les <SYNC> éléments. L’attribut start 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 autres flux sont désélectionnés. L’application peut modifier la sélection du 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, tel qu’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 le légende en tant que texte ASCII. Le style légende est incorporé dans le légende en tant qu’attribut inlineSTYLE. Par exemple, étant donné le fichier SAMI précédent et en utilisant le flux en anglais 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 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 de mé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 et récepteurs multimédias

Formats multimédias pris en charge dans Media Foundation