C#视频流传输

3

我正在尝试制作一个视频流应用程序,目前我只能从服务器向客户端发送一张图像。当我尝试向客户端发送多个图像时,我收到以下错误信息:“参数无效。”,并在pictureBox1.Image = new Bitmap(ms)处出现问题。

客户端代码:

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

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

}

服务器端代码(此代码将不断重复):

servidor.sendImage(ms.GetBuffer());
2个回答

3

ms.GetBuffer() 返回整个内存流的缓冲区,包括任何多余未使用的部分。
您应该调用ToArray(),它只返回实际内容。

(或者,您的数据可能因其他原因无效,例如sendImagereceiveImage中的问题)


1

图像是非常挑剔的东西,您必须拥有组成图像的全部字节才能重建图像。

我敢打赌,问题在于当客户端对象接收数据时,它会以部分图像组成的块的形式获取数据,而不是一次获取整个图像。这将导致该行代码说

pictureBox1.Image = new Bitmap(ms);

失败是因为它根本没有整个图像的字节。

替代方案

  • 与其让服务器将图像推送到客户端,也许另一种方法是让客户端从服务器拉取图像。

  • 使用现有的流媒体机制。我个人认为,手动从C#流式传输视频可能比你预期的更复杂,我谦虚地建议使用现有的组件或应用程序来流式传输视频,而不是编写自己的组件。已经有很多不同的选项(wmv、Flash和更多)可供选择,您正在重新发明一个真正不需要重新发明的轮子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接