C# 利用udp协议播音实现视频传输 C/S 服务端出错
C# 利用udp协议广播实现视频传输 C/S 服务端出错
UdpClient myUdpClient = new UdpClient();
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 8001);
private void ProcessFrame(object sender, EventArgs arg)
{
Image<Bgr, Byte> frame = _capture.RetrieveBgrFrame();
captureImageBox.Image = frame;
MIplImage mi = frame.MIplImage;
byte[] buffer = new byte[mi.imageSize]; //dwBufSize数据长度
Marshal.Copy(mi.imageData, buffer, 0, mi.imageSize); //pBuffer IntPtr类
myUdpClient.Send(buffer, buffer.Length, iep);
if (recordstate)
{
videowriter.WriteFrame(frame);
}
Thread.Sleep(10);
}
做的是窗体程序,把采集的视频转换为字节发送出去,在客户端转为imagebox可显示的格式播放。
上面是服务器udp广播核心代码,程序在运行到红色语句时出错,重新做了个例子用这个语句传输文本没有问题。传输视频却不行,请大家多多指点。
------解决思路----------------------
视频拍完,构造一个很小的字符串数组,进行send看是否有这个现象?
如果可以正常send,说明你拍摄视频就卡死了~
------解决思路----------------------
看来是你一次过把整张图片的数据Send了,UDP不好一次过发送太多数据,一般是1500字节,超过了最好拆分发送,需要另外实现拆组包过程
------解决思路----------------------
另外,如果真的是发送数据包太大,.net会给你报异常,你是可以调试出来具体的异常抛出的(而不是像c程序debug那样靠猜的)。先搞准了原因再说。
UdpClient myUdpClient = new UdpClient();
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 8001);
private void ProcessFrame(object sender, EventArgs arg)
{
Image<Bgr, Byte> frame = _capture.RetrieveBgrFrame();
captureImageBox.Image = frame;
MIplImage mi = frame.MIplImage;
byte[] buffer = new byte[mi.imageSize]; //dwBufSize数据长度
Marshal.Copy(mi.imageData, buffer, 0, mi.imageSize); //pBuffer IntPtr类
myUdpClient.Send(buffer, buffer.Length, iep);
if (recordstate)
{
videowriter.WriteFrame(frame);
}
Thread.Sleep(10);
}
做的是窗体程序,把采集的视频转换为字节发送出去,在客户端转为imagebox可显示的格式播放。
上面是服务器udp广播核心代码,程序在运行到红色语句时出错,重新做了个例子用这个语句传输文本没有问题。传输视频却不行,请大家多多指点。
------解决思路----------------------
视频拍完,构造一个很小的字符串数组,进行send看是否有这个现象?
如果可以正常send,说明你拍摄视频就卡死了~
------解决思路----------------------
看来是你一次过把整张图片的数据Send了,UDP不好一次过发送太多数据,一般是1500字节,超过了最好拆分发送,需要另外实现拆组包过程
------解决思路----------------------
另外,如果真的是发送数据包太大,.net会给你报异常,你是可以调试出来具体的异常抛出的(而不是像c程序debug那样靠猜的)。先搞准了原因再说。