2011-09-01 2 views
3

Je suis en train de faire une application avec flux vidéo, et maintenant je ne peux envoyer qu'une seule image du serveur au client. Lorsque j'essaie d'envoyer plus d'une seule image sur le client, l'erreur suivante s'affiche: "Le paramètre n'est pas valide." à pictureBox1.Image = new Bitmap (ms);C# Video Streaming

code côté client:

while((data = cliente.receiveImage()) != null) 
{ 

    ms = new MemoryStream(data); 
    pictureBox1.Image = new Bitmap(ms); 
    ms.Close(); 

} 

code côté serveur (ce code est répété en continu):

servidor.sendImage(ms.GetBuffer()); 

Répondre

3

ms.GetBuffer() retourne l'ensemble de la mémoire tampon du flux de la mémoire, y compris toute partie inutilisée supplémentaire.
Vous devez appeler ToArray(), qui ne renvoie le contenu réel.

(Ou, vos données pourraient être invalides pour une autre raison, comme un problème dans sendImage ou receiveImage)

1

Les images sont des choses tatillon, et vous devez avoir l'ensemble d'octets qui composent le image afin de reconstruire une image.

Je parierais ma chaussure gauche que la question est que lorsque l'objet client reçoit des données, il devient en morceaux composés d'images partielles, et non l'ensemble de l'image à la fois. Cela provoquerait la ligne qui indique

pictureBox1.Image = new Bitmap(ms); 

d'échouer car il n'a tout simplement pas les octets d'une image entière.

Alternatives

  • Plutôt que d'avoir les images de poussée du serveur sur le client, peut-être une autre approche serait d'avoir les images de traction client à partir du serveur.

  • Utilisez un mécanisme de diffusion en continu existant. Personnellement, je pense que la diffusion vidéo en continu à partir de C# peut être plus complexe que ce que vous négociez, et je vous recommande humblement d'utiliser un composant ou une application existant pour diffuser la vidéo plutôt que d'écrire la vôtre. Il y a déjà tellement d'options différentes (wmv, Flash, et une centaine d'autres) que vous réinventez une roue qui n'a vraiment pas besoin d'être réinventée.