建筑在美貌上的爱情,一旦美貌消失,它也会随之消失。——堂恩
昨天说到 srs信令java版
今天按照官方文档实现http
回调:
https://ossrs.net/lts/zh-cn/docs/v5/doc/http-callback
完整配置文件:
# WebRTC streaming config for SRS. # @see full.conf for detail config. listen 1935; max_connections 1000; daemon off; srs_log_tank console; http_server { enabled on; listen 8080; dir ./objs/nginx/html; } http_api { enabled on; listen 1985; } stats { network 0; } rtc_server { enabled on; listen 8000; # UDP port # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate candidate $CANDIDATE; } vhost __defaultVhost__ { http_hooks { enabled on; on_publish http://host.docker.internal:1989/api/v1/streams http://host.docker.internal:1989/api/v1/streams; on_unpublish http://host.docker.internal:1989/api/v1/streams http://host.docker.internal:1989/api/v1/streams; on_play http://host.docker.internal:1989/api/v1/sessions http://host.docker.internal:1989/api/v1/sessions; on_stop http://host.docker.internal:1989/api/v1/sessions http://host.docker.internal:1989/api/v1/sessions; on_dvr http://host.docker.internal:1989/api/v1/dvrs http://host.docker.internal:1989/api/v1/dvrs; on_hls http://host.docker.internal:1989/api/v1/hls http://host.docker.internal:1989/api/v1/hls; on_hls_notify http://host.docker.internal:1989/api/v1/hls/[server_id]/[app]/[stream]/[ts_url][param]; } rtc { enabled on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc rtmp_to_rtc off; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp rtc_to_rtmp off; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } }
对应的docker
命令:
docker run --rm --env CANDIDATE=$CANDIDATE -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp -v /Users/achao/IdeaProjects/srs/trunk/conf/rtc.conf:/usr/local/srs/conf/rtc.conf registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 objs/srs -c /usr/local/srs/conf/rtc.conf
然后我们的回调实现
package com.example.simplesrssignaling; import lombok.Data; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; /** * /** * <pre> * <code> * http_hooks { * enabled on; * on_publish http://host.docker.internal:1989/api/v1/streams http://host.docker.internal:1989/api/v1/streams; * on_unpublish http://host.docker.internal:1989/api/v1/streams http://host.docker.internal:1989/api/v1/streams; * on_play http://host.docker.internal:1989/api/v1/sessions http://host.docker.internal:1989/api/v1/sessions; * on_stop http://host.docker.internal:1989/api/v1/sessions http://host.docker.internal:1989/api/v1/sessions; * on_dvr http://host.docker.internal:1989/api/v1/dvrs http://host.docker.internal:1989/api/v1/dvrs; * on_hls http://host.docker.internal:1989/api/v1/hls http://host.docker.internal:1989/api/v1/hls; * on_hls_notify http://host.docker.internal:1989/api/v1/hls/[server_id]/[app]/[stream]/[ts_url][param]; * } * </code> * </pre> * use: docker run --rm --env CANDIDATE=$CANDIDATE -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp -v /Users/achao/IdeaProjects/srs/trunk/conf/rtc.conf:/usr/local/srs/conf/rtc.conf registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 objs/srs -c /usr/local/srs/conf/rtc.conf */ @RestController @CrossOrigin @RequestMapping("/api/v1") public class SRSController { @PostMapping("/streams") public ResponseEntity<Response> handlePublishAndUnpublish(@RequestBody HookData data) { // Handle the on_publish and on_unpublish actions return ResponseEntity.ok(new Response(0)); } @PostMapping("/sessions") public ResponseEntity<Response> handlePlayAndStop(@RequestBody HookData data) { // Handle the on_play and on_stop actions return ResponseEntity.ok(new Response(0)); } @PostMapping("/dvrs") public ResponseEntity<Response> handleDVR(@RequestBody HookData data) { // Handle the on_dvr action return ResponseEntity.ok(new Response(0)); } @PostMapping("/hls") public ResponseEntity<Response> handleHLS(@RequestBody HookData data) { // Handle the on_hls action return ResponseEntity.ok(new Response(0)); } @Data public static class HookData { private String action; private String client_id; private String ip; private String vhost; private String app; private String stream; private String param; } @Data public static class Response { private Integer code; private String msg; public Response(int code) { this.code = code; this.msg = "ok"; } } }