海康攝像機使用GB28181接入SRS伺服器的搭建步驟—源碼安裝的方式
下載程式碼
地址://github.com/ossrs/srs-gb28181
//github.com/ossrs/srs-gb28181.git
注意:使用的是含有gb28181的GitHub倉庫地址。若是使用其他的倉庫地址,比如://github.com/ossrs/srs.git,這種在編譯過程中不確定configure命令是否含有
./configure --with-gb28181
參數,沒有的話則不能使用這個倉庫的源碼
我這邊是直接在線下載的一個zip的壓縮包:srs-gb28181-feature-gb28181.zip
把該壓縮包上傳到伺服器的指定路徑下。
伺服器上編譯
yum -y install unzip
unzip srs-gb28181-feature-gb28181.zip
cd srs-gb28181-feature-gb28181/trunk
./configure --gb28181=on # gb28181默認是關閉的,需要開啟
make
替換配置文件
使用的配置文件名是: push.gb28181.conf, 路徑是:srs-gb28181-feature-gb28181/trunk/conf/push.gb28181.conf
先把原來的配置文件重命名,然後使用已經修改好的配置文件上傳到指定路徑下:srs-gb28181-feature-gb28181/trunk/conf/
mv srs-gb28181-feature-gb28181/trunk/conf/push.gb28181.conf srs-gb28181-feature-gb28181/trunk/conf/push.gb28181.conf.bak
修改後的配置文件內容如下:
# push gb28181 stream to SRS.
listen 1935; ## RTMP服務埠號,可用於拉取28181的推流數據
max_connections 1000;
daemon off;
srs_log_tank console; ## 表示服務在控制台運行,方便看日誌
http_api { ## SRS提供了標準的HTTP API介面,可用於觸發GB28181-SIP信令
enabled on;
listen 1985;
# whether enable crossdomain request.
# default: on
crossdomain on;
# the HTTP RAW API is more powerful api to change srs state and reload.
raw_api {
# whether enable the HTTP RAW API.
# default: off
enabled on;
# whether enable rpc reload.
# default: off
allow_reload on;
# whether enable rpc query.
# default: off
allow_query on;
# whether enable rpc update.
# default: off
allow_update on;
}
}
http_server { ## HTTP Server用於支援HLS拉流
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
stats {
network 0;
}
stream_caster {
enabled on;
caster gb28181; ## 打開GB28181功能
# 轉發流到rtmp伺服器地址與埠
# TODO: //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;
# 多路復用埠類型,on為tcp,off為udp
# 默認:on
tcp_enable on;
# 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 on;
# 伺服器主機號,可以域名或ip地址
# 也就是設備端將媒體發送的地址,如果是伺服器是內外網
# 需要寫外網地址,
# 調用api創建stream session時返回ip地址也是host
# $CANDIDATE 是系統環境變數,從環境變數獲取地址,如果沒有配置,用*
# *代表指定stats network 的網卡號地址,如果沒有配置network,默認則是第0號網卡地址
# TODO: //github.com/ossrs/srs/pull/1679/files#r400917594
host $CANDIDATE;
#host 192.168.2.165;
#根據收到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;
}
}
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 //github.com/ossrs/srs/issues/307#issuecomment-599028124
candidate $CANDIDATE;
#candidate 192.168.2.165;
}
vhost __defaultVhost__ {
rtc { ## 打開WebRTC功能
enabled on;
bframe discard;
rtmp_to_rtc on;
rtc_to_rtmp on;
}
http_remux { ## 打開HTTP-Flv功能
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}
關於配置文件中變數:$CANDIDATE
的說明,在配置文件中有兩處地方
host $CANDIDATE;
candidate $CANDIDATE;
簡單使用的話就是直接把這個變數名修改成伺服器使用的外網IP地址,我這邊是在公司內部用的,只有一個網卡,也就是該行下面注釋掉的那行,後面啟動的時候我這邊是這個配置
#host $CANDIDATE;
host 192.168.2.165;
#candidate $CANDIDATE;
candidate 192.168.2.165;
啟動
# 在trunk目錄下,也就是:srs-gb28181-feature-gb28181/trunk/
# 調試啟動,會在控制在輸出日誌
./objs/srs -c ./conf/push.gb28181.conf
# 後台啟動方式
nohup ./objs/srs -c ./conf/push.gb28181.conf > nohup.out 2>&1 &
防火牆放行埠
注意:放行的埠號若是根據官方提供的來,會導致無法查看影片資訊,進而無法查看畫面
我這邊方向的埠號具體如下:
1935/tcp
1985/tcp
8080/tcp
8000/tcp
9000/tcp
1935/udp
1985/udp
5060/udp
8080/udp
8000/udp
9000/udp
攝像機配置
訪問SRS控制台
使用 VLC media player 影片播放器進行播放
地址是這個:rtmp://192.168.2.165:1935/live/34020000001320000001@34020000001320000001 (根據實際情況修改地址及後面的資訊)