|ZYCWPF| LumiSoft.Net.RTP 当 RTP_Packet包太大的时候,如何进行分包发送,接收到再组包 谢谢

javamy033 2012-11-21 05:47:38
http://www.lumisoft.ee/lswww/download/downloads/Examples/
上面是LumiSoft.Net.RTP的源码
下载里面的Rtp Audio Demo.zip可以实现点对点RTP
但是当我把语言改成图片的时候,接收方无法收到数据
经发现是因为我的图片包每个包有4M大的原因,把他改为几百K的话就可以

那他这个RTP_Packet怎么在发送的时候进行分包和接收到的时候判断包不完整进行组包呢?

谢谢
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-11-25
  • 打赏
  • 举报
回复
你定义一个数据结构,包含块号和块数据。然后对方先产生一个和原来文件一样大的文件,再根据块位置,不断写入,直到所有的块完成。
jshi123 2012-11-25
  • 打赏
  • 举报
回复
jpeg over rtp 是有标准协议的:RTP Payload Format for JPEG-compressed Video 理论上分包/组包的方式应当根据标准做,但那样做是比较复杂的。 现在应该你的收/发程序都是自己实现的,所以可以不管标准,随便约定自己的协议格式。但是这样做意味着你的程序不能够和采用标准协议的程序通信。 我觉得你做的程序是不是有点太底层了,做应用产品的话应该尽量利用工具和库代码。 就比如你的RTP_Send虽然实现了传输功能,但它没有考虑到重入(就是1秒刷新濒率下如果数据来不及传输就会在下一秒再重入Send执行方法),所以在容错、可靠性等各种方法,自己去写底层代码都是划不来的。
jshi123 2012-11-25
  • 打赏
  • 举报
回复
在你的例子代码中用的jpeg encoder quality level=100,这样是最高质量的压缩,每张图大概有1、2M, 而在100M网络中,传输速度是10M字节/秒,去掉协议overhead、冲突检测等,实际速度也就只有几MB/秒,你的刷新速度是1秒钟,很有可能来不及传送的。
jshi123 2012-11-25
  • 打赏
  • 举报
回复
超过MTU的包必须要切割,切割后最后一个package设个标志就可以了。 发送部分:RTP_Send.cs/Send方法中:

//Send方法内的发送部分改成:
	int packetSize = m_pRTP_Stream.Session.MTU - 12;
	while (data.Length > 0)
	{
		RTP_Packet rtpPacket = new RTP_Packet();
		rtpPacket.Timestamp = m_RtpTimeStamp;
		rtpPacket.Data = data.Take(packetSize).ToArray();
		rtpPacket.IsMarker = data.Length <= packetSize; // is last packet in the frame
		m_pRTP_Stream.Send(rtpPacket);
		data = data.Skip(packetSize).ToArray();
	}
接收部分:MainWindowViewModel.cs/m_RtpImageSession_NewReceiveStream方法:

// 在方法体外定义一个成员变量:
// List<byte> _buffer = new List<byte>();

// m_RtpImageSession_NewReceiveStream方法内的循环改成:
	this.m_RtpImageReceive.PacketReceived += (send, ep) =>
		{
			_buffer.AddRange(ep.Packet.Data);
			if (ep.Packet.IsMarker)
			{
				var data = _buffer.ToArray();
				_buffer.Clear();
				this.CaptrueDeskSource = Z.Core.Helper.Media.ConvertByteArrayToImageSource(data);
			}
		};

110,588

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧