框图如下
docker-compose.yaml如下
rtmp2rtc.conf的配置如下
就增加了
#配置如下
forward {
enabled on;#开启转发
backend http://192.168.0.131:6789/api/v1/forward; #有视频流数据后会调用这个接口
}
#回调的参数如下
Received payload:
{
action=on_forward,
server_id=vid-k29ms28,
service_id=f00k5l8v,
client_id=l3ymi987,
ip=172.18.0.1,
vhost=__defaultVhost__,
app=live/livestream,
tcUrl=rtmp://192.168.0.131/live/livestream,
stream=4TADL21001004X-165-0-7,
param=
}
预期返回srs的返回值是
{
"data": {
"urls": [
"rtmp://xx.xx.xx.xx:xxxx/xx/xx"
]
},
"code": 0
}
java代码如下
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.http.ResponseEntity;
import java.util.Map;
@RestController
@RequestMapping("/api/v1/forward")
public class SrsForwardController {
@PostMapping
public ResponseEntity<Map<String, Object>> handleForward(@RequestBody Map<String, Object> payload) {
// 打印接收到的回调数据
System.out.println("Received payload: " + payload);
// 提取stream参数并生成SN码
String stream = (String) payload.get("stream");
// String snCode = stream.split("-")[0];
// 将stream中的第一个'-'替换为'_'
String snCode = stream.replaceFirst("-", "_");
// 构建目标RTMP地址
String destinationUrl = "rtmp://xx.xx.xx.xx:xxxx/xxx/xx";
System.out.println("destinationUrl="+destinationUrl);
// 返回响应给SRS,指定目标转发地址
Map<String, Object> response = Map.of(
"code", 0,
"data", Map.of("urls", new String[] { destinationUrl })
);
System.out.println(ResponseEntity.ok(response));
return ResponseEntity.ok(response);
}
}