SRS回調(diào)使用記錄

前言

公司最近在接入攝像頭,但是攝像頭返回的流地址是rtsp格式的,前端無法直接播放。經(jīng)過調(diào)研后,決定采用ffmpeg進行轉(zhuǎn)碼,推流到srs,再由前端進行獲取。srs可以支持集群、回調(diào)等功能,可以更好的進行以后需求的擴展。特此記錄利用回調(diào)功能實現(xiàn)鑒權,指定流才能播放。

srs github

v4_CN_HTTPCallback

安裝

安裝采用docker安裝的方式比較快捷,但是因為需要回調(diào)需要修改配置,所以利用docker啟動了srs后,需要將配置文件復制出來掛載到本地,再利用本地的配置進行啟動。

  1. 按照官方文檔的docker啟動:
docker run --rm -it -d -p 1935:1935 -p 1985:1985 -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/srs.conf

  1. 將配置文件拷貝出來:
docker cp -a 0007d673a2b3:/usr/local/srs/conf ~/Downloads/srs/conf
    docker cp -a 0007d673a2b3:/usr/local/srs/objs ~/Downloads/srs/objs
  1. 使用本地文件掛載啟動srs
docker run --rm -it -d -p 1935:1935 -p 1985:1985 -p 8081:8080 -v ~/Downloads/srs/conf/:/usr/local/srs/conf/ -v ~/Downloads/srs/objs/:/usr/local/srs/objs/ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 

簡單測試一下推流:

ffmpeg -i "rtsp://admin:admin@123@192.168.2.60:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" -c copy -f flv -y rtmp://127.0.0.1/live/livestream

使用vlc,選擇open network stream填入rtmp://127.0.0.1/live/livestream可以播放。

回調(diào)

將拉流的地址后面加上后綴,流可以可以播放,例如rtmp://127.0.0.1/live/livestream?token=1實際上也是沒有影響的,如果設置了回調(diào),那么srs會將原地址后的所有字符串(例如?token=1)當做附加信息發(fā)送給回調(diào)方。

現(xiàn)在,假設需要判斷當一個客戶端打開某個流地址時,這個流是否真的可以播放,那么可以設置on_play回調(diào);如果需要監(jiān)聽客戶端何時斷開連接,從而也可以回收先前起的ffmpeg進程,可以設置on_close回調(diào),其他需求可以查看官方文檔說明。

修改掛載在本地的~/Downloads/srs/conf/srs.conf文件,在vhost__defaultVhost__下添加http_hooks

# main config for srs.
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
#srs_log_tank        file;
#srs_log_file        ./objs/srs.log;
daemon              on;
http_api {
 enabled         on;
 listen          1985;
}
http_server {
 enabled         on;
 listen          8080;
 dir             ./objs/nginx/html;
}
rtc_server {
 enabled on;
 listen 8000;
 # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate
 candidate $CANDIDATE;
}
vhost __defaultVhost__ {
 hls {
 enabled         on;
 }
 http_remux {
 enabled     on;
 mount       [vhost]/[app]/[stream].flv;
 }
 rtc {
 enabled     on;
 # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtmp-to-rtc
 rtmp_to_rtc off;
 # @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtc-to-rtmp
 rtc_to_rtmp off;
 }
 http_hooks{
 # 開啟回調(diào)
 enabled on;
 # 播放流時回調(diào)
 on_play http://192.168.18.60:8888/check;
 # 關閉流時回調(diào)
 on_close http://192.168.18.60:8888/close;
}

更新完新的conf文件后,重啟一下srs即可。

對于回調(diào)接口的限制,只需要在成功時返回0,返回其他任何數(shù)字都認為是失敗。在controller中添加對應的回調(diào)接口:

 @PostMapping(value = "/check")
 public Integer check(@RequestBody Object object) {
       // 可以在object中的param字段里獲取流的附加信息,比如取出token進行校驗,通過返回0,否則返回-1
       System.out.println(object);
       return 0;
 }

此時也可以在srs的日志中看到當有客戶端連接時發(fā)送了請求:

[2021-12-08 06:36:57.076][Trace][1][t2r7a856] http: on_play ok, client_id=t2r7a856, url=http://192.168.18.60:8888/check, request={"server_id":"vid-kh7490t","action":"on_play","client_id":"t2r7a856","ip":"172.17.0.1","vhost":"__defaultVhost__","app":"live","stream":"livestream","param":"?token=1","pageUrl":""}, response=0

request里的內(nèi)容會被發(fā)送到指定的回調(diào)接口。

關閉流的接口也是類似,在此不贅述了。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容