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,之后的推流请求便可以复用这两个值。