zlm startSendRtp,startSendRtpPassive,stopSendRtp api
This commit is contained in:
parent
9171976c6b
commit
26dcbd9b7c
@ -13,5 +13,8 @@ import lombok.NoArgsConstructor;
|
|||||||
@Builder
|
@Builder
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
public class CloseRtpServer {
|
public class CloseRtpServer {
|
||||||
|
/**
|
||||||
|
* 调用 openRtpServer 接口时提供的流ID
|
||||||
|
*/
|
||||||
private String streamId;
|
private String streamId;
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,18 @@ import lombok.*;
|
|||||||
@Builder
|
@Builder
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
public class OpenRtpServer {
|
public class OpenRtpServer {
|
||||||
|
/**
|
||||||
|
* 接收端口,0则为随机端口
|
||||||
|
*/
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0 udp 模式,1 tcp 被动模式, 2 tcp 主动模式。 (兼容enable_tcp 为0/1)
|
||||||
|
*/
|
||||||
private int tcpMode;
|
private int tcpMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 该端口绑定的流ID,该端口只能创建这一个流(而不是根据ssrc创建多个)
|
||||||
|
*/
|
||||||
private String streamId;
|
private String streamId;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package cn.skcks.docking.gb28181.media.dto.rtp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
public class RtpServer {
|
||||||
|
/**
|
||||||
|
* 绑定的端口号
|
||||||
|
*/
|
||||||
|
private int port;
|
||||||
|
/**
|
||||||
|
* 绑定的流ID
|
||||||
|
*/
|
||||||
|
private String streamId;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package cn.skcks.docking.gb28181.media.dto.rtp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
public class StartSendRtp {
|
||||||
|
/**
|
||||||
|
* 添加的流的虚拟主机,例如__defaultVhost__
|
||||||
|
*/
|
||||||
|
private String vhost = "__defaultVhost__";
|
||||||
|
/**
|
||||||
|
* 应用名
|
||||||
|
*/
|
||||||
|
private String app;
|
||||||
|
/**
|
||||||
|
* 流id
|
||||||
|
*/
|
||||||
|
private String stream;
|
||||||
|
/**
|
||||||
|
* 推流的rtp的ssrc,指定不同的ssrc可以同时推流到多个服务器
|
||||||
|
*/
|
||||||
|
private String ssrc;
|
||||||
|
/**
|
||||||
|
* 目标ip或域名
|
||||||
|
*/
|
||||||
|
private String dstUrl;
|
||||||
|
/**
|
||||||
|
* 目标端口
|
||||||
|
*/
|
||||||
|
private int dstPort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为udp模式,否则为tcp模式
|
||||||
|
*/
|
||||||
|
@JsonProperty("is_udp")
|
||||||
|
private boolean isUdp;
|
||||||
|
/**
|
||||||
|
* 使用的本机端口,为0或不传时默认为随机端口
|
||||||
|
*/
|
||||||
|
private Integer srcPort;
|
||||||
|
/**
|
||||||
|
* 发送时,rtp的pt(uint8_t),不传时默认为96
|
||||||
|
*/
|
||||||
|
private Integer pt;
|
||||||
|
/**
|
||||||
|
* 发送时,rtp的负载类型。为1时,负载为ps;为0时,为es;不传时默认为1
|
||||||
|
*/
|
||||||
|
private Integer usePs;
|
||||||
|
/**
|
||||||
|
* 当use_ps 为0时,有效。为1时,发送音频;为0时,发送视频;不传时默认为0
|
||||||
|
*/
|
||||||
|
private Integer onlyAudio;
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package cn.skcks.docking.gb28181.media.dto.rtp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
public class StartSendRtpPassive {
|
||||||
|
/**
|
||||||
|
* 添加的流的虚拟主机,例如__defaultVhost__
|
||||||
|
*/
|
||||||
|
private String vhost = "__defaultVhost__";
|
||||||
|
/**
|
||||||
|
* 应用名
|
||||||
|
*/
|
||||||
|
private String app;
|
||||||
|
/**
|
||||||
|
* 流id
|
||||||
|
*/
|
||||||
|
private String stream;
|
||||||
|
/**
|
||||||
|
* 推流的rtp的ssrc,指定不同的ssrc可以同时推流到多个服务器
|
||||||
|
*/
|
||||||
|
private String ssrc;
|
||||||
|
/**
|
||||||
|
* 使用的本机端口,为0或不传时默认为随机端口
|
||||||
|
*/
|
||||||
|
private Integer srcPort;
|
||||||
|
/**
|
||||||
|
* 发送时,rtp的pt(uint8_t),不传时默认为96
|
||||||
|
*/
|
||||||
|
private Integer pt;
|
||||||
|
/**
|
||||||
|
* 发送时,rtp的负载类型。为1时,负载为ps;为0时,为es;不传时默认为1
|
||||||
|
*/
|
||||||
|
private Integer usePs;
|
||||||
|
/**
|
||||||
|
* 当use_ps 为0时,有效。为1时,发送音频;为0时,发送视频;不传时默认为0
|
||||||
|
*/
|
||||||
|
private Integer onlyAudio;
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package cn.skcks.docking.gb28181.media.dto.rtp;
|
||||||
|
|
||||||
|
import cn.skcks.docking.gb28181.media.dto.status.ResponseStatus;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
public class StartSendRtpResp {
|
||||||
|
private ResponseStatus code;
|
||||||
|
private Integer localPort;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package cn.skcks.docking.gb28181.media.dto.rtp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
public class StopSendRtp {
|
||||||
|
/**
|
||||||
|
* 添加的流的虚拟主机,例如__defaultVhost__
|
||||||
|
*/
|
||||||
|
private String vhost = "__defaultVhost__";
|
||||||
|
/**
|
||||||
|
* 应用名
|
||||||
|
*/
|
||||||
|
private String app;
|
||||||
|
/**
|
||||||
|
* 流id
|
||||||
|
*/
|
||||||
|
private String stream;
|
||||||
|
/**
|
||||||
|
* 推流的rtp的ssrc,指定不同的ssrc可以同时推流到多个服务器
|
||||||
|
*/
|
||||||
|
private String ssrc;
|
||||||
|
}
|
@ -5,10 +5,7 @@ import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxy;
|
|||||||
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxyResp;
|
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.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.CloseRtpServer;
|
import cn.skcks.docking.gb28181.media.dto.rtp.*;
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServerResp;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServer;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServerResp;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
@ -41,6 +38,9 @@ public interface ZlmMediaHttpClient {
|
|||||||
@PostMapping("/index/api/closeRtpServer")
|
@PostMapping("/index/api/closeRtpServer")
|
||||||
CloseRtpServerResp closeRtpServer(@RequestParam String secret, @RequestBody CloseRtpServer params);
|
CloseRtpServerResp closeRtpServer(@RequestParam String secret, @RequestBody CloseRtpServer params);
|
||||||
|
|
||||||
|
@GetMapping("/index/api/listRtpServer")
|
||||||
|
ZlmResponse<List<RtpServer>> listRtpServer(@RequestParam String secret);
|
||||||
|
|
||||||
@GetMapping("/index/api/version")
|
@GetMapping("/index/api/version")
|
||||||
ZlmResponse<VersionResp> version(@RequestParam String secret);
|
ZlmResponse<VersionResp> version(@RequestParam String secret);
|
||||||
|
|
||||||
@ -49,4 +49,13 @@ public interface ZlmMediaHttpClient {
|
|||||||
|
|
||||||
@PostMapping("/index/api/delStreamPusherProxy")
|
@PostMapping("/index/api/delStreamPusherProxy")
|
||||||
ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxy(@RequestParam String secret, @RequestParam String key);
|
ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxy(@RequestParam String secret, @RequestParam String key);
|
||||||
|
|
||||||
|
@PostMapping("/index/api/startSendRtp")
|
||||||
|
StartSendRtpResp startSendRtp(@RequestParam String secret, @RequestBody StartSendRtp params);
|
||||||
|
|
||||||
|
@PostMapping("/index/api/startSendRtpPassive")
|
||||||
|
StartSendRtpResp startSendRtpPassive(@RequestParam String secret, @RequestBody StartSendRtpPassive params);
|
||||||
|
|
||||||
|
@PostMapping("/index/api/stopSendRtp")
|
||||||
|
ZlmResponse<Void> stopSendRtp(@RequestParam String secret, @RequestBody StopSendRtp params);
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,12 @@ import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxy;
|
|||||||
import cn.skcks.docking.gb28181.media.dto.proxy.AddStreamPusherProxyResp;
|
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.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.CloseRtpServer;
|
import cn.skcks.docking.gb28181.media.dto.rtp.*;
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.CloseRtpServerResp;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServer;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServerResp;
|
|
||||||
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -62,6 +61,13 @@ public class ZlmMediaService {
|
|||||||
return exchange.closeRtpServer(secret, params);
|
return exchange.closeRtpServer(secret, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取openRtpServer接口创建的所有RTP服务器
|
||||||
|
*/
|
||||||
|
public ZlmResponse<List<RtpServer>> listRtpServer(){
|
||||||
|
return exchange.listRtpServer(secret);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 功能:获取版本信息,如分支,commit id, 编译时间
|
* 功能:获取版本信息,如分支,commit id, 编译时间
|
||||||
*/
|
*/
|
||||||
@ -85,5 +91,32 @@ public class ZlmMediaService {
|
|||||||
public ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxy(@RequestParam String key) {
|
public ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxy(@RequestParam String key) {
|
||||||
return exchange.delStreamPusherProxy(secret, key);
|
return exchange.delStreamPusherProxy(secret, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>功能:作为GB28181客户端,启动ps-rtp推流,支持rtp/udp方式;该接口支持rtsp/rtmp等协议转ps-rtp推流。</p>
|
||||||
|
* 第一次推流失败会直接返回错误,成功一次后,后续失败也将无限重试。
|
||||||
|
*/
|
||||||
|
StartSendRtpResp startSendRtp(StartSendRtp params){
|
||||||
|
return exchange.startSendRtp(secret, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>功能:作为GB28181 Passive TCP服务器;该接口支持rtsp/rtmp等协议转ps-rtp被动推流。</p>
|
||||||
|
* <p>调用该接口,zlm会启动tcp服务器等待连接请求,连接建立后,zlm会关闭tcp服务器,然后源源不断的往客户端推流。</p>
|
||||||
|
* <p>第一次推流失败会直接返回错误,成功一次后,后续失败也将无限重试(不停地建立tcp监听,超时后再关闭)。</p>
|
||||||
|
*/
|
||||||
|
StartSendRtpResp startSendRtpPassive(StartSendRtpPassive params){
|
||||||
|
return exchange.startSendRtpPassive(secret, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能:停止GB28181 ps-rtp推流
|
||||||
|
*/
|
||||||
|
ZlmResponse<Void> stopSendRtp(StopSendRtp params){
|
||||||
|
return exchange.stopSendRtp(secret, params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package cn.skcks.docking.gb28181.test;
|
|||||||
|
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.skcks.docking.gb28181.common.json.JsonResponse;
|
import cn.skcks.docking.gb28181.common.json.JsonResponse;
|
||||||
|
import cn.skcks.docking.gb28181.common.json.JsonUtils;
|
||||||
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.AddStreamPusherProxy;
|
||||||
@ -11,6 +12,8 @@ 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;
|
||||||
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServer;
|
import cn.skcks.docking.gb28181.media.dto.rtp.OpenRtpServer;
|
||||||
|
import cn.skcks.docking.gb28181.media.dto.rtp.RtpServer;
|
||||||
|
import cn.skcks.docking.gb28181.media.dto.rtp.StartSendRtp;
|
||||||
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
import cn.skcks.docking.gb28181.media.dto.version.VersionResp;
|
||||||
import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService;
|
import cn.skcks.docking.gb28181.media.proxy.ZlmMediaService;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
@ -73,7 +76,10 @@ public class MediaServiceTest {
|
|||||||
String streamId = "testStream";
|
String streamId = "testStream";
|
||||||
OpenRtpServer openRtpServer = new OpenRtpServer(port,0,streamId);
|
OpenRtpServer openRtpServer = new OpenRtpServer(port,0,streamId);
|
||||||
log.info("{}", zlmMediaService.openRtpServer(openRtpServer));
|
log.info("{}", zlmMediaService.openRtpServer(openRtpServer));
|
||||||
Thread.sleep(500);
|
|
||||||
|
ZlmResponse<List<RtpServer>> listRtpServer = zlmMediaService.listRtpServer();
|
||||||
|
log.info("{}", listRtpServer.getData());
|
||||||
|
|
||||||
CloseRtpServer closeRtpServer = new CloseRtpServer(streamId);
|
CloseRtpServer closeRtpServer = new CloseRtpServer(streamId);
|
||||||
log.info("{}", zlmMediaService.closeRtpServer(closeRtpServer));
|
log.info("{}", zlmMediaService.closeRtpServer(closeRtpServer));
|
||||||
}
|
}
|
||||||
@ -137,4 +143,11 @@ public class MediaServiceTest {
|
|||||||
ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxyRespZlmResponse = zlmMediaService.delStreamPusherProxy(key);
|
ZlmResponse<DelStreamPusherProxyResp> delStreamPusherProxyRespZlmResponse = zlmMediaService.delStreamPusherProxy(key);
|
||||||
log.info("{}",delStreamPusherProxyRespZlmResponse);
|
log.info("{}",delStreamPusherProxyRespZlmResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void simpleTest(){
|
||||||
|
StartSendRtp startSendRtp = new StartSendRtp();
|
||||||
|
startSendRtp.setUdp(true);
|
||||||
|
log.info("{}",JsonUtils.toJson(startSendRtp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user