SRS GB28181 可對接标準的GB28181 的攝像頭、nvr裝置,内置了GB28181常用sip信令。也可以不啟用sip信令,隻接收GB28181的PS流。
注意:srs4.0之後的版本才支援gb28181,如何安裝srs請參考之前的文章。
一、srs配置
# 預設配置在 conf/push.gb28281.conf
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_api {
enabled on;
listen 1985;
}
stats {
network 0;
}
stream_caster {
enabled on;
caster gb28181;
# 轉發流到rtmp伺服器位址與端口
# TODO: https://github.com/ossrs/srs/pull/1679/files#r400875104
# [stream] is VideoChannelCodecID(視訊通道編号ID) for sip
# 自動建立的道通[stream] 是‘chid[ssrc]’ [ssrc]是rtp的ssrc
# [ssrc] rtp中的ssrc
output rtmp://127.0.0.1:1935/live/[stream];
# 接收裝置端rtp流的多路複用端口
listen 9000;
# rtp接收監聽端口範圍,最小值
rtp_port_min 58200;
# rtp接收監聽端口範圍,最大值
rtp_port_max 58300;
# 是否等待關鍵幀之後,再轉發,
# off:不需等待,直接轉發
# on:等第一個關鍵幀後,再轉發
wait_keyframe off;
# rtp包空閑等待時間,如果指定時間沒有收到任何包
# rtp監聽連接配接自動停止,發送BYE指令
rtp_idle_timeout 30;
# 是否轉發音頻流
# 目前隻支援aac格式,是以需要裝置支援aac格式
# on:轉發音頻
# off:不轉發音頻,隻有視訊
# *注意*!!!:flv 隻支援11025 22050 44100 三種
# 如果裝置端沒有三種中任何一個,轉發時為自動選擇一種格式
# 同時也會将adts的頭封裝在flv aac raw資料中
# 這樣的話播放器為自動通過adts頭自動選擇采樣頻率
# 像ffplay, vlc都可以,但是flash是沒有聲音,
# 因為flash,隻支援11025 22050 44100
audio_enable off;
# 伺服器主機号,可以域名或ip位址
# 也就是裝置端将媒體發送的位址,如果是伺服器是内外網
# 需要寫外網位址,
# 調用api建立stream session時傳回ip位址也是host
# $CANDIDATE 是系統環境變量,從環境變量擷取位址,如果沒有配置,用*
# *代表指定stats network 的網卡号位址,如果沒有配置network,預設則是第0号網卡位址
# TODO: https://github.com/ossrs/srs/pull/1679/files#r400917594
host $CANDIDATE;
#根據收到ps rtp包自帶建立rtmp媒體通道,不需要api接口建立
#rtmp位址參數[stream] 就是通道id 格式chid[ssrc]
auto_create_channel off;
sip {
# 是否啟用srs内部sip信令
# 為on信令走srs, off 隻轉發ps流
enabled on;
# sip監聽udp端口
listen 5060;
# SIP server ID(SIP伺服器ID).
# 裝置端配置編号需要與該值一緻,否則無法注冊
serial 34020000002000000001;
# SIP server domain(SIP伺服器域)
realm 3402000000;
# 服務端發送ack後,接收回應的逾時時間,機關為秒
# 如果指定時間沒有回應,認為失敗
ack_timeout 30;
# 裝置心跳維持時間,如果指定時間内(秒)沒有接收一個心跳
# 認為裝置離線
keepalive_timeout 120;
# 注冊之後是否自動給裝置端發送invite
# on: 是 off 不是,需要通過api控制
auto_play on;
# 裝置将流發送的端口,是否固定
# on 發送流到多路複用端口 如9000
# off 自動從rtp_mix_port - rtp_max_port 之間的值中
# 選一個可以用的端口
invite_port_fixed on;
# 向裝置或下級域查詢裝置清單的間隔,機關(秒)
# 預設60秒
query_catalog_interval 60;
}
}
vhost __defaultVhost__ {
}
如果啟用rtc播放需要将rtc加下配置中
将下面的内容加下配置項, vhost __defaultVhost__需要替換不能有兩個
rtc_server {
enabled on;
# Listen at udp://8000
listen 8000;
#
# The $CANDIDATE means fetch from env, if not configed, use * as default.
#
# The * means retrieving server IP automatically, from all network interfaces,
# @see https://github.com/ossrs/srs/issues/307#issuecomment-599028124
candidate $CANDIDATE;
}
vhost __defaultVhost__ {
rtc {
enabled on;
bframe discard;
}
}
二、裝置配置頁面
如圖所示:
三、SRS-GB28181 API
參考:https://github.com/xialixin/srs_code_note/blob/master/doc/srs_gb28181.md
四、支援gb28181的同時支援hls播放
經過應用發現目前版本的srs在支援gb28181時,并不能同時支援hls播放,此時需要做如下操作:
1、更改srs源碼
更改源碼的檔案為:https://github.com/ossrs/srs/blob/4.0release/trunk/src/app/srs_app_gb28181.cpp
将source_publish = true; 改為source_publish = false;
2、重新編譯:
./configure --with-gb28181 && make clean && make
./objs/srs -c conf/push.gb28181.conf
3、配置hls:
參考前文:SRS系列三——HLS直播及回調功能(含m3u8檔案說明)
五、外網映射問題
在開通外網時,應開通如下:
TCP: 1935 和 8089 端口映射到外網
UDP: 5060 和 9000 端口映射到外網
同時,配置檔案中以下配置項需注意:
output rtmp://36.155.123.199:19335/yxt/[stream]; #外網位址+端口
# 接收裝置端rtp流的多路複用端口,外網端口
listen 9000;
#host $CANDIDATE;外網位址
host 36.155.123.199;
參考文檔:
https://github.com/xialixin/srs_code_note/blob/master/doc/srs_gb28181.md
https://mp.weixin.qq.com/s/VIPSPaBB5suUk7_I2oOkMw