11
votes

Comment diffuser du contenu partiel avec ASP.NET MVC FiletrestreamResult

Nous utilisons un fichier filtrage pour fournir des données vidéo à un lecteur vidéo de Silverlight MediaElement: xxx

Malheureusement, le lecteur vidéo Silverlight télécharge tout le fichier vidéo avant de commencer à jouer. Ce comportement est attendu comme l'action Aperçu ne prend pas en charge le téléchargement de contenu partiel.

(Note latérale: Si le fichier est hébergé dans un répertoire virtuel IIS, nous pouvons commencer la lecture à n'importe quel endroit. Dans la vidéo alors qu'il est encore téléchargé. Toutefois, pour des raisons de sécurité et d'audit, nous ne pouvons pas fournir de lien de téléchargement direct. Donc, ce n'est pas une option.)

Comment pouvons-nous améliorer l'action du contrôleur Pour prendre en charge du contenu partiel HTTP?

Je suppose que nous devons d'abord informer le client que nous l'appuyons (ajout d'une "annonce d'acceptation: octets" en-tête à une demande de tête), alors nous avons Pour évaluer l'en-tête HTTP "Plage" et diffuser la plage de fichiers demandée avec un code de réponse de 206. Est-ce que fonctionnera avec ASP.NET MVC hébergé sur IIS6? Y a-t-il déjà un code disponible?

Voir aussi:


0 commentaires

3 Réponses :


0
votes
  1. Vous devez la mettre en œuvre par vous-même. Et oui, cela fonctionnera sur IIS6.
  2. Si vous pouvez utiliser IIS7, vous pouvez probablement mieux tirer parti de l'extensibilité IIS7 ( Exemple ).

0 commentaires

-2
votes

Ensuite, vous devez avoir besoin de module d'étranglement :)

L'idée est de calculer le débit de votre flux vidéo, puis d'envoyer autant que nécessaire au client. Vous avez donc besoin (très brièvement) pour lire un bloc de votre flux et l'envoyer au client et dormir pendant une seconde.

thread.sleep (1000) n'est pas vraiment une bonne idée de gérer les ressources IIS afin que vous ayez besoin de faire des choses de manière asynchrone. Iaisyncresultsult sera votre ami.

Il y a beaucoup de place pour toutes sortes d'optimisations.

Et la dernière chose ... Je l'ai fait fonctionner comme un simple httphandler, pas comme MVC ActionResult. Si c'est possible dans votre webiste, je recommande de le faire comme un gestionnaire.


0 commentaires

5
votes

Il existe un projet sur CodePlex qui donne cette fonctionnalité exacte.

http://mediatrediakingmvc.codeplex.com/

Jetez un coup d'oeil. Il a été créé spécifiquement pour ce scénario où vous souhaitez avoir une action représentant une demande de ressource virtuelle et renvoyer un contenu partiel si nécessaire sans demander au développeur de faire beaucoup pour le soutenir (filtre d'action et choix de types de résultat.) < / p>


0 commentaires