zlm addStreamProxy,delStreamProxy api

This commit is contained in:
shikong 2023-08-20 22:28:19 +08:00
parent 4437638b0b
commit ac2662b8ed
7 changed files with 187 additions and 9 deletions

View File

@ -0,0 +1,125 @@
package cn.skcks.docking.gb28181.media.dto.proxy;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class AddStreamProxy {
/**
* 添加的流的虚拟主机例如__defaultVhost__
*/
@Builder.Default
private String vhost = "__defaultVhost__";
/**
* 添加的流的应用名例如live
*/
private String app;
/**
* 添加的流的id名
*/
private String stream;
/**
* 拉流地址
*/
private String url;
/**
* 转推失败重试次数-1 无限重试
*/
private Integer retryCount;
/**
* rtsp拉流时拉流方式0tcp1udp2组播
*/
private Integer rtpType;
/**
* 拉流超时时间单位秒float类型
*/
private Double timeoutSec;
/**
* 是否转换成hls-mpegts协议
*/
private Boolean enableHls;
/**
* 是否转换成hls-fmp4协议
*/
private Boolean enableHlsFmp4;
/**
* 是否允许mp4录制
*/
private Boolean enableMp4;
/**
* 是否转rtsp协议
*/
private Boolean enableRtsp;
/**
* 是否转rtmp/flv协议
*/
private Boolean enableRtmp;
/**
* 是否转http-ts/ws-ts协议
*/
private Boolean enableTs;
/**
* 是否转http-fmp4/ws-fmp4协议
*/
private Boolean enableFmp4;
/**
* 该协议是否有人观看才生成
*/
private Boolean hlsDemand;
/**
* 该协议是否有人观看才生成
*/
private Boolean rtspDemand;
/**
* 该协议是否有人观看才生成
*/
private Boolean rtmpDemand;
/**
* 该协议是否有人观看才生成
*/
private Boolean tsDemand;
/**
* 该协议是否有人观看才生成
*/
private Boolean fmp4Demand;
/**
* 转协议时是否开启音频
*/
private Boolean enableAudio;
/**
* 转协议时无音频是否添加静音aac音频
*/
private Boolean addMuteAudio;
/**
* mp4录制文件保存根目录置空使用默认
*/
private String mp4SavePath;
/**
* mp4录制切片大小单位秒
*/
private Integer mp4MaxSecond;
/**
* MP4录制是否当作观看者参与播放人数计数
*/
private Boolean mp4AsPlayer;
/**
* hls文件保存保存根目录置空使用默认
*/
private Boolean hlsSavePath;
/**
* 该流是否开启时间戳覆盖(0:绝对时间戳/1:系统时间戳/2:相对时间戳)
*/
private Integer modifyStamp;
/**
* 无人观看是否自动关闭流(不触发无人观看hook)
*/
private Boolean autoClose;
}

View File

@ -0,0 +1,11 @@
package cn.skcks.docking.gb28181.media.dto.proxy;
import lombok.Data;
@Data
public class AddStreamProxyResp {
/**
* 流的唯一标识
*/
private String key;
}

View File

@ -4,5 +4,8 @@ import lombok.Data;
@Data @Data
public class AddStreamPusherProxyResp { public class AddStreamPusherProxyResp {
/**
* 流的唯一标识
*/
private String key; private String key;
} }

View File

@ -0,0 +1,8 @@
package cn.skcks.docking.gb28181.media.dto.proxy;
import lombok.Data;
@Data
public class DelStreamProxyResp {
private Boolean flag;
}

View File

@ -1,9 +1,7 @@
package cn.skcks.docking.gb28181.media.proxy; package cn.skcks.docking.gb28181.media.proxy;
import cn.skcks.docking.gb28181.media.dto.config.ServerConfig; import cn.skcks.docking.gb28181.media.dto.config.ServerConfig;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxy; import cn.skcks.docking.gb28181.media.dto.proxy.*;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.proxy.DelStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse; import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse;
import cn.skcks.docking.gb28181.media.dto.rtp.*; import cn.skcks.docking.gb28181.media.dto.rtp.*;
import cn.skcks.docking.gb28181.media.dto.snap.Snap; import cn.skcks.docking.gb28181.media.dto.snap.Snap;
@ -65,4 +63,10 @@ public interface ZlmMediaHttpClient {
@GetMapping("/index/api/restartServer") @GetMapping("/index/api/restartServer")
ZlmResponse<Void> restartServer(@RequestParam String secret); ZlmResponse<Void> restartServer(@RequestParam String secret);
@PostMapping("/index/api/addStreamProxy")
ZlmResponse<AddStreamProxyResp> addStreamProxy(@RequestParam String secret, @RequestBody AddStreamProxy params);
@GetMapping("/index/api/delStreamProxy")
ZlmResponse<DelStreamProxyResp> delStreamProxy(@RequestParam String secret, @RequestParam String key);
} }

View File

@ -1,9 +1,7 @@
package cn.skcks.docking.gb28181.media.proxy; package cn.skcks.docking.gb28181.media.proxy;
import cn.skcks.docking.gb28181.media.dto.config.ServerConfig; import cn.skcks.docking.gb28181.media.dto.config.ServerConfig;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxy; import cn.skcks.docking.gb28181.media.dto.proxy.*;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.proxy.DelStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse; import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse;
import cn.skcks.docking.gb28181.media.dto.rtp.*; import cn.skcks.docking.gb28181.media.dto.rtp.*;
import cn.skcks.docking.gb28181.media.dto.snap.Snap; import cn.skcks.docking.gb28181.media.dto.snap.Snap;
@ -132,5 +130,19 @@ public class ZlmMediaService {
public ZlmResponse<Void> restartServer(){ public ZlmResponse<Void> restartServer(){
return exchange.restartServer(secret); return exchange.restartServer(secret);
} }
/**
* 功能动态添加rtsp/rtmp/hls/http-ts/http-flv拉流代理(只支持H264/H265/aac/G711/opus负载)
*/
public ZlmResponse<AddStreamProxyResp> addStreamProxy(AddStreamProxy params){
return exchange.addStreamProxy(secret, params);
}
/**
* 功能关闭拉流代理
*/
public ZlmResponse<DelStreamProxyResp> delStreamProxy(String key){
return exchange.delStreamProxy(secret, key);
}
} }

View File

@ -10,9 +10,7 @@ import cn.skcks.docking.gb28181.media.config.ZlmMediaConfig;
import cn.skcks.docking.gb28181.media.dto.config.FFMpegConfig; import cn.skcks.docking.gb28181.media.dto.config.FFMpegConfig;
import cn.skcks.docking.gb28181.media.dto.config.HookConfig; import cn.skcks.docking.gb28181.media.dto.config.HookConfig;
import cn.skcks.docking.gb28181.media.dto.config.ServerConfig; import cn.skcks.docking.gb28181.media.dto.config.ServerConfig;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxy; import cn.skcks.docking.gb28181.media.dto.proxy.*;
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.proxy.DelStreamPusherProxyResp;
import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse; import cn.skcks.docking.gb28181.media.dto.response.ZlmResponse;
import cn.skcks.docking.gb28181.media.dto.response.ZlmResponseConvertor; import cn.skcks.docking.gb28181.media.dto.response.ZlmResponseConvertor;
import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServer; import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServer;
@ -186,4 +184,21 @@ public class MediaServiceTest {
startSendRtp.setUdp(true); startSendRtp.setUdp(true);
log.info("{}",JsonUtils.toJson(startSendRtp)); log.info("{}",JsonUtils.toJson(startSendRtp));
} }
@Test
void streamProxyTest(){
AddStreamProxy addStreamProxy = AddStreamProxy.builder()
.app("proxy")
.stream("test")
.url("rtmp://127.0.0.1:1935/live/test")
.build();
ZlmResponse<AddStreamProxyResp> addedStreamProxy = zlmMediaService.addStreamProxy(addStreamProxy);
log.info("{}", addedStreamProxy);
String key = Optional.ofNullable(addedStreamProxy.getData()).orElse(new AddStreamProxyResp()).getKey();
log.info("{}", key);
ZlmResponse<DelStreamProxyResp> delStreamProxyRespZlmResponse = zlmMediaService.delStreamProxy(key);
log.info("{}", delStreamProxyRespZlmResponse);
}
} }