乾貨:如何實現RTSP推送H.264、RTSP推送H.265(hevc)

  • 2019 年 10 月 5 日
  • 筆記

rtsp推送相關的資料和測試軟體比較少,本文介紹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。

接下來實際測試推送效果,從github或者大牛直播SDK官網下載rtsp h264 h265推送工具和rtsp播放工具(請下載windows版本測試).

1. 先打開rtsp推送程式SmartPublisherDemo.exe(測試h265推送請用64位exe) 進行配置:

2. 按上圖配置好後,點擊 "推送rtsp"按鈕後會看到相應的播放地址:

3. 拷貝播放器地址,然後打開 SmartPlayer.exe, 進行播放即可:

4. 使用rtsp推送延時也非常低,可低至100多毫秒,下圖是測試延時的截圖:

可以看到,延時就100多毫秒,我是從家裡推送到公網伺服器,然後再拉取播放的.

小結:

rtsp相對於rtmp推送的優勢是可以用udp傳輸音影片數據,udp傳輸可以避免延時累積,當然rtsp也可以用tcp傳輸rtp包, 上面的推送程式upd和tcp傳輸都支援。 另外rtsp協議本身就支援h265,不像rtmp還需要用一個非官方擴展去支援. 實際測試可以看出延時非常低,就幾百毫秒,這個延時可以滿足大多數低延時場景需求. 另外rtsp協議本身就是為實時流傳輸設計的,能更好的兼容現有的監控系統等. rtsp推送更適合互聯網遠程監控等項目.