海康攝像機使用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控制台

地址://192.168.2.165:8080

使用 VLC media player 影片播放器進行播放

地址是這個:rtmp://192.168.2.165:1935/live/34020000001320000001@34020000001320000001 (根據實際情況修改地址及後面的資訊)

Tags: