Utilisation de l’exclusion mutuelle pour les Flux ASF
Le contenu ASF peut contenir plusieurs flux qui s’excluent mutuellement. Ces flux ne peuvent pas être lus simultanément, mais un seul d’entre eux est lu à la fois. Par exemple, le fichier peut contenir un ensemble de flux qui comprend le même contenu encodé à une vitesse de transmission différente. Le flux utilisé est déterminé par la bande passante disponible pour l’application qui diffuse le contenu. L’objet exclusion mutuelle ASF, qui fait partie de l’objet d’en-tête, stocke des informations sur le groupe de flux de données qui s’excluent mutuellement.
Dans Media Foundation, l’objet exclusion mutuelle qui expose l’interface IMFASFMutualExclusion existe pour chaque objet exclusion mutuelle ASF. L’objet profil contient une référence à tous les objets d’exclusion mutuelle.
L’objet exclusion mutuelle stocke les informations sur le groupe de flux s’excluant mutuellement sous forme d’enregistrements. Un objet d’exclusion mutuelle peut avoir plusieurs enregistrements qui peuvent être utilisés pour créer des scénarios complexes. Chaque enregistrement contient un ou plusieurs flux qui ne peuvent pas coexister avec des flux dans un autre enregistrement, géré par l’objet exclusion mutuelle, en fonction du type d’exclusion mutuelle, tel que la vitesse de transmission.
Un exemple courant d’exclusion mutuelle complexe est un fichier qui contient trois flux audio du même contenu à différentes vitesses de transmission dans chacune des trois langues. Seul l’un des neuf flux doit être lu à la fois, mais il existe deux types par lesquels ils s’excluent mutuellement : le langage et la vitesse de transmission.
Pour cet exemple, les neuf flux reçoivent les numéros de flux suivants :
- 1-langue 1, taux de bits 1
2-langage 1, taux de bits 2
3 langues 1, taux de bits 3
4-langue 2, taux de bits 1
5 langues 2, débit binaire 2
6 langues 2, débit binaire 3
7-langue 3, taux de bits 1
8 langues 3, taux de bits 2
9-langage 3, débit binaire 3
Ce scénario peut être implémenté à l’aide des quatre objets d’exclusion mutuelle suivants :
- Le premier objet d’exclusion mutuelle comprend les flux 1, 2 et 3, qui sont mutuellement exclusifs par vitesse de transmission. Chaque flux a son propre enregistrement.
- Le deuxième objet d’exclusion mutuelle comprend les flux 4, 5 et 6, qui s’excluent mutuellement par vitesse de transmission. Chaque flux a son propre enregistrement.
- Le troisième objet d’exclusion mutuelle comprend 7, 8 et 9, et s’exclut mutuellement par vitesse de transmission. Chaque flux a son propre enregistrement.
- Le quatrième objet d’exclusion mutuelle contient trois enregistrements, le premier incluant les flux 1, 2 et 3. la seconde, y compris les flux 4, 5 et 6 ; et le troisième, y compris les flux 7, 8 et 9. Ces enregistrements sont mutuellement exclusifs par langue.
Lors de la lecture d’un fichier créé de cette façon, l’application de diffusion en continu sélectionne la langue en premier, car elle est moins susceptible de changer au milieu de la présentation, puis de sélectionner une vitesse de transmission.
Création et configuration d’objets d’exclusion mutuelle
La liste suivante résume le processus de configuration d’un objet d’exclusion mutuelle :
- Créez un objet d’exclusion mutuelle.
- Définissez le type d’exclusion mutuelle.
- Configurez l’objet exclusion mutuelle en ajoutant des enregistrements et les flux associés.
- Ajoutez l’objet exclusion mutuelle au profil.
Pour créer et configurer un objet d’exclusion mutuelle
Appelez IMFASFProfile :: CreateMutualExclusion pour créer un objet d’exclusion mutuelle vide.
Appelez IMFASFMutualExclusion :: setType pour définir le critère du flux s’excluant mutuellement.
Les flux peuvent être mutuellement exclusifs par langue, vitesse de transmission, présentation et critère personnalisé. Le type est représenté sous la forme d’un GUID. Pour obtenir la liste de ces constantes, consultez GUID de type d’exclusion mutuelle ASF.
Appelez IMFASFMutualExclusion :: AddRecord pour ajouter un enregistrement à l’objet exclusion mutuelle.
Cette méthode ajoute un enregistrement vide et lui attribue un index d’enregistrement commençant à zéro.
Appelez IMFASFMutualExclusion :: AddStreamForRecord pour ajouter le numéro de flux à l’enregistrement spécifié par l’index d’enregistrement.
Chaque enregistrement comprend un ou plusieurs flux. Chaque flux d’un enregistrement s’exclut mutuellement de tous les flux dans tous les autres enregistrements. Pour obtenir le nombre de flux dans un enregistrement, appelez IMFASFMutualExclusion :: GetStreamsForRecord en spécifiant l’index d’enregistrement.
Pour supprimer un flux de l’enregistrement, appelez IMFASFMutualExclusion :: RemoveStreamFromRecord et spécifiez l’index d’enregistrement et le numéro de flux.
Appelez IMFASFProfile :: AddMutualExclusion pour ajouter l’objet exclusion mutuelle configurée au profil.
Énumération d’objets d’exclusion mutuelle dans un profil
Si IMFASFProfile :: AddMutualExclusion s’exécute correctement, il assigne un index à l’objet spécifié, en commençant à zéro.
Pour énumérer les objets d’exclusion mutuelle associés à un profil, appelez IMFASFProfile :: GetMutualExclusionCount et parcourez la liste en appelant IMFASFProfile :: GetMutualExclusion. Les index d’exclusion mutuelle sont séquentiels et sont compris entre 0 et un de moins que le nombre de flux récupérés par GetMutualExclusionCount.
Un objet d’exclusion mutuelle est supprimé du profil en appelant IMFASFProfile :: RemoveMutualExclusion. Le profil réaffecte les index d’exclusion mutuelle afin qu’ils soient séquentiels à partir de zéro. Cela remplace les index précédemment stockés, qui ne sont plus valides après l’appel de cette méthode. Cela libère les enregistrements de flux d’exclusion mutuelle associés.
Suppression d’enregistrements dans un objet d’exclusion mutuelle
Pour supprimer un enregistrement d’un objet d’exclusion mutuelle, appelez IMFASFMutualExclusion :: RemoveRecord. Si cette méthode est réussie, l’objet exclusion mutuelle indexe les enregistrements restants afin qu’ils soient séquentiels à partir de zéro. L’application doit énumérer les enregistrements pour garantir l’index correct pour chaque enregistrement. Pour ce faire, appelez IMFASFMutualExclusion :: GetRecordCount et parcourez les enregistrements en appelant IMFASFMutualExclusion :: GetStreamsForRecord.
La suppression de l’enregistrement avec l’index le plus élevé n’a aucun effet sur les autres index.
Modification d’un objet d’exclusion mutuelle
Pour modifier la configuration de l’objet exclusion mutuelle dans le profil, l’application doit remplacer l’objet exclusion mutuelle existant par un autre objet qui contient les nouveaux paramètres.
Pour modifier la configuration de l’objet exclusion mutuelle dans le profil
Énumérez les objets d’exclusion mutuelle dans le profil pour récupérer l’objet qui doit être modifié.
Appelez IMFASFMutualExclusion :: Clone pour cloner l’objet exclusion mutuelle.
Configurez l’objet cloné si nécessaire.
Appelez IMFASFProfile :: RemoveMutualExclusion pour supprimer l’ancien objet exclusion mutuelle du profil.
Appelez IMFASFProfile :: AddMutualExclusion pour ajouter l’objet d’exclusion mutuelle mis à jour au profil.