UDP协议转换TCP协议

UDP协议转换TCP协议

项目背景:项目类似中间件 作用是数据搬运 ,可以搬运文件 ,视频,音频 。从互联网把数据搬运到内网中。有的时候拉取视频流数据的时候 使用UDP拉取会存在丢包的情况 通过TCP拉拉取视频流数据 再通过UDP发送这样可以保证质量也能提高效率。

着重说明协议转换

在这里插入图片描述

使用的技术

1.netty
2.scoket

过程描述

测试利用两个视频开源平台  LiveGBS  一个放在内网中充当视频播放设备 此处命名为SPA2  一个放在外网中充当视频源平台 此处命名为SPA1,在使用一个摄像头设备 海康或者宇视都可以,摄像头绑定到SPA1上。在SPA2平台点击播放视频 ,SPA1视频数据通过中间件搬运到SPA2播放出来。
  1. SPA2发起UDP协议播放视频请求
  2. A2端接收到UDP协议请求 通过netty发送到A1端
  3. A1端通过已有的监听,监听到过来的请求信息 解析请求数据
  4. 解析UDP协议 修改信令里面的标识 RTP/AVP -->TCP/RTP/AVP
  5. 修改以后的信令发送给视频源平台 建立连接
  6. 视频源平台 返回对应的视频源数据 TCP
  7. 接收到TCP类型视频源数据 转还为UDP协议 数据方法方法 因为此时A2那边还是UDP监听 以下是主要 TCP协议转换UDP协议方法 代码

                    data = headerBuffer.array();//每段报文最前面的两位 [5,-124]
                    int len = Util.getLen(data,0); //数组包长度 1412
                    headerBuffer.clear();
                    byte[] contentData = new byte[len];// 每段数据包字节数组长度
                    int realLen =  in.read(contentData);//每段数据包真正的字节数组
                    ByteBuffer bb = ByteBuffer.allocate(len);//分配缓冲区
                    bb.put(contentData,0,realLen);//添加后面的数据包
                    while(realLen != len) {
                        byte[] tempArr = new byte[len-realLen];
                        int tempLen = in.read(tempArr);
                        bb.put(tempArr,0,tempLen);
                        realLen = tempLen + realLen;
                    }
                    byte[] result = bb.array();
                    RtpRtcpGapMsg rtpRtcpGapMsg = new RtpRtcpGapMsg(callId,oldIp,oldPort,protocol,isRtcp,result,packageIndex.getAndIncrement());
                    rtpRtcpGapMsg.setLastPackage(false);
                    msgTransfer(rtpRtcpGapMsg);
                }
            }
主要就是把每次发送的数据包 长度修改成符合UDP协议发送的长度 再把每次发送之前数据包的最前面标识位去掉 因为UDP协议是不需要的。

以上是简单的介绍,如有问题请私聊我,大家一起交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值