数据推送选择GB28181、RTSP还是RTMP?

GB/T28181

国标GB/T28181协议全称《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是一个定义视频联网传输和设备控制标准的白皮书,由公安部科技信息化局提出,该标准规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结构,传输、交换、控制的基本要求和安全性要求,以及控制、传输流程和协议接口等技术要求。解决了视频间互联互通,数据共享,以及设备控制的问题,这个问题从顶层解决了视频信息各自为战的问题,打通了视频联网的信息孤岛。

优势:GB28181相对RTMP,支持TCP和UDP模式,信令流负责session交互,数据流负责数据传输,适合标准协议规范的平台级产品对接。

除了支持常规的数据接入外,还支持针对摄像机的PTZ控制,支持标准28181服务对接。

劣势:外部支持GB28181的服务器不多,开源如SRS服务器针对GB28181的支持暂不够商用级,期待后续版本升级支持更好。

以海康摄像头对接28281平台为例,具体交互流程如下:

REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.120:15068;rport;branch=z9hG4bK1624213340
From: <sip:34020000001110000044@3402000000>;tag=2045629479
To: <sip:34020000001110000044@3402000000>
Call-ID: 1367363228
CSeq: 1 REGISTER
Contact: <sip:34020000001110000044@192.168.0.120:15068>
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.120:15068;rport=15068;received=192.168.0.120;branch=z9hG4bK1624213340
From: <sip:34020000001110000044@3402000000>;tag=2045629479
To: <sip:34020000001110000044@3402000000>;tag=993246605
CSeq: 1 REGISTER
Call-ID: 1367363228
User-Agent: LiveGBS v210723
Contact: <sip:34020000001110000044@192.168.0.120:15068>
Content-Length: 0
Date: 2021-08-13T10:14:11.789
Expires: 3600MESSAGE sip:34020000001110000044@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.199:15060;rport;branch=z9hG4bK796247609
From: <sip:34020000002000000001@3402000000>;tag=180247609
To: <sip:34020000001110000044@3402000000>
Call-ID: 807247609
CSeq: 2 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: LiveGBS v210723
Content-Length: 157<?xml version="1.0" encoding="GB2312"?>
<Query><CmdType>Catalog</CmdType><SN>552247609</SN><DeviceID>34020000001110000044</DeviceID>
</Query>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.199:15060;rport=15060;branch=z9hG4bK796247609
From: <sip:34020000002000000001@3402000000>;tag=180247609
To: <sip:34020000001110000044@3402000000>;tag=1518451596
Call-ID: 807247609
CSeq: 2 MESSAGE
User-Agent: IP Camera
Content-Length: 0MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.120:15068;rport;branch=z9hG4bK138770826
From: <sip:34020000001110000044@3402000000>;tag=2116434170
To: <sip:34020000002000000001@3402000000>
Call-ID: 111408894
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   590<?xml version="1.0" encoding="GB2312"?>
<Response>
<CmdType>Catalog</CmdType>
<SN>552247609</SN>
<DeviceID>34020000001110000044</DeviceID>
<SumNum>1</SumNum>
<DeviceList Num="1">
<Item>
<DeviceID>34020000001320000001</DeviceID>
<Name>Camera 01</Name>
<Manufacturer>Hikvision</Manufacturer>
<Model>IP Camera</Model>
<Owner>Owner</Owner>
<CivilCode>CivilCode</CivilCode>
<Address>Address</Address>
<Parental>0</Parental>
<ParentID>34020000001110000044</ParentID>
<SafetyWay>0</SafetyWay>
<RegisterWay>1</RegisterWay>
<Secrecy>0</Secrecy>
<Status>ON</Status>
</Item>
</DeviceList>
</Response>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.120:15068;rport=15068;received=192.168.0.120;branch=z9hG4bK138770826
From: <sip:34020000001110000044@3402000000>;tag=2116434170
To: <sip:34020000002000000001@3402000000>;tag=514247616
CSeq: 20 MESSAGE
Call-ID: 111408894
User-Agent: LiveGBS v210723
Content-Length: 0MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.120:15068;rport;branch=z9hG4bK1946244729
From: <sip:34020000001110000044@3402000000>;tag=1705757152
To: <sip:34020000002000000001@3402000000>
Call-ID: 1030239866
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   177<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>11</SN>
<DeviceID>34020000001110000044</DeviceID>
<Status>OK</Status>
<Info>
</Info>
</Notify>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.120:15068;rport=15068;received=192.168.0.120;branch=z9hG4bK1946244729
From: <sip:34020000001110000044@3402000000>;tag=1705757152
To: <sip:34020000002000000001@3402000000>;tag=334251619
CSeq: 20 MESSAGE
Call-ID: 1030239866
User-Agent: LiveGBS v210723
Content-Length: 0MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.120:15068;rport;branch=z9hG4bK1402863583
From: <sip:34020000001110000044@3402000000>;tag=754663007
To: <sip:34020000002000000001@3402000000>
Call-ID: 187348500
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length:   177<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>12</SN>
<DeviceID>34020000001110000044</DeviceID>
<Status>OK</Status>
<Info>
</Info>
</Notify>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.120:15068;rport=15068;received=192.168.0.120;branch=z9hG4bK1402863583
From: <sip:34020000001110000044@3402000000>;tag=754663007
To: <sip:34020000002000000001@3402000000>;tag=959261639
CSeq: 20 MESSAGE
Call-ID: 187348500
User-Agent: LiveGBS v210723
Content-Length: 0

RTSP推送

rtsp推送相关的资料和测试软件比较少,支持RTSP TCP模式和UDP模式,除非对接第三方平台,不建议使用RTSP推送。

具体流程如下:

1. rtsp推送流程.

主要分两部分:第一部分先发送信令;第二部分发送rtp包。

 信令流程:

 1.1 先发送OPTIONS, OPTIONS比较常用,就不做详细说明了。

1.2 发送ANNOUNCE, 发送ANNOUNCE主要是把要推送的音视频信息通过sdp格式传给服务器。关于sdp信息如何构造,对于h264请参考rfc6184. h265请参考rfc7798. 下面举两个例子.

h264+aac ANNOUNCE:

ANNOUNCE rtsp://192.168.0.188:554/livexxxx.sdp RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: xxxyyy
Content-Length: 489 

v=0
o=- 0 0 IN IP4 127.0.0.1
s=dddookkk
c=IN IP4 192.168.0.188
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z00AKp2oHgCJ+WbgICAoAAADAAgAAAMBlCA=,aO48gA==; profile-level-id=4D002A
a=control:streamid=0
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/44100/1
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1208
a=control:streamid=1

h265(hevc) + aac ANNOUNCE:

ANNOUNCE rtsp://192.168.0.174:554/live3.sdp RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: mmmmd
Content-Length: 364

v=0
o=- 0 0 IN IP4 127.0.0.1
s=uvsdewewe
c=IN IP4 192.168.0.174
t=0 0
m=video 0 RTP/AVP 96
a=rtpmap:96 H265/90000
a=control:streamid=0
m=audio 0 RTP/AVP 97
a=rtpmap:97 MPEG4-GENERIC/44100/1
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=1208
a=control:streamid=1

1.3 发送 SETUP,这个和播放基本一样,请参考播放流程.

1.4 发送 RECORD,record之后,信令流程完成, 接下来发送rtp包即可。

关于rtp包的构造,h264 参考rfc6184。 h265参考 rfc7798。

以Android平台为例,相关接口设计如下:

    /*+++++++++++++++推送rtsp相关接口+++++++++++++++*//** 设置推送rtsp传输方式** @param transport_protocol: 1表示UDP传输rtp包; 2表示TCP传输rtp包. 默认是1, UDP传输. 传其他值SDK报错。** @return {0} if successful*/public native int SetPushRtspTransportProtocol(long handle, int transport_protocol);/** 设置推送RTSP的URL** @param url: 推送的RTSP url** @return {0} if successful*/public native int SetPushRtspURL(long handle, String url);/** 启动推送RTSP流** @param reserve: 保留参数,传0** @return {0} if successful*/public native int StartPushRtsp(long handle, int reserve);/** 停止推送RTSP流** @return {0} if successful*/public native int StopPushRtsp(long handle);/*---------------推送rtsp相关接口---------------*/

RTMP推送

 RTMP采用的是TCP传输,采用全自研框架,易于扩展,自适应算法让延迟更低、采集编码传输效率更高。延迟配合大牛直播SDK(官方)的播放器,依然可以实现毫秒级。

跨平台设计如下:

  •  [本地预览]Windows平台支持摄像头/屏幕/合成数据实时预览功能,Android/iOS平台支持本地前后置摄像头预览;
  •  [摄像头反转/旋转]Windows平台支持摄像头水平反转、垂直反转、0°/90°/180°/270°旋转;
  •  [摄像头采集]除常规YUV格式外,Windows平台还支持MJPEG格式的摄像头采集;
  •  [麦克风/扬声器采集]Windows平台音频输入端支持麦克风、扬声器,或麦克风和扬声器混音输入;
  •  [RTMP推流]超低延时的RTMP协议直播推流SDK(Windows/Android/iOS支持RTMP扩展H.265推送);
  •  [视频格式]Windows/Android平台支持H.264/H.265编码(Android H.265硬编码),iOS平台支持H.264编码;
  •  [音频格式]Windows/Android/iOS平台支持AAC编码,Windows/Android平台支持Speex编码;
  •  [音频编码]Windows/Android平台支持Speex推送、Speex编码质量设置;
  •  [音量调节]Windows/Android平台采集端支持实时音量调节(其中,Windows平台混音模式下支持单独控制麦克风、扬声器音量);
  •  [H.264硬编码]Windows/Android/iOS平台支持H.264特定机型硬编码;
  •  [H.265硬编码]Android/iOS平台支持H.265特定机型硬编码;
  •  [硬编码自适应]Android/iOS平台支持硬编码自适应,如检测到硬编码不支持,自动切换到软编(iOS如H.265硬编,先切换到H.264硬编码,如不支持再尝试H.264软编);
  •  [软硬编码参数配置]支持gop间隔、帧率、bit-rate设置;
  •  [软编码参数配置]支持软编码profile、软编码速度、可变码率设置;
  •  [多实例推送]支持多实例推送(如同时推送屏幕/摄像头和外部数据);
  •  [RTMP扩展H.265]Windows/Android/iOS推送SDK支持RTMP扩展H.265推送,Windows针对摄像头采集软编码,使用H.265可变码率,带宽大幅节省,效果直逼传统H.265编码摄像头,Android/iOS平台支持H.265硬编码;
  •  [横竖屏推流]Android/iOS平台支持支持横屏、竖屏推流;
  •  [多分辨率支持]支持摄像头或屏幕多种分辨率设置;
  •  [Windows推屏]Windows平台支持屏幕裁剪、窗口采集、屏幕/摄像头数据合成等多种模式推送;
  •  [移动端推屏]Android平台支持后台service推送屏幕(推送屏幕需要5.0+版本);
  •  [移动端推屏]iOS平台支持后台推送屏幕(基于ReplayKit,需要iOS 10.0+版本);
  •  [事件回调]支持各种状态实时回调;
  •  [水印]Windows平台支持文字水印、png水印、实时遮挡,Android平台支持文字水印、png水印;
  •  [RTMP推送模式]支持RTMP推送 live|record模式设置(需服务器支持);
  •  [镜像]Android/iOS平台支持前置摄像头实时镜像功能;
  •  [前后摄像头实时切换]Android/iOS平台支持采集过程中,前后摄像头切换;
  •  [复杂网络处理]支持断网重连等各种网络环境自动适配;
  •  [动态码率]支持根据网络情况自动调整推流码率;
  •  [实时静音]支持推送过程中,实时静音/取消静音;
  •  [实时快照]支持推流过程中,实时快照;
  •  [纯音频推流]支持仅采集音频流并发起推流功能;
  •  [纯视频推流]支持特殊场景下的纯视频推流功能;
  •  [降噪]Windows/Android平台支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD检测;
  •  [回音消除]Android平台支持实时传递远端PCM数据,方便回音消除处理;
  •  [外部编码前视频数据对接]支持YUV数据对接;
  •  [外部编码前音频数据对接]支持PCM对接;
  •  [外部编码后视频数据对接]支持外部H.264数据对接;
  •  [外部编码后音频数据对接]外部AAC/PCMA/PCMU/SPEEX数据对接;
  •  [推送端休眠设置]Windows平台支持休眠接口(设置成休眠模式后CPU会适当降低);
  •  [编码后数据输出]Android平台支持输出编码后的H264/AAC数据到上层,方便对接第三方平台(如GB28181)对接;
  •  [扩展录像功能]完美支持和录像SDK组合使用,录像相关功能,可参见”Windows/Android/iOS录像SDK“;
  •  [裁剪模式]Android/iOS平台支持特定分辨率摄像头裁剪模式设置;
  •  [服务器兼容]支持自建服务器(如Nginx、SRS)或CDN。

感兴趣的开发者可自行参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows平台RTMP推送摄像头对接介绍

背景 好多开发者在对接大牛直播SDK&#xff08;官方&#xff09;的Windows平台RTMP推送时&#xff0c;不熟悉摄像头调用&#xff0c;实际上&#xff0c;摄像头调用逻辑并不复杂&#xff0c;以下是大概流程&#xff1a; 首先调用我们sdk接口获取摄像头个数&#xff0c;调用接口…

Outlook2016未读邮件怎么设置字体颜色

Outlook2016中想要设置未读邮件的字体颜色&#xff0c;该怎么设置呢?下面我们就来看看详细的教程。 Outlook2016未读邮件怎么设置字体颜色? 1、下载安装outlook软件。 Outlook2016未读邮件怎么设置字体颜色? 2、双击打开outlook软件&#xff0c;登入邮箱账户。 Outlook…

Android平台RTMP推送模块如何对接NV21、YV12、RGB、YUV等编码前数据

前言 我们在对接Android平台摄像头或者屏幕采集、编码打包推送场景的时候&#xff0c;随着采集设备的不同&#xff0c;出来的数据也是多样化的&#xff0c;比如NV21、YV12、RGB、YUV等&#xff0c;更有图像数据甚至是翻转或者倒置的&#xff0c;如果上层处理&#xff0c;效率低…

庖丁解牛之-Android平台RTSP|RTMP播放器设计

背景 我们在做Android平台RTSP或者RTMP播放器开发的时候&#xff0c;需要注意的点非常多&#xff0c;以下&#xff0c;以大牛直播SDK(官方)的接口为例&#xff0c;大概介绍下相关接口设计&#xff1a; 接口设计 1. Open() 接口 Open接口的目的&#xff0c;主要是创建实例&a…

如何在Android端实现轻量级RTSP服务(类似于IPC)

为什么要设计轻量级RTSP服务 首先声明一点&#xff0c;本blog提到的轻量级RTSP服务&#xff0c;类似于网络摄像头&#xff08;IPC&#xff09;&#xff0c;而非传统意义的接受外部推流的RTSP服务器。 轻量级RTSP服务解决的核心痛点&#xff1a;避免用户单独部署RTSP或者RTMP服…

Android平台基于RTMP或RTSP的一对一音视频互动技术方案探讨

背景 随着智能门禁等物联网产品的普及&#xff0c;越来越多的开发者对音视频互动体验提出了更高的要求。目前市面上大多一对一互动都是基于WebRTC&#xff0c;优点不再赘述&#xff0c;我们这里先说说可能需要面临的问题&#xff1a;WebRTC的服务器部署非常复杂&#xff0c;可…

微信公众号怎么发送模板消息 微信公众平台模板消息免费发送的技巧

想要发免费的模板消息&#xff0c;该怎么发布?下面我们就来看看详细的教程。 1、首先我们需要在微信公众号里面开通模板消息功能&#xff0c;没有开通的需要去申请&#xff0c;不然就用不了&#xff0c;如下图所示。 微信公众号怎么发送模板消息?微信公众平台模板消息免费发…

如何理解面向过程和面向对象?

一句话理解面向对象 有人说&#xff1a;“如果上帝是程序员&#xff0c;他怎么创造世界上的所有动物。”&#xff0c;理解这个问题就理解了面向对像。 面向过程和面向对象区别&#xff1f; 面向过程的思路&#xff1a;什么事都自己做&#xff1b;分析解决问题所需的步骤&…

如何实现Android平台GB28181前端设备接入

技术背景 在实现Android平台GB28181前端设备接入之前&#xff0c;我们几年前就有了非常成熟的RTMP推送、RTSP推送和轻量级RTSP服务等模块&#xff0c;特别是RTMP推送&#xff0c;行业内应用非常广泛&#xff0c;好多开发者可能会问&#xff0c;既然有了以上模块&#xff0c;干…

foxmail怎么加入黑名单 foxmail导入黑名单邮箱地址的教程

1、首先&#xff0c;先进入到了foxmail的窗口的界面当中&#xff0c;进行点击菜单中工具&#xff0c;弹出了下拉菜单中&#xff0c;进行选中为“系统工具” foxmail怎么加入黑名单? foxmail导入黑名单邮箱地址的教程 2、进入到了的系统的设置的界面中&#xff0c;进行选中反…

Android前端音视频数据接入GB28181平台意义

技术背景 在我们研发Android平台GB28181前端音视频接入模块之前&#xff0c;业内听到最多的是&#xff0c;如何用Android或者Windows端&#xff0c;在没有国标IPC设备的前提下&#xff0c;模拟GB28181的信令和媒体流交互流程&#xff0c;实现GB28181整体方案的测试&#xff1f…

QQ浏览器怎样在首页显示优先推荐的网站

QQ浏览器怎样在首页显示优先推荐的网站&#xff1f;QQ浏览器显示优先推荐的网站的方法 1&#xff0c;在手机桌面上找到QQ浏览器的图标&#xff0c;点击打开。 QQ浏览器怎样在首页显示优先推荐的网站&#xff1f;QQ浏览器显示优先推荐的网站的方法[多图] 2&#xff0c;点击下…

push_back还是emplace_back?

背景和区别 emplace_back() 是 C11 之后&#xff0c;vector容器中添加的新方法&#xff0c;和 push_back()一样&#xff0c;都是在容器末尾添加一个新的元素&#xff0c;相对于push_back函数&#xff0c;它减少了一次类的构造。不同的是emplace_back() 在效率上相比较于 push_…

std::tuple还是struct?

std::tuple是C11提供的新模板类&#xff0c;可以翻译为“元组”&#xff0c;可把多个不同类型的变量组合成一个对象。std::tuple可看做std::pair的泛化实现&#xff0c;std::pair包含两个元素&#xff0c;std::tuple 可以同时包含多个元素&#xff0c;它拥有 struct 的表现&…

微软发动图明示新一代操作系统Windows 11

可能感到关注度不够&#xff0c;微软再次出面预热所谓的新一代Windows操作系统&#xff0c;阿拉伯数字“11”图形赫然出现在预热动图中&#xff0c;可以说暗示得不要再明显了。 值得注意的是&#xff0c;动图中11的两个1中间还有一位正打坐的小人&#xff0c;配合微软关注大脑…

std::atomic和std::mutex区别

​std::atomic介绍​ ​模板类std::atomic是C11提供的原子操作类型&#xff0c;头文件 #include<atomic>。​在多线程调用下&#xff0c;利用std::atomic可实现数据结构的无锁设计。​​ ​和互斥量的不同之处在于&#xff0c;std::atomic原子操作&#xff0c;主要是保…

C++ std::remove/std::remove_if/erase用法探讨

​std::remove 不会改变输入vector/string的长度。其过程相当于去除指定的字符&#xff0c;剩余字符往前靠。后面的和原始字符保持一致。​ 需要注意的是&#xff0c;remove函数是通过覆盖移去的&#xff0c;如果容器最后一个值刚好是需要删除的&#xff0c;则它无法覆盖掉容器…

深度技术Win11 64位最新旗舰版镜像V2021.08

深度技术Win11 64位最新旗舰版镜像V2021.08是微软最新版本的电脑操作系统&#xff0c;系统稳定性的进一步优化和提升&#xff0c;可以更好的获得整个纯版本系统的稳定性。支持系统智能激活服务&#xff0c;用户可以快速激活系统&#xff0c;提高系统使用率&#xff0c;有需要的…

再谈NULL和nullptr(C++11)区别

在谈NULL和nullptr区别之前&#xff0c;我们先看段代码&#xff1a; #include "stdafx.h" #include <iostream>using namespace std; void func(void *p) {cout << "p is pointer " << p << endl; } void func(int num) {cout &l…

C/C++如何快速区分指针数组|数组指针|函数指针|指针函数

如何区分这些概念&#xff0c;主要还是看后面两个字&#xff0c;中文表达模式“​表语定性名词​”&#xff0c;​所以关键的都是后面的这个名词​&#xff1a; ​指针数组​&#xff1a;一个数组&#xff0c;数组元素是指针&#xff0c;如&#xff1a; int* p[20]; ​数组指…