Partager via


Configuration de l’objet Splitter ASF

L’objet de fractionnement ASF est un objet de couche WMContainer qui analyse l’objet de données ASF d’un fichier ASF (Advanced Systems Format). Une fois le séparateur créé et initialisé pour analyser l’objet de données ASF d’un fichier multimédia, le fractionnement doit être configuré pour générer des exemples pour des flux spécifiques. Appelez IMFASFSplitter::SelectStreams pour sélectionner les flux requis.

Si vous le souhaitez, une application peut également la configurer pour générer des exemples dans l’ordre inverse ou générer des exemples pour le contenu protégé. Pour définir ces options, appelez IMFASFSplitter::SetFlags et transmettez la combinaison de bits requise des indicateurs pris en charge. Avant d’appeler cette méthode, le client doit effectuer l’appel IMFASFSplitter::Initialize avec succès ; Sinon, SetFlags échoue avec MF_E_NOT_INITIALIZED code d’erreur. Pour plus d’informations sur l’initialisation du séparateur, consultez Création de l’objet Fractionnement ASF.

Pour case activée si cet indicateur est actuellement défini sur le séparateur, appelez IMFASFSplitter::GetFlags.

Sélection de Flux pour l’analyse

Pendant le processus d’initialisation via l’appel IMFASFSplitter::Initialize , le séparateur détecte le nombre de flux et les identificateurs de flux dans le fichier ASF. Par défaut, aucun flux n’est sélectionné par le fractionnement. L’application doit sélectionner les flux en appelant IMFASFSplitter::SelectStreams. Cette méthode prend un tableau de nombres de flux. Pour obtenir le numéro de flux d’un flux, appelez IMFASFProfile::GetStream sur le profil ASF ou appelez IMFStreamDescriptor::GetStreamIdentifier sur le descripteur de flux. (Vous pouvez obtenir le profil ASF et le descripteur de flux à partir de l’objet ContentInfo.) Si le client transmet un numéro de flux qui n’est pas reconnu par le séparateur, il échoue avec une erreur MF_E_INVALIDSTREAMNUMBER .

L’appel de SelectStreams efface les sélections précédentes. Tout flux qui n’est pas spécifié dans le tableau n’est pas sélectionné. Pour obtenir la liste des flux actuellement sélectionnés, appelez IMFASFSplitter::GetSelectedStreams. Cette méthode prend un pointeur vers un tableau, que la méthode remplit avec les numéros de flux. Si la taille du tableau est inférieure au nombre de flux sélectionnés, la méthode échoue avec l’erreur MF_E_BUFFERTOOSMALL . Dans ce cas, la méthode retourne le nombre de flux sélectionnés dans le paramètre pwNumStreams . Vous pouvez ensuite utiliser ce nombre pour allouer un tableau de la taille appropriée et appeler à nouveau la méthode.

Pour obtenir un exemple de code, consultez « Sélectionner un flux pour l’analyse » dans Tutoriel : Lecture d’un fichier ASF.

Paramètre de lecture inversée

Pendant le processus d’initialisation du séparateur, il détermine si le contenu ASF prend en charge la lecture inversée. Si c’est le cas, le séparateur peut être configuré pour générer des exemples dans l’ordre inverse en définissant l’indicateur MFASF_SPLITTER_REVERSE . Si le contenu ne prend pas en charge la lecture inversée, IMFASFSplitter::SetFlags retourne MF_E_INVALIDREQUEST, mais l’indicateur est défini sur le séparateur.

Si le séparateur est configuré pour analyser dans le sens inverse, le fractionnement démarre toujours l’analyse à la fin de la mémoire tampon qui contient l’objet de données ASF. Par conséquent, pour l’analyse inverse, le décalage de données et la longueur des données à analyser doivent être définis de manière appropriée. Pour plus d’informations sur la définition des valeurs correctes, consultez Génération d’exemples de flux à partir d’un objet de données ASF existant.

Paramètre de contenu protégé

Le séparateur peut être configuré pour fonctionner avec le contenu de chiffrement au niveau des paquets en définissant le MFASF_SPLITTER_WMDRM via IMFASFSplitter::SetFlags. Cela indique au répartiteur de fournir des exemples de contenu protégé par La gestion des droits numériques (DRM) Windows Media. Lorsque cet indicateur est défini, les exemples générés par le fractionnement contiennent des informations nécessaires pour déchiffrer les données multimédias et reconstruire les images, telles que l’attribut MFSampleExtension_PacketCrossOffsets . Cet attribut est un objet blob qui contient un tableau de DWORD. Chaque DWORD vous fournit les limites de charge utile de l’image par rapport au début de l’image. Si cet attribut n’est pas présent, la trame est contenue dans une seule charge utile. En règle générale, les exemples générés par le séparateur contiennent plusieurs mémoires tampons multimédias. L’application peut copier toutes les mémoires tampons dans une mémoire tampon contiguë en appelant IMFSample::ConvertToContiguousBuffer. La mémoire tampon résultante contient l’image et la valeur de l’attribut contient des décalages dans cette mémoire tampon.

Séparateur ASF