Gestion / réception de flux vidéo webcam en direct depuis WebRTC ou tout autre mécanisme de capture basé sur un navigateur vers le serveur à l'aide d'ASP.NET MVC
Nous avons besoin de capturer un flux vidéo en direct à partir de WebRTC (ou tout autre mécanisme de capture de la part du client de la webcam, même si elle n'est pas prise en charge sur tous les navigateurs, mais comme un PoC).
Cette vidéo en direct doit être traité par un serveur composant (ASP.Net MVC /API Web), j'imagine que le code sur le serveur va ressembler:
[HttpPost]
public ActionResult HandleVideoStream(Stream videoStream)
{
//Handle the live stream
}
À la recherche d'un mot clé ou un lien utile.
Nous avons déjà mis en place un moyen pour envoyer des images à l'aide du base64 jpg, mais ce n'est pas du tout utile, car il ya une surcharge énorme de l'encodage base64 et parce que nous pourrions utiliser toute l'encodage vidéo pour envoyer la vidéo de manière plus efficace (envoyer la différence entre les images à l'aide de VPx -vp8 - par exemple), la solution a besoin de capturer une vidéo à partir de la webcam du client et envoi direct (non enregistré) vers le serveur (asp.net) comme un ruisseau ou des blocs de données qui représente la nouvelle vidéo de données.
source d'informationauteur Sawan
Vous devez vous connecter pour publier un commentaire.
Votre question est trop vaste et en demandant des ressources hors site est considéré comme hors-sujet sur stackoverflow. Afin d'éviter l'opinion sujettes à des déclarations, je vais limiter la réponse à des concepts généraux.
Flash/RTMP
WebRTC
n'est pas encore disponible sur tous les navigateurs de sorte que le plus largement utilisé façon de capturer la webcam d'entrée à partir d'un navigateur actuellement en cours d'utilisation est via un plugin. La solution la plus courante utilise le Adobe Flash Playerque les gens l'aiment ou pas. Cela est dû à laH.264
support d'encodage dans les versions récentes, avecAAC
MP3
etc. pour l'audio.Le streaming est accompli à l'aide de la RTMP protocole qui a été initialement conçu pour le Flash de la communication. Le protocole fonctionne sur
TCP
et a de multiples saveurs, commeRTMPS
(RTMP
surTLS/SSL
pour le chiffrement),RTMPT
(RTMP
encapsulé dansHTTP
pour le pare-feu de traversée).Le flux utilise généralement le FLV format de conteneur.
Vous pouvez facilement trouver des projets open-source qui utilisent Flash pour capturer la webcam d'entrée et de le diffuser à un
RTMP
serveur.Sur le côté serveur, vous avez deux options:
RTMP
serveur de parler directement à l'envoi de la bibliothèque et de lire le fluxRTMP
serveurs et mettre en œuvre un client dansASP
(vous pouvez aussi transcoder le flux entrant à la volée en fonction de ce que vous essayez de faire avec votre application).WebRTC
Avec
WebRTC
vous pouvez soit:WebRTC
avec le serveur en cours de l'un des pairs.Une solution possible pour le second scénario, je n'ai personnellement pas encore testé, vous est proposé par Adam Roach:
Source
Cela utiliser
VP8
etVorbis
à l'intérieur deWebM
surSRTP
(UDP
pouvez également utiliserTCP
).À moins que vous pouvez mettre en œuvre
RTCPeerConnection
directement dansASP
avec un wrapper vous aurez besoin d'un moyen de transmettre le flux de votre serveur d'application.La
PeerConnection API
est une fonctionnalité puissante deWebRTC
. Il est actuellement utilisé par le WebRTC version de Google Hangouts. Vous pouvez lire: Comment utiliser Hangouts WebRTC.Convenu que c'est une question hors-sujet, mais j'ai récemment rencontré le même problème/exigence, et ma solution a été d'utiliser MultiStreamRecorder de WebRTCExperiments. Cela vous donne essentiellement un "blob" de l'audio/vidéo en flux de toutes les X secondes, et vous pouvez les télécharger à votre ASP.NET MVC ou WebAPI contrôleur comme l'a démontré ici. Vous pouvez soit vivre-processus de gouttes sur le serveur, partie par partie, ou de les enchaîner à un fichier et de processus, une fois que le flux s'arrête. Notez que les Api utilisées dans cette bibliothèque ne sont pas entièrement pris en charge dans tous les navigateurs, par exemple il n'y a pas de prise en charge d'iOS pour le moment.
Mon côté serveur analyse d'utilisateur requis pour parler des phrases complètes, donc, en plus j'ai utilisé PitchDetect.js pour détecter les silences dans le flux audio avant l'envoi de la partielle blob vers le serveur. Avec ce type de configuration, vous pouvez configurer votre client d'envoyer partielle gouttes de serveur après qu'ils aient fini de parler, plutôt que de toutes les X secondes.
Que pour la réalisation de 1-2 secondes de retard, je suggère de regarder dans les WebSockets pour la livraison, plutôt que de HTTP POST - mais vous devez jouer avec ces options et choisir le meilleur canal pour votre exigences.
La plupart des appareils-photo d'IP de ces journées d'utiliser l'encodage H264, ou MJPEG. Vous n'êtes pas clair sur ce genre de caméras sont utilisées.
Je pense que la vraie question est de savoir quels sont les composants qui sont là pour la création/édition vidéo et quel est le format vidéo nécessite-t-il. Seulement une fois que vous savez quel format dont vous avez besoin, vous pouvez transcoder/transformer votre vidéo comme nécessaire, donc vous pouvez le gérer sur le côté serveur.
Il ya un certain nombre de serveurs multimédia à transformer/transcoder, et quelque chose comme FFMPEG ou Unreal Media Server pouvez le transformer, le décoder, etc sur le côté serveur afin de l'obtenir à un format que vous pouvez travailler avec. La plupart des caméras IP, j'ai vu juste utiliser une H264 de navigation web player.
EDIT: Votre pire ennemi est va être votre retard. 1-2 secondes de retard va être difficile à atteindre.