Skip to main content
版本:8.0 (Unstable) 🚧🚀

GB28181

SRS 使用外部SIP服务器(比如srs-sip)处理GB28181信令,媒体流则以RTP/PS over TCP的方式接收。外部SIP服务器通过HTTP API在SRS中创建媒体会话,然后指示设备向SRS返回的TCP端口推流。

编译SRS并启用GB28181:

./configure --gb28181=on && make

配置GB28181的stream caster:

stream_caster {
    enabled on;
    caster gb28181;
    output rtmp://127.0.0.1/live/[stream];
    listen 9000;

    # API创建的会话等待其媒体TCP连接的最长时间,单位为秒。
    # 支持小数,比如0.5。
    # 默认值:10
    media_connect_timeout 10;
}

http_api {
    enabled on;
    listen 1985;
}

External SIP API

完成SIP协商后,使用外部SIP服务器选定的流ID和十进制RTP SSRC创建媒体会话:

curl -X POST http://127.0.0.1:1985/gb/v1/publish/ \
  -H 'Content-Type: application/json' \
  -d '{"id":"34020000001320000001","ssrc":"47190001"}'

SRS返回媒体端点:

{"code":0,"port":9000,"is_tcp":true}

之后,设备或外部SIP服务应连接到返回的端口,并使用相同的SSRC以RFC4571封装格式通过TCP推送RTP/PS流。

Session Lifecycle

流ID和SSRC唯一地占用一个GB28181会话。在该会话仍被占用期间,若使用其中任意一个值再次创建会话,将返回StreamBusy

media_connect_timeout用于控制SRS保留一个会话的时长——该会话通过/gb/v1/publish/创建,但一直未收到其媒体TCP连接。该值以秒为单位,支持小数,默认是10秒。超时后,SRS会释放流ID和SSRC,外部SIP服务器可以重新使用它们发起推流。

一旦媒体TCP连接建立,该连接将接管会话的生命周期管理,media_connect_timeout不再生效。关闭当前TCP连接会销毁该会话,并释放其流ID和SSRC,之后的推流请求便可以复用这两个值。