Pour créer des fichiers ASF à l’aide de codecs tiers
[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par lecteur source et enregistreur récepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Vous pouvez utiliser le Kit de développement logiciel (SDK) au format Windows Media pour créer des fichiers ASF qui contiennent un média numérique encodé avec n’importe quel codec de votre choix. Lorsque vous utilisez un codec autre que celui inclus avec ce KIT de développement logiciel (SDK), vous devez effectuer les étapes suivantes.
- Encodez le contenu avec le codec souhaité.
- Recherchez ou créez une valeur GUID pour identifier le contenu encodé avec le codec utilisé à l’étape 1.
- Créez un profil ou modifiez un profil existant à utiliser avec le contenu encodé.
- Créez un flux pour le contenu encodé avec le type principal approprié. Pour plus d’informations sur les principaux types de médias, consultez Types de médias. Utilisez le GUID identifié à l’étape 2 comme sous-type multimédia.
- Définissez le débit binaire et la fenêtre de mémoire tampon pour le flux sur des valeurs qui n’entraînent pas de dépassement de mémoire tampon. Vous devez être en mesure d’obtenir ces valeurs à partir du codec au moment de l’encodage. Les composants du runtime du KIT de développement logiciel (SDK) case activée les valeurs de la fenêtre de débit/mémoire tampon et supprimer des exemples si nécessaire pour que les données données s’intègrent à ces valeurs. Si vous définissez les valeurs de manière incorrecte, le fichier ne sera pas diffusé correctement, ce qui entraîne une lecture médiocre.
- Pour les flux vidéo, vous devez définir le membre biCompression de la structure BITMAPINFOHEADER contenue dans la structure WMVIDEOINFOHEADER sur la valeur FOURCC appropriée pour le contenu. Cette valeur doit être égale aux quatre premiers octets du GUID de sous-type. Par exemple, si biCompression est MAKEFOURCC('T','E','S','T')=0x54455354, le GUID de sous-type commence comme suit : 54455354-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
- Créez un objet writer et chargez le profil créé à l’étape précédente. Pour plus d’informations sur l’écriture de fichiers, consultez Écriture de fichiers ASF.
- Effectuez une boucle dans les entrées du fichier et affectez des propriétés d’entrée pour chacune d’elles comme vous le feriez normalement. Pour plus d’informations sur les entrées, consultez Utilisation des entrées. Pour le flux encodé avec un codec tiers, définissez le pointeur d’interface IWMInputMediaProps sur NULL avant d’appeler IWMWriter::BeginWriting.
- Utilisez le nouveau profil créé à l’étape précédente pour écrire le fichier. Transmettez les exemples compressés à l’aide de IWMWriterAdvanced::WriteStreamSample au lieu de IWMWriter::WriteSample. Pour la vidéo, vous devez spécifier quels exemples sont des images clés en passant WM_SF_CLEANPOINT comme paramètre dwFlags .
Pour traiter et décompresser le flux encodé avec un codec tiers, vous devez lire des exemples de flux compressés. Votre application de lecture doit également gérer les exemples de décompression pour le flux.
Placement de flux MPEG-2 dans ASF
Notes
Cette rubrique s’applique aux applications qui utilisent le Kit de développement logiciel (SDK) au format Windows Media pour placer MPEG-2 (ou d’autres formats de compression qui utilisent des images B) dans le conteneur de fichiers ASF.
L’objet writer exige que tous les exemples d’entrée aient des horodatages, et il suppose que chaque exemple d’entrée a une heure de présentation postérieure à celle qui l’a précédé. Bien que pratiquement toutes les vidéos non compressées et même certains flux vidéo compressés répondent à ces conditions, ce n’est pas le cas des flux MPEG-2. Dans MPEG-2, tous les exemples ne sont pas horodatés, et lorsque des images B sont présentes, l’ordre de décodage de l’exemple n’est pas le même que l’ordre de rendu. Lorsque l’objet writer rencontre des exemples dans le désordre, il les réorganise dans l’ordre « correct ». Par conséquent, pour stocker des flux MPEG-2 en mode natif (non décodés) dans un conteneur ASF, vous devez effectuer les étapes suivantes :
Lors de l’écriture du fichier :
- Ajoutez une extension d’unité de données de taille fixe (DUE) à chaque exemple d’entrée qui contiendra une structure contenant les valeurs réelles d’heure de début et d’heure d’arrêt MPEG pour l’exemple. Utilisez -1 pour ces valeurs si l’exemple n’a pas d’horodatage.
- Donnez à l’objet writer des horodatages d’entrée « factices » qui augmentent constamment afin qu’il écrive les exemples dans le fichier exactement dans le même ordre qu’ils sont reçus. Les horodatages factices doivent correspondre approximativement aux heures de présentation réelles, telles qu’elles sont calculées en moyenne au fil du temps. Les horodatages factices formeront le chronologie recherché. Par conséquent, s’ils diffèrent par rapport aux horodatages réels, les opérations de recherche sur le fichier produisent des résultats inattendus. Toutefois, une gigue limitée entre les heures d’échantillonnage n’affectera pas sérieusement les opérations de recherche.
Lors de la lecture du fichier :
- Pour chaque exemple lu à partir du fichier, examinez la valeur DUE. S’il contient une heure de début supérieure ou égale à zéro, copiez cette valeur dans l’horodatage de l’exemple de sortie avant d’être remis au décodeur. Définissez tous les autres horodatages sur les exemples de sortie sur NULL. Dans DirectShow, pour cela, appelez IMediaSample::SetTime(NULL,NULL).
Rubriques connexes
-
Pour fournir des exemples compressés avec le lecteur asynchrone
-
Pour récupérer des exemples de flux avec le lecteur synchrone