视频数据通信的问题? 本帖最后由 oyljerry 于 2011-09-13 10:58:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据有问题撒,UDP不保证可靠,最好加上验证 你一次发多大的包??UDP来的数据包不能保证和发送的顺序是一致的,还有丢包的可能,但是照你说的应该是没丢包你是说的收到的一个包里内容有被修改的??那不大可能啊 发送的是这个结构体:struct VideoPacketHead{ unsigned char TotalPackets; unsigned char KeyFrame; unsigned short sOffset; unsigned short sDataLength; unsigned long lFrameID; LONGLONG timeStart; LONGLONG timeEnd;};struct VideoPacket{ VideoPacketHead PacketHead; char rawData[1024]; void my_hton() { PacketHead.sOffset = htons(PacketHead.sOffset); PacketHead.sDataLength = htons(PacketHead.sDataLength); PacketHead.lFrameID = htonl(PacketHead.lFrameID); } void my_ntoh() { PacketHead.sOffset = ntohs(PacketHead.sOffset); PacketHead.sDataLength = ntohs(PacketHead.sDataLength); PacketHead.lFrameID = ntohl(PacketHead.lFrameID); }};UDP发送的数据包有最大的限制吗?发送的数据包是:1024+sizeof(VideoPacketHead ) 发送的字节数:pMSQ_PACK->msq_head::sDataLength + sizeof(MSQ_HEAD)最大是:1024+sizeof(MSQ_HEAD),但很明显,上面没有达到最大字节数嘛 UDP每包不要超过1500字节所以视频发送时要先分包收到时再重组有可能会丢掉其中一小包,要求重发,或者把这一帧都丢掉还有可能后发先到要注意的事情还很多,任重道远啊建议把每一帧分成多包,每包加个序号,每帧也有序号,收到时用链表保存,再重组。rtp协议就是解决这种情况的,不过刚开始看起来有点累,自己写一个算了。 从服务器端和客户端各抓UDP包,看看是否都被修改,1.如果服务器发出的包是正确的,但客户端收到有问题,检查中间路由器防火墙啥的。2.如果服务器端发出的包已经被修改,查看程序,如果100%确保转发程序没问题,看服务端网络相关设置等。 先是:列名‘人事部’无效,然后:实例对象已关闭,不允许操作 求问:为什么Microsoft在SDK中设计的结构体中,很多结构体的第一个变量是结构体的大小? 将图片显示到对话框问题 空间中向量问题 有关于病毒发送电子邮件的问题! 一个有关CEdit的问题? 问两个关于内存泄漏的问题? 怎么把mp3文件重新设置采样率等参数后转成wav文件? puyinghua进来拿分 如何在SDI文档视图结构下同时显示一大一小两个窗口,并可切换 超级难的控制问题,望高手解答。一个关于步进电机控制的问题。 400Mbps 的高速udp数据接收
struct VideoPacketHead
{
unsigned char TotalPackets;
unsigned char KeyFrame;
unsigned short sOffset;
unsigned short sDataLength;
unsigned long lFrameID;
LONGLONG timeStart;
LONGLONG timeEnd;
};
struct VideoPacket
{
VideoPacketHead PacketHead;
char rawData[1024];
void my_hton()
{
PacketHead.sOffset = htons(PacketHead.sOffset);
PacketHead.sDataLength = htons(PacketHead.sDataLength);
PacketHead.lFrameID = htonl(PacketHead.lFrameID);
}
void my_ntoh()
{
PacketHead.sOffset = ntohs(PacketHead.sOffset);
PacketHead.sDataLength = ntohs(PacketHead.sDataLength);
PacketHead.lFrameID = ntohl(PacketHead.lFrameID);
}
};
UDP发送的数据包有最大的限制吗?
发送的数据包是:1024+sizeof(VideoPacketHead )
pMSQ_PACK->msq_head::sDataLength + sizeof(MSQ_HEAD)
最大是:
1024+sizeof(MSQ_HEAD),
但很明显,上面没有达到最大字节数嘛
所以视频发送时要先分包
收到时再重组
有可能会丢掉其中一小包,要求重发,或者把这一帧都丢掉
还有可能后发先到
要注意的事情还很多,任重道远啊建议把每一帧分成多包,每包加个序号,每帧也有序号,收到时用链表保存,再重组。
rtp协议就是解决这种情况的,不过刚开始看起来有点累,自己写一个算了。
1.如果服务器发出的包是正确的,但客户端收到有问题,检查中间路由器防火墙啥的。
2.如果服务器端发出的包已经被修改,查看程序,如果100%确保转发程序没问题,看服务端网络相关设置等。