日期:2014-05-17  浏览次数:21480 次

|ZYCWPF| RTP包在UDP中大小应该是多大,对数据大的,如何进行拆包呢?
用LumiSoft.Net.RTP的开源RTP代码
在发送大包4M的时候全丢包了,小包没有问题
说明是包太大问题
我看了源码:RTP_Packet中有
         /// <summary>
         /// Gets if packet is padded to some bytes boundary.
        /// </summary>
        public bool IsPadded
        {
            get{ return false; }
        }
也就是这个拆分的,他这个开源的还没有实现
那现在我想改动让他实现可以拆包

那应该如何来拆呢?
比如一个4M的,要拆成多少个包
接收方收到包,如何来确认顺序

谢谢
------最佳解决方案--------------------
LumiSoft.Net本身不提供分包/组包功能,需要自己实现,我在另外一个帖子里回了:
http://bbs.csdn.net/topics/390289781
包的最大长度是MTU,在了luminsoft里设成了常量1400,rtp包头长12,所有最大的payload为1388。
每个包都有seqno,它是顺序增长的,确认顺序的话可以根据seqno来判断。
rtp头中有IsMarker标记,可以用来标记一帧中的最后一个包(这是符合RFC2435规范的)
另外4M的帧无论如何在百兆网中是传不了的,你要把jpeg的压缩质量调低,或改用其它压缩算法。