数据推送选择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: 0RTSP推送
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。
感興趣的開發者可自行參考。
總結
以上是生活随笔為你收集整理的数据推送选择GB28181、RTSP还是RTMP?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华硕台式机重装系统教程方法
- 下一篇: 搜狐视频怎么开启自动连播