Partage de données entre Flux
Notes
Ces API sont déconseillées. les Applications doivent utiliser le filtre d' accrochage d’exemple ou implémenter un filtre personnalisé pour obtenir des données à partir d’un graphique de filtre DirectShow.
Le traitement des données multimédias nécessite généralement une grande quantité de ressources système. par conséquent, vous devez éviter de copier les données dans la mesure du possible. L’architecture de streaming prend en charge les exemples de flux partagés, un mécanisme qui déplace les données d’un flux vers un autre sans les copier. Cette mémoire tampon permet le transport efficace de données entre deux flux, même si le flux de destination ne prend pas spécifiquement en charge le format de données sous-jacent.
Par exemple, supposons que vous disposez d’un flux multimédia avec trois flux de données : vidéo et audio, et les données d’URL sont horodatées pour correspondre au contenu de la vidéo. Vous souhaitez écrire une application qui ajoute une mention de droits d’auteur sur chaque image vidéo et écrit les données dans un autre flux de données pour le stockage, mais votre application ne comprend aucun format de données à l’exception du flux vidéo. Pour le flux vidéo, vous créez un exemple attaché à la surface DirectDraw souhaitée. Vous pouvez ensuite créer un flux de sortie en appelant la méthode IDirectDrawMediaStream :: CreateSample avec ce pointeur sur la même surface ou IMediaStream :: CreateSharedSample. Dans les deux cas, les flux d’entrée et de sortie partagent la surface DirectDraw. Étant donné que vous comprenez le format vidéo, vous pouvez accéder à cette surface en fonction des besoins.
Pour récupérer les autres pointeurs de flux source (audio et URL), énumérez le flux de conteneur source et récupérez les pointeurs vers les flux qui ne sont pas des vidéos. Chacun de ces flux source est associé à un flux de sortie dans le conteneur du flux de sortie. Récupérez ces pointeurs de sortie en appelant la méthode IMultiMediaStream :: GetMediaStream sur le conteneur de sortie avec chacun des pointeurs de flux source. Les étapes de ce processus sont décrites ci-dessous.
- Appelez IMultiMediaStream :: EnumMediaStreams pour récupérer un pointeur vers un flux source. Assurez-vous qu’il ne s’agit pas du flux vidéo, car votre application comprend déjà son format.
- Appelez IMultiMediaStream :: GetMediaStream sur le flux de conteneur de sortie avec le pointeur de l’étape 1. Cela retourne un pointeur vers le flux de sortie souhaité.
- Appelez AllocateSample sur le flux source.
- Appelez CreateSharedSample sur le flux de sortie.
- Appelez Update sur le flux source pour lire les données.
- Appelez Update sur le flux de sortie pour écrire les données.
Répétez ces étapes pour chaque flux dont le format n’est pas pris en charge. Lorsque les deux exemples terminent la mise à jour, le flux de sortie contient toutes les données du flux source et vous avez terminé.