针对 视频下载 zlm 流注册/销 额外处理

This commit is contained in:
shikong 2024-03-13 21:39:31 +08:00
parent 8f0b0be8b3
commit 1ac99217f5
2 changed files with 32 additions and 7 deletions

View File

@ -153,18 +153,39 @@ public class DeviceProxyService {
});
});
// });
zlmStreamChangeHookService.getUnregistHandler(DEFAULT_ZLM_APP).put(callId,()->{
StopSendRtp stopSendRtp = new StopSendRtp();
stopSendRtp.setApp(DEFAULT_ZLM_APP);
stopSendRtp.setStream(callId);
stopSendRtp.setSsrc(ssrc);
});
zlmStreamRegistHookEvent(DEFAULT_ZLM_APP, callId, ssrc);
zlmStreamNoneReaderHookService.getHandler(DEFAULT_ZLM_APP).put(callId,()->{
sendBye(request,device,key);
});
}
private void zlmStreamRegistHookEvent(String app, String callId, String ssrc){
zlmStreamChangeHookService.getUnregistHandler(app).put(callId,()->{
scheduledExecutorService.submit(()->{
ScheduledFuture<?> schedule = scheduledExecutorService.schedule(() -> {
StopSendRtp stopSendRtp = new StopSendRtp();
stopSendRtp.setApp(app);
stopSendRtp.setStream(callId);
stopSendRtp.setSsrc(ssrc);
log.info("结束 zlm rtp 推流, app {}, stream {}, ssrc {}", app, callId, ssrc);
zlmMediaService.stopSendRtp(stopSendRtp);
}, 3, TimeUnit.SECONDS);
// 如果 3秒内 重新注册, 取消停止RTP推流
zlmStreamChangeHookService.getRegistHandler(app).put(callId,()->{
schedule.cancel(true);
zlmStreamRegistHookEvent(app, callId, ssrc);
});
// 如果 注销 3.5 秒内 没有再注册, 就彻底取消相关事件的订阅
scheduledExecutorService.schedule(()->{
zlmStreamChangeHookService.getRegistHandler(app).remove(callId);
},3500, TimeUnit.MILLISECONDS);
});
});
}
private Flow.Subscriber<SIPRequest> ffmpegTask(SIPRequest request,ConcurrentHashMap<String, Executor> tasks, String callId, String key, MockingDevice device){
Optional.ofNullable(tasks.get(callId)).ifPresent(task->{
task.getWatchdog().destroyProcess();
@ -475,6 +496,7 @@ public class DeviceProxyService {
stopSendRtp.setStream(callId);
stopSendRtp.setSsrc(ssrc);
log.info("结束 zlm rtp 推流, app {}, stream {}, ssrc {}", ZLM_FFMPEG_PROXY_APP, callId, ssrc);
zlmMediaService.stopSendRtp(stopSendRtp);
});
@ -562,6 +584,7 @@ public class DeviceProxyService {
stopSendRtp.setStream(callId);
stopSendRtp.setSsrc(ssrc);
log.info("结束 zlm rtp 推流, app {}, stream {}, ssrc {}", DEFAULT_ZLM_APP, callId, ssrc);
zlmMediaService.stopSendRtp(stopSendRtp);
});

View File

@ -29,6 +29,8 @@ public class ZlmInitService {
hook.setOnStreamChanged(zlmHookConfig.getHook() + "/on_stream_changed");
hook.setOnStreamNoneReader(zlmHookConfig.getHook() + "/on_stream_none_reader");
hook.setOnPublish(zlmHookConfig.getHook() + "/on_publish");
config.getRtmp().setHandshakeSecond(5);
config.getRtmp().setKeepAliveSecond(10);
zlmMediaService.setServerConfig(config);
}
}