2017-06-18 4 views
0

J'essaie de diffuser une vidéo à partir d'un serveur Web via HTTP. Pour diffuser la vidéo que je crée actuellement un MediaSource:UWP MediaSource avec authentification via HTTP

MediaSource.CreateFromUri(new Uri("https://example.com/video.mp4")); 

Et puis-je ajouter que MediaSource à mon MediaPlayerElement et les jeux vidéo.

Cela fonctionne tant que le serveur n'a pas besoin d'authentification. Mais maintenant j'ai un serveur qui utilise l'authentification de base pour que la vidéo ne démarre pas.

Mes vieilles demandes ressemblaient à ce

GET /video.mp4 HTTP/1.1 Range: bytes=0- Accept: */* User-Agent: NSPlayer/12.00.15063.0332 WMFSDK/12.00.15063.0332 GetContentFeatures.DLNA.ORG: 1 Accept-Encoding: gzip, deflate Host: example.com Connection: Keep-Alive enter code here

Maintenant, ai-je besoin d'avoir également une authentification en-tête, mais je ne sais pas comment y parvenir (parce que je ne peux pas utiliser mon propre HttpClient) :

Authorization: Basic dXNlcjpwYXNzd29yZA== 

Je trouve cette question UWP MediaElement source from http with authentication qui est similaire à mon problème. L'auteur a résolu son problème, mais n'a malheureusement pas décrit exactement comment il l'a fait.

Quelqu'un peut-il aider ici? Comment puis-je obtenir MediaSource ou MediaPlayerElement pour utiliser les informations d'identification/authentification de base?

Répondre

0

Comme vous pouvez le voir, la méthode MediaSource.CreateFromUri(Uri) peut uniquement accepter un paramètre Uri, il n'existe aucun moyen de définir l'en-tête d'authentification avec cette méthode.

Pour lire un fichier vidéo en ligne nécessitant une authentification, nous pouvons tirer parti de HttpClient qui peut effectuer des requêtes HTTP avec les informations d'identification ou les en-têtes requis manuellement.

Et puis on peut aussi avoir besoin d'une classe personnalisée IRandomAccessStream qui construit au-dessus de HttpClient, afin que nous puissions utiliser les en-têtes de plage pour demander juste une séquence d'octets à partir du serveur et aurait pas besoin de télécharger le fichier entier pour diffuser il.

Pour plus d'informations, vous pouvez vous référer à MediaPlayerElementWithHttpClient sur GitHub, qui implémente un HttpRandomAccessStream class.

La classe HttpRandomAccessStream est une enveloppe au-dessus de HttpClient qui peuvent diffuser le contenu de l'Internet et peut être consommé comme IRandomAcessStream ou IRandomAccessStreamWithContentType.

Et lors de l'utilisation solution ci-dessus, s'il vous plaît noter: Le serveur doit prendre en charge les en-têtes HTTP Range.