Fonctionnalités de source réseau
La source réseau fournit l’implémentation de base pour la diffusion en continu de fichiers multimédias et expose l’interface IMFMediaSource . L’implémentation de la source réseau spécifique dépend du protocole utilisé pour ouvrir la source, tel que RTSP ou HTTP. Les sources réseau spécifiques au protocole étendent les fonctionnalités réseau de base. Pour plus d’informations sur les schémas et protocoles pris en charge, consultez Protocoles pris en charge.
Source réseau :
- Implémente des fonctionnalités telles que la mise en cache, la détection de proxy et la reconnexion automatique.
- Convertit les appels indépendants du protocole du programme de résolution source en appels spécifiques au protocole.
- Interagit avec la couche socket et le système d’exploitation. Analyse la description SDP et l’utilise comme données de configuration, et lit les données de flux à partir de la couche sockets sous-jacente. Lors de la réception, la source réseau est responsable de la réorganisation et de la demande de retransmissions de paquets.
Création d’une source réseau
La création d’une source multimédia pour une source à partir du réseau n’est pas différente d’une source multimédia pour un fichier local. L’application transmet l’URL de la source à des méthodes telles que IMFSourceResolver::CreateObjectFromURL ou IMFSourceResolver::BeginCreateObjectFromURL et spécifie l’indicateur MF_RESOLUTION_MEDIASOURCE. Pour plus d’informations sur l’utilisation de cet indicateur, consultez Utilisation du programme de résolution source.
Selon le schéma fourni par l’application, le programme de résolution source charge l’objet de gestionnaire de schéma approprié, qui expose l’interface IMFSchemeHandler . L’application peut également utiliser le gestionnaire de schéma directement pour créer la source réseau en appelant IMFSchemeHandler::BeginCreateObject.
Pour plus d’informations, consultez Gestionnaires de schémas et gestionnaires de Byte-Stream.
Media Foundation ne prend pas en charge les flux d’octets pour les sources réseau. L’objet de flux d’octets est uniquement pris en charge dans le scénario de contenu téléchargé. Toutes les données sont transmises le plus rapidement possible afin qu’elles puissent être enregistrées en tant que fichier sur l’ordinateur local. les serveurs web fournissent des données téléchargées. Il n’y a aucune communication entre le client et le serveur une fois le téléchargement commencé. Dans ce cas, le protocole de téléchargement HTTP est utilisé.
Si l’application demande au programme de résolution source de créer un objet de flux d’octets pour les schémas « http: », « mms: » ou « rtsp: », l’appel échoue avec l’erreur MF_E_UNSUPPORTED_SCHEME.
Notes
Dans Windows 7, la source réseau prend en charge les fichiers Windows Media Station (. NSC). Ces fichiers sont utilisés dans la diffusion en continu multidiffusion de contenu multimédia sur un réseau. Pour créer la source réseau pour un spécifié . Fichier NSC, l’application doit utiliser le programme de résolution source.
Si l’application utilise le gestionnaire de schéma, l’appel asynchrone ignore le paramètre dwFlags et retourne un pointeur vers la source réseau à l’achèvement.
L’illustration suivante montre le flux de données pour la diffusion multimédia en continu à l’aide de la source réseau.
Configuration de la source réseau
Cette rubrique décrit les fonctionnalités prises en charge par la source réseau et les options de configuration associées. Une application peut configurer la source réseau lors de la création de l’objet source réseau. Ces options sont stockées dans un objet IPropertyStore , que l’application doit transmettre le paramètre pProps des méthodes de résolution source ou IMFSchemeHandler::BeginCreateObject.
Reconnexion automatique
La fonctionnalité de reconnexion automatique de la source réseau permet à un client de se reconnecter automatiquement au serveur multimédia lorsque la connexion TCP au serveur échoue ou que le client ne parvient pas à recevoir des paquets. En cas d’échec de la connexion, la source réseau tente de se reconnecter au serveur multimédia à l’aide de la même configuration que celle utilisée dans la connexion précédente. Le processus de reconnexion est asynchrone. La source réseau déclenche l’événement MEReconnectStart lorsqu’il commence la reconnexion et l’événement MEReconnectEnd lorsque la reconnexion réussit ou échoue.
Si le nombre de tentatives de reconnexion dépasse la valeur maximale spécifiée par la propriété MFNETSOURCE_AUTORECONNECTLIMIT , l’opération de reconnexion est annulée. Le nombre de tentatives de reconnexion est stocké dans la propriété MFNETSOURCE_AUTORECONNECTPROGRESS .
La reconnexion automatique permet une lecture fluide du contenu multimédia même en cas d’échec de la connexion TCP au serveur multimédia. Pour une expérience de lecture fluide, le client doit disposer de suffisamment de données, au moins 1 à 2 minutes, dans son cache pour continuer la lecture jusqu’à la reconnexion. La quantité maximale de données que la source réseau peut mettre en mémoire tampon peut être définie dans la propriété MFNETSOURCE_MAXBUFFERTIMEMS .
Streaming rapide
Le client source réseau demande au serveur de diffuser certaines données au début du contenu à un rythme plus rapide que celui spécifié par le débit binaire du contenu. Si le démarrage rapide est activé sur le serveur, le serveur envoie un flux à débit binaire accéléré afin que le client puisse mettre en mémoire tampon une quantité suffisante de données plus rapidement qu’en temps réel. Cela améliore l’expérience utilisateur en réduisant les retards initiaux de mise en mémoire tampon, qui peuvent être causés par divers facteurs, tels que la faible vitesse de l’ordinateur client ou du réseau, et la bande passante disponible.
Pour spécifier la quantité de données de streaming rapide que le client peut demander, définissez la propriété MFNETSOURCE_ACCELERATEDSTREAMINGDURATION . Si la source réseau utilise UDP comme protocole de transport, spécifiez la quantité maximale de données de diffusion rapide en définissant la propriété MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION à la place.
La diffusion en continu rapide sur le client est également possible grâce à la fonctionnalité De cache rapide , à savoir la diffusion en continu de contenu à la demande plus rapidement que le temps réel et la mise en cache des données sur le cache local du client. Pour utiliser ce type de diffusion en continu rapide, le cache rapide doit être activé sur la source réseau et le serveur doit la prendre en charge. Lorsque le client demande du contenu à partir du serveur, la source réseau vérifie d’abord si le contenu se trouve déjà dans le cache du client. Si le contenu se trouve dans le cache local du client et n’a pas expiré, il est rendu. Si le contenu n’est pas dans le cache local ou a déjà expiré, le contenu est diffusé en continu et mis en cache, et la source réseau le lit à partir du cache local. Dans les requêtes suivantes, pour les playlists, seules les entrées manquantes sont mises en cache, puis lues. Si une entrée de playlist se trouve déjà dans le cache local du client, elle est lue à partir de là et n’est pas mise en cache à nouveau.
Par défaut, le cache rapide est activé sur le client source réseau. Toutefois, les facteurs suivants déterminent également si la fonctionnalité est utilisée :
- Le client doit disposer d’une bande passante supplémentaire disponible pour télécharger et mettre en cache le contenu plus rapidement que la vitesse normale.
- Le client doit disposer d’un espace disque suffisant. Si le client dispose de moins de 100 Mo d’espace disque libre après la mise en cache du contenu à la demande demandé, il n’est pas mis en cache, mais est diffusé en continu et rendu simultanément.
La fonctionnalité Fast Cache est contrôlée par la propriété MFNETSOURCE_CACHEENABLED .
Gestion des tampons
La source réseau fournit une gestion efficace de la mémoire tampon qui surveille l’état de la mémoire tampon sur le client. Par défaut, la source réseau met en mémoire tampon 5 secondes de données au démarrage. Cette valeur peut être configurée en définissant la propriété MFNETSOURCE_BUFFERINGTIME . En fonction de cette valeur de propriété, la source réseau calcule la taille de mémoire tampon suffisante pour garantir une lecture fluide et ininterrompue du contenu multimédia. Si cette propriété a la valeur 0, la gestion de la mémoire tampon est désactivée. Lorsque la quantité de contenu dans la mémoire tampon est faible, la source réseau démarre la mise en mémoire tampon et déclenche l’événement MEBufferingStarted pour indiquer que la mise en mémoire tampon a commencé. À la réception de cet événement, le pipeline arrête le rendu. Une fois la mise en mémoire tampon terminée, la source réseau déclenche l’événement MEBufferingStopped et le client peut recommencer le rendu.
Le client commence à afficher le contenu après avoir accumulé la quantité de données indiquée par la taille de mémoire tampon du premier exemple. Si cette valeur est inférieure à la taille de mémoire tampon calculée, la lecture démarre immédiatement. Ce comportement est très similaire à la fonctionnalité démarrage rapide.
La propriété MFNETSOURCE_MAXBUFFERTIMEMS stocke la quantité maximale de données pouvant être mises en mémoire tampon.
Sélection de la bande passante
Lorsqu’un client se connecte au serveur multimédia, dans le cadre de la configuration de la connexion, la source réseau effectue une mesure statique de paire de paquets pour estimer la bande passante de liaison initiale entre le client et le serveur. En fonction du résultat de cette mesure, le client peut sélectionner des flux audio et vidéo qui correspondent à la bande passante estimée. Cela garantit une lecture fluide du contenu multimédia en streaming.
Pendant la phase démarrage rapide, une mesure dynamique de paire de paquets est effectuée. Dans ce processus, le client reçoit de grandes quantités de données, qui peuvent être plusieurs paquets ou exemples.
Le résultat de la mesure dynamique de paire de paquets est plus précis que l’estimation de la bande passante de liaison retournée par la mesure statique de paire de paquets, car le processus de paire de paquets statique envoie un seul paquet de taille fixe, ce qui peut ne pas produire de résultats précis pour les réseaux à bande passante élevée.
L’application peut obtenir la bande passante estimée à l’aide de la propriété MFNETSOURCE_PPBANDWIDTH .
Les conditions réseau peuvent changer dynamiquement, entraînant des problèmes dans la lecture de la source réseau. La source réseau peut modifier la sélection initiale du flux du client en fonction du taux de réception et de l’état de la mémoire tampon. Par exemple, le client peut basculer vers un débit binaire inférieur pendant la congestion du réseau et revenir à un débit binaire plus élevé lorsque le trafic réseau s’est amélioré et que le client a accumulé une quantité suffisante de contenu mis en mémoire tampon.
Rubriques connexes