在GB28181的2016版中,对于媒体流的传输在原有UDP传输的基础中,增加了主动tcp和被动tcp的方式。
1.UDP的传输
这个是普遍的传输方式,GB28181服务端在发invite时,在携带的SDP中包含了接收媒体的端口,设备端(被呼叫端)收到invite后,解析该端口,通过UDP将媒体流发向该端口。
2.TCP被动
GB28181服务端在发invite时,在携带的SDP中包含了接收媒体的端口,并监听该端口的媒体数据,设备端(被呼叫端)收到invite后,解析该端口,通过TCP将媒体流发向该端口。
3.TCP主动
设备端(被呼叫端)告知服务端自己的媒体流tcp端口,服务端主动去连接设备端(被呼叫端)的该端口,获取数据。
基于新的2016版GB28181协议,我们在设备端开发时除了传统的udp发流外,还要考虑tcp主动和tcp被动两种方式,在代码的实现中,我们通过被服务端invite所携带的sdp进行区分,代码如下:
enum SYMediaProtocol
{
SYUdp = 0, //UDP传输
SYTcpActive, //tcp主动
SYTcpPassive //tcp被动
};
SYMediaProtocol CGbtDeviceAgent::getMediaProtocol(const sstd::string szProtocol )
{
SYMediaProtocol protocol = kUdp;
if (szProtocol == MediaMedium::RTP_AVP_TCP || szProtocol == MediaMedium::TCP_RTP_AVP)
{
if (medium.setup == MediaMedium::active)
{
protocol = SYTcpAct

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



