天天看點

srs系列五——實作支援GB28181标準

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标準

三、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

繼續閱讀