HttpWebResponse avec MJPEG et multipart/x-mixte-remplacer; boundary=--myboundary le contenu de la réponse type de caméra de sécurité ne fonctionne pas
J'ai un ASP.NET l'application que j'ai besoin d'afficher un flux vidéo provenant d'une caméra de sécurité. La vidéo a un contenu de type "multipart/x-mixte-remplacer; boundary=--myboundary" avec les données de l'image entre les limites. J'ai besoin d'aide avec le passage du flot des données par le biais de ma page, de sorte que le côté client plugin j'ai peut consommer le flux comme il le ferait si je l'ai consulté à l'appareil photo de l'interface web directement.
Le code suivant ne fonctionne pas:
//Get response data
byte[] data = HtmlParser.GetByteArrayFromStream(response.GetResponseStream());
if (data != null)
{
HttpContext.Current.Response.OutputStream.Write(data, 0, data.Length);
}
return;
OriginalL'auteur arri.io | 2010-01-13
Vous devez vous connecter pour publier un commentaire.
Bien, si vous voulez que vos clients de voir le flux mjpeg, vous devez envoyer à l'ensemble de la réponse http. Client HTTP comme navigateur ou un lecteur multimédia comme VLC besoin d'un flux mjpeg qui ressemble à :
REMARQUE: Comme Ergousha dit dans une réponse, vous devez avoir une ligne vide après la longueur du Contenu du champ.
Par ailleurs, pourquoi ne pas rediriger votre client directement sur le flux mjpeg ?
Vous pouvez utiliser http://ipcam/mjpg/video.mjpg caméras IP AXIS, par exemple.
Si vous avez besoin de l'image à travers HTTP, vous devez régler correctement l'en-tête et le contenu MIME-type
image/jpeg. Pour décoder l'image, vous devez obtenir l'octet de données et vous obtiendrez un codage jpeg. Ensuite, vous aurez à décoder jpeg pour obtenir une image dans un format spécifique (quelque chose comme yuv420p, je pense). J'ai vérifier sur mon appareil-photo d'ip, et de ses flux n'est pas encodé en base64, je pense.
Précis de vos besoins, je vais essayer de les aider davantage.
my2c
EDIT:
Bien, je suppose que vous faites quelque chose comme :
Que de dire que vous devez envoyer le bon en-tête de votre client. Pour être sûr d'utiliser un outil comme wireshark pour espionner le paquet et être sûr que, après votre client a émis un HTTP GET vous envoyez lui le bon flux MJPEG (comme celui que je décris au début de mon post ...)
m2c
Être plus précis sur vos difficultés. En regardant votre extrait de code, il semble que vous ne devez lire qu'une partie de la réponse. Avec HTTP/MJPEG vous avez à continue de lire les paquets TCP et de leur renvoyer, d'où le pseudo-code dans ma réponse. Je suppose que le GetByteArrayFromStream appel partiellement lire les données, de sorte que vous avez envoyé à votre client que des données partielles. Vous avez pu le lire sur le canal TCP, jusqu'à ce qu'il ferme ! Vérifiez ce que vous recevez / ce que vous envoyez avec wireshark, vous aurez la vérité terrain. Si j'ai mal compris votre problème, précis, s'il vous plaît ...
Oui, je suis sûr que nous aurons besoin d'aller un peu plus loin et utiliser quelque chose de moins abstrait comme
TcpClient
. Je suis en train d'essayer de faire la même chose que @arri.moi!Veuillez motif downvotes ! de cette façon, les réponses peuvent être mieux ...
oui, bonne chance avec votre code 🙂
OriginalL'auteur neuro
Bonne explication sur la façon dont le flux mjpeg ressemble. Je voudrais ajouter une pointe;
il y a toujours 2 caractère de nouvelle ligne avant les données réelles. Si vous faites une ligne, il ne marche pas.
OriginalL'auteur Ergousha
Ce qui est de l'encodage des données d'image? Est-il Base64?
Fondamentalement, vous aurez à analyser les données d'image à partir de la réponse, en Base64 décoder en octets, puis envoyer l'image vers le client.
OriginalL'auteur feroze