Création d'un flux vidéo MJPEG en c#

j'ai des images envoyées à ma base de données à partir d'une source vidéo distante à environ 5 images par seconde comme images JPEG. J'essaie de trouver comment mettre ces images dans un format vidéo pour que je puisse diffuser un flux vidéo en direct à Silverlight.

il semble logique de créer un flux MJPEG mais j'ai quelques problèmes. Tout d'abord, j'essayais de diffuser via une requête HTTP, donc je n'avais pas d'accord avec les sockets, mais peut-être que c'est en train de casser mon code.

Si j'essaie de surf à mon flux de QT j'obtiens une erreur vidéo, Media player affiche la première image de l'image et Silverlight se bloque :)

voici le code que streams - puisque je type de contenu utilisé de cette façon ne peut être envoyé que lorsque je sais que ce n'est pas idéal et pourrait être la cause racine. Toutes les images arrivent via un objet LINQ2SQL.

j'ai déjà essayé de simplement mettre à jour la source d'image d'un contrôle d'image dans Silverlight mais le clignotant n'est pas acceptable. Si Silverlight ne supporte pas MJPEG alors non point même continuer, mais il semble que ce soit le cas. J'ai accès au h. 264 images arrivent mais cela semble plus compliqué via MP4.

    Response.Clear();
    Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary";
    ASCIIEncoding ae = new ASCIIEncoding();
    HCData data = new HCData();
    var videos = (from v in data.Videos
                 select v).Take(50); // sample the first 50 frames
    foreach (Video frame in videos)
    {
        byte[] boundary = ae.GetBytes("rn--myboundaryrnContent-Type: image/jpegrnContent-Length:" + frame.VideoData.ToArray().Length + "rnrn");
        var mem = new MemoryStream(boundary);
        mem.WriteTo(Response.OutputStream);
        mem = new MemoryStream(frame.VideoData.ToArray());
        mem.WriteTo(Response.OutputStream);
        Response.Flush();
        Thread.Sleep(200);
    }

Merci!

EDIT: j'ai le flux de travail dans firefox donc, si je surf sur la page je vois la vidéo! mais rien d'autre n'accepte que le format. Pas IE, SL, Media player-rien.

25
demandé sur typemismatch 2008-10-19 20:58:38

5 réponses

j'ai fait MJPEG il y a longtemps (il y a 3-4 ans) et je me gratte la tête en essayant de me souvenir des détails et je ne peux tout simplement pas. Mais, si c'est possible, je suggérerais de trouver une sorte de site web qui diffuse du contenu MJPEG et allume wireshark/ethereal et voir ce que vous obtenez par-dessus le fil. À mon avis, il vous manque des en-têtes HTTP nécessaires pour lesquels firefox est un peu plus indulgent.

si vous ne pouvez pas trouver un exemple de flux MJPEG sur internet, beaucoup de webcams ont logiciel qui vous donne un flux MJPEG. L'application avec laquelle j'ai travaillé était une console pour plusieurs caméras de sécurité, donc je sais que c'est une implémentation commune pour tous les types de caméras (si elles prennent en charge une interface web).

2
répondu dviljoen 2008-11-05 21:59:32

je suis loin d'être un expert en streaming MJPEG, mais en regardant la source de MJPG-streamer sur sourcefourge je pense que vous devriez envoyer chaque image séparément, en écrivant la limite avant et après chacun d'eux. Vous ne devez bien sûr pas écrire le type de contenu dans la limite de fermeture.

1
répondu csgero 2008-11-05 10:22:51

tout d'abord, écrivez vos cadres mjpeg dans des fichiers séparés. Vous devriez alors être en mesure de les ouvrir dans Phototshop (ceci vérifiera indépendamment que vous parsez le flux correctement). Si cela échoue, parier que vous avez des en-têtes HTTP intégrés dans vos données image.

0
répondu dicroce 2008-10-19 17:11:18

avez-vous regardé diverses configurations de webcam qui existent sur le net? Beaucoup d'entre eux une sorte de basse résolution mise à jour sans scintillement. Vous devriez être capable de désosser ces types de sites pour des indices supplémentaires à votre problème.

certains sites créent une animation GIF, peut-être que c'est une option pour que l'utilisateur puisse voir la dernière minute ou plus.

0
répondu John Dyer 2008-10-20 19:36:57

A propos de votre édition: MJPEG est supporté par Firefox et Safari. Cependant d'autres applications ne le font pas, comme Explorer ou Silverlight en fonction de ce que vous en faites.

0
répondu QueueHammer 2008-12-17 19:48:57