[*] 日常优化
This commit is contained in:
@@ -15,6 +15,8 @@ import java.lang.annotation.Target;
|
|||||||
* -[消息类型]) 全员广播:对所有的终端广播信令(排除自己)
|
* -[消息类型]) 全员广播:对所有的终端广播信令(排除自己)
|
||||||
* +[消息类型]) 全员广播:对所有的终端广播信令(包含自己)
|
* +[消息类型]) 全员广播:对所有的终端广播信令(包含自己)
|
||||||
*
|
*
|
||||||
|
* 消息类型可以省略表示和前面一致
|
||||||
|
*
|
||||||
* @author acgist
|
* @author acgist
|
||||||
*/
|
*/
|
||||||
@Target(ElementType.TYPE)
|
@Target(ElementType.TYPE)
|
||||||
@@ -26,15 +28,15 @@ public @interface Description {
|
|||||||
/**
|
/**
|
||||||
* @return 消息主体
|
* @return 消息主体
|
||||||
*/
|
*/
|
||||||
String[] body() default { "{}" };
|
String[] body() default "{}";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 数据流向
|
* @return 数据流向
|
||||||
*/
|
*/
|
||||||
String[] flow() default { "终端->信令服务->终端" };
|
String[] flow() default "终端->信令服务->终端";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 描述信息
|
* @return 详细描述
|
||||||
*/
|
*/
|
||||||
String memo() default "";
|
String memo() default "";
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public interface Constant {
|
|||||||
*/
|
*/
|
||||||
String TO = "to";
|
String TO = "to";
|
||||||
/**
|
/**
|
||||||
* IP
|
* IP地址
|
||||||
*/
|
*/
|
||||||
String IP = "ip";
|
String IP = "ip";
|
||||||
/**
|
/**
|
||||||
@@ -58,21 +58,13 @@ public interface Constant {
|
|||||||
*/
|
*/
|
||||||
String CHARGING = "charging";
|
String CHARGING = "charging";
|
||||||
/**
|
/**
|
||||||
* 终端是否正在录像
|
* 终端是否正在录像(录像端)
|
||||||
*/
|
*/
|
||||||
String CLIENT_RECORDING = "clientRecording";
|
String CLIENT_RECORDING = "clientRecording";
|
||||||
/**
|
/**
|
||||||
* 服务端是否正在录像
|
* 终端是否正在录像(服务端)
|
||||||
*/
|
*/
|
||||||
String SERVER_RECORDING = "serverRecording";
|
String SERVER_RECORDING = "serverRecording";
|
||||||
/**
|
|
||||||
* 地址
|
|
||||||
*/
|
|
||||||
String URLS = "urls";
|
|
||||||
/**
|
|
||||||
* 凭证
|
|
||||||
*/
|
|
||||||
String CREDENTIAL = "credential";
|
|
||||||
/**
|
/**
|
||||||
* 最小
|
* 最小
|
||||||
*/
|
*/
|
||||||
@@ -118,7 +110,7 @@ public interface Constant {
|
|||||||
*/
|
*/
|
||||||
String PORT = "port";
|
String PORT = "port";
|
||||||
/**
|
/**
|
||||||
* 地址
|
* 主机
|
||||||
*/
|
*/
|
||||||
String HOST = "host";
|
String HOST = "host";
|
||||||
/**
|
/**
|
||||||
@@ -153,10 +145,6 @@ public interface Constant {
|
|||||||
* WebRTC
|
* WebRTC
|
||||||
*/
|
*/
|
||||||
String WEBRTC = "webrtc";
|
String WEBRTC = "webrtc";
|
||||||
/**
|
|
||||||
* 音量
|
|
||||||
*/
|
|
||||||
String VOLUMES = "volumes";
|
|
||||||
/**
|
/**
|
||||||
* 日期时间
|
* 日期时间
|
||||||
*/
|
*/
|
||||||
@@ -181,6 +169,10 @@ public interface Constant {
|
|||||||
* 来源终端ID
|
* 来源终端ID
|
||||||
*/
|
*/
|
||||||
String SOURCE_ID = "sourceId";
|
String SOURCE_ID = "sourceId";
|
||||||
|
/**
|
||||||
|
* 目标终端ID
|
||||||
|
*/
|
||||||
|
String TARGET_ID = "targetId";
|
||||||
/**
|
/**
|
||||||
* 会话ID
|
* 会话ID
|
||||||
*/
|
*/
|
||||||
@@ -209,6 +201,14 @@ public interface Constant {
|
|||||||
* 媒体服务ID
|
* 媒体服务ID
|
||||||
*/
|
*/
|
||||||
String MEDIA_CLIENT_ID = "mediaClientId";
|
String MEDIA_CLIENT_ID = "mediaClientId";
|
||||||
|
/**
|
||||||
|
* 地址列表
|
||||||
|
*/
|
||||||
|
String URLS = "urls";
|
||||||
|
/**
|
||||||
|
* 凭证信息
|
||||||
|
*/
|
||||||
|
String CREDENTIAL = "credential";
|
||||||
/**
|
/**
|
||||||
* ICE服务
|
* ICE服务
|
||||||
*/
|
*/
|
||||||
@@ -316,12 +316,20 @@ public interface Constant {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 生产者ID生成器
|
* 生产者ID生成器
|
||||||
|
* type 媒体类型
|
||||||
|
* producerId 生产者终端ID
|
||||||
*/
|
*/
|
||||||
public static final BiFunction<String, String, String> STREAM_ID_PRODUCER = (type, producerId) -> type + "::" + producerId;
|
public static final BiFunction<String, String, String> STREAM_ID_PRODUCER
|
||||||
|
=
|
||||||
|
(type, producerId) -> type + "::" + producerId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消费者ID生成器
|
* 消费者ID生成器
|
||||||
|
* producerStreamId 生产者媒体ID
|
||||||
|
* consumerId 消费者终端ID
|
||||||
*/
|
*/
|
||||||
public static final BiFunction<String, String, String> STREAM_ID_CONSUMER = (producerStreamId, consumerId) -> producerStreamId + "->" + consumerId;
|
public static final BiFunction<String, String, String> STREAM_ID_CONSUMER
|
||||||
|
=
|
||||||
|
(producerStreamId, consumerId) -> producerStreamId + "->" + consumerId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,13 @@ public class MediaVideoProperties {
|
|||||||
*/
|
*/
|
||||||
public enum Format {
|
public enum Format {
|
||||||
|
|
||||||
|
// VP8
|
||||||
VP8,
|
VP8,
|
||||||
|
// VP9
|
||||||
VP9,
|
VP9,
|
||||||
|
// H264
|
||||||
H264,
|
H264,
|
||||||
|
// H265
|
||||||
H265;
|
H265;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,21 +9,22 @@ import lombok.Getter;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地址重写
|
* 地址重写配置
|
||||||
|
* 用于多网卡多子网复杂网络环境自动适配IP地址
|
||||||
*
|
*
|
||||||
* @author acgist
|
* @author acgist
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Schema(title = "地址重写", description = "地址重写")
|
@Schema(title = "地址重写", description = "地址重写")
|
||||||
@ConfigurationProperties(prefix = "taoyao.ip-rewrite")
|
@ConfigurationProperties(prefix = "taoyao.rewrite")
|
||||||
public class IpRewriteProperties {
|
public class RewriteProperties {
|
||||||
|
|
||||||
@Schema(title = "是否启用", description = "是否启用")
|
@Schema(title = "是否启用", description = "是否启用")
|
||||||
private Boolean enabled;
|
private Boolean enabled;
|
||||||
@Schema(title = "子网掩码", description = "子网掩码:主机号的长度")
|
@Schema(title = "子网掩码", description = "子网掩码:主机号的长度")
|
||||||
private Integer prefix;
|
private Integer prefix;
|
||||||
@Schema(title = "重写规则", description = "重写规则")
|
@Schema(title = "重写规则", description = "重写规则")
|
||||||
private List<IpRewriteRuleProperties> rule;
|
private List<RewriteRuleProperties> rule;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,14 +6,18 @@ import lombok.Setter;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 重写规则
|
* 重写规则
|
||||||
* 没有配置内网地址等于网络号加上原始主机号
|
* 配置内网地址直接返回内网地址
|
||||||
|
* 没有配置内网地址内网地址等于网络号加上原始主机号
|
||||||
|
*
|
||||||
|
* 内网设备IP返回内网地址
|
||||||
|
* 外网设备IP返回外网地址
|
||||||
*
|
*
|
||||||
* @author acgist
|
* @author acgist
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Schema(title = "重写规则", description = "重写规则")
|
@Schema(title = "重写规则", description = "重写规则")
|
||||||
public class IpRewriteRuleProperties {
|
public class RewriteRuleProperties {
|
||||||
|
|
||||||
@Schema(title = "网络号", description = "网络号:匹配终端IP")
|
@Schema(title = "网络号", description = "网络号:匹配终端IP")
|
||||||
private String network;
|
private String network;
|
||||||
@@ -45,7 +45,7 @@ import org.springframework.web.servlet.NoHandlerFoundException;
|
|||||||
|
|
||||||
import com.acgist.taoyao.boot.config.FfmpegProperties;
|
import com.acgist.taoyao.boot.config.FfmpegProperties;
|
||||||
import com.acgist.taoyao.boot.config.IdProperties;
|
import com.acgist.taoyao.boot.config.IdProperties;
|
||||||
import com.acgist.taoyao.boot.config.IpRewriteProperties;
|
import com.acgist.taoyao.boot.config.RewriteProperties;
|
||||||
import com.acgist.taoyao.boot.config.MediaProperties;
|
import com.acgist.taoyao.boot.config.MediaProperties;
|
||||||
import com.acgist.taoyao.boot.config.ScriptProperties;
|
import com.acgist.taoyao.boot.config.ScriptProperties;
|
||||||
import com.acgist.taoyao.boot.config.SecurityProperties;
|
import com.acgist.taoyao.boot.config.SecurityProperties;
|
||||||
@@ -92,8 +92,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
SocketProperties.class,
|
SocketProperties.class,
|
||||||
TaoyaoProperties.class,
|
TaoyaoProperties.class,
|
||||||
WebrtcProperties.class,
|
WebrtcProperties.class,
|
||||||
|
RewriteProperties.class,
|
||||||
SecurityProperties.class,
|
SecurityProperties.class,
|
||||||
IpRewriteProperties.class
|
|
||||||
})
|
})
|
||||||
public class BootAutoConfiguration {
|
public class BootAutoConfiguration {
|
||||||
|
|
||||||
@@ -150,12 +150,12 @@ public class BootAutoConfiguration {
|
|||||||
public CommandLineRunner successCommandLineRunner(
|
public CommandLineRunner successCommandLineRunner(
|
||||||
TaskExecutor taskExecutor,
|
TaskExecutor taskExecutor,
|
||||||
TaoyaoProperties taoyaoProperties,
|
TaoyaoProperties taoyaoProperties,
|
||||||
IpRewriteProperties ipRewriteProperties
|
RewriteProperties rewriteProperties
|
||||||
) {
|
) {
|
||||||
return new OrderedCommandLineRunner() {
|
return new OrderedCommandLineRunner() {
|
||||||
@Override
|
@Override
|
||||||
public void run(String ... args) throws Exception {
|
public void run(String ... args) throws Exception {
|
||||||
NetUtils.init(ipRewriteProperties);
|
NetUtils.init(rewriteProperties);
|
||||||
HTTPUtils.init(taoyaoProperties.getTimeout(), taskExecutor);
|
HTTPUtils.init(taoyaoProperties.getTimeout(), taskExecutor);
|
||||||
BootAutoConfiguration.this.registerException();
|
BootAutoConfiguration.this.registerException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import java.util.BitSet;
|
|||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.acgist.taoyao.boot.config.IpRewriteProperties;
|
import com.acgist.taoyao.boot.config.RewriteProperties;
|
||||||
import com.acgist.taoyao.boot.config.IpRewriteRuleProperties;
|
import com.acgist.taoyao.boot.config.RewriteRuleProperties;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@@ -36,14 +36,14 @@ public final class NetUtils {
|
|||||||
/**
|
/**
|
||||||
* 地址重写
|
* 地址重写
|
||||||
*/
|
*/
|
||||||
private static IpRewriteProperties ipRewriteProperties;
|
private static RewriteProperties rewriteProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载配置
|
* 加载配置
|
||||||
*/
|
*/
|
||||||
public static final void init(IpRewriteProperties ipRewriteProperties) {
|
public static final void init(RewriteProperties rewriteProperties) {
|
||||||
try {
|
try {
|
||||||
NetUtils.ipRewriteProperties = ipRewriteProperties;
|
NetUtils.rewriteProperties = rewriteProperties;
|
||||||
final InetAddress localHost = InetAddress.getLocalHost();
|
final InetAddress localHost = InetAddress.getLocalHost();
|
||||||
final InetAddress loopbackAddress = InetAddress.getLoopbackAddress();
|
final InetAddress loopbackAddress = InetAddress.getLoopbackAddress();
|
||||||
NetUtils.localIp = localHost.getHostAddress();
|
NetUtils.localIp = localHost.getHostAddress();
|
||||||
@@ -89,8 +89,8 @@ public final class NetUtils {
|
|||||||
final int length = (sourceBytes.length & clientBytes.length) * Byte.SIZE;
|
final int length = (sourceBytes.length & clientBytes.length) * Byte.SIZE;
|
||||||
final BitSet sourceBit = BitSet.valueOf(sourceBytes);
|
final BitSet sourceBit = BitSet.valueOf(sourceBytes);
|
||||||
final BitSet clientBit = BitSet.valueOf(clientBytes);
|
final BitSet clientBit = BitSet.valueOf(clientBytes);
|
||||||
sourceBit.set(NetUtils.ipRewriteProperties.getPrefix(), length, true);
|
sourceBit.set(NetUtils.rewriteProperties.getPrefix(), length, true);
|
||||||
clientBit.set(NetUtils.ipRewriteProperties.getPrefix(), length, true);
|
clientBit.set(NetUtils.rewriteProperties.getPrefix(), length, true);
|
||||||
final BigInteger source = new BigInteger(sourceBit.toByteArray());
|
final BigInteger source = new BigInteger(sourceBit.toByteArray());
|
||||||
final BigInteger client = new BigInteger(clientBit.toByteArray());
|
final BigInteger client = new BigInteger(clientBit.toByteArray());
|
||||||
return source.equals(client);
|
return source.equals(client);
|
||||||
@@ -110,10 +110,10 @@ public final class NetUtils {
|
|||||||
* @return 替换IP
|
* @return 替换IP
|
||||||
*/
|
*/
|
||||||
public static final String rewriteIp(final String sourceIp, final String clientIp) {
|
public static final String rewriteIp(final String sourceIp, final String clientIp) {
|
||||||
if(Boolean.FALSE.equals(NetUtils.ipRewriteProperties.getEnabled())) {
|
if(Boolean.FALSE.equals(NetUtils.rewriteProperties.getEnabled())) {
|
||||||
return sourceIp;
|
return sourceIp;
|
||||||
}
|
}
|
||||||
final IpRewriteRuleProperties rule = NetUtils.ipRewriteProperties.getRule().stream()
|
final RewriteRuleProperties rule = NetUtils.rewriteProperties.getRule().stream()
|
||||||
.filter(v -> NetUtils.subnetIp(v.getNetwork(), clientIp))
|
.filter(v -> NetUtils.subnetIp(v.getNetwork(), clientIp))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
@@ -138,7 +138,7 @@ public final class NetUtils {
|
|||||||
final BitSet sourceBit = BitSet.valueOf(sourceBytes);
|
final BitSet sourceBit = BitSet.valueOf(sourceBytes);
|
||||||
final BitSet clientBit = BitSet.valueOf(clientBytes);
|
final BitSet clientBit = BitSet.valueOf(clientBytes);
|
||||||
// 替换网络号保留主机号
|
// 替换网络号保留主机号
|
||||||
for (int index = 0; index < NetUtils.ipRewriteProperties.getPrefix(); index++) {
|
for (int index = 0; index < NetUtils.rewriteProperties.getPrefix(); index++) {
|
||||||
sourceBit.set(index, clientBit.get(index));
|
sourceBit.set(index, clientBit.get(index));
|
||||||
}
|
}
|
||||||
final byte[] bytes = sourceBit.toByteArray();
|
final byte[] bytes = sourceBit.toByteArray();
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import com.acgist.taoyao.boot.config.IpRewriteProperties;
|
import com.acgist.taoyao.boot.config.RewriteProperties;
|
||||||
import com.acgist.taoyao.boot.config.IpRewriteRuleProperties;
|
import com.acgist.taoyao.boot.config.RewriteRuleProperties;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@@ -18,15 +18,15 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
public class NetUtilsTest {
|
public class NetUtilsTest {
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
final IpRewriteRuleProperties ipRewriteRuleProperties1 = new IpRewriteRuleProperties();
|
final RewriteRuleProperties rewriteRuleProperties1 = new RewriteRuleProperties();
|
||||||
ipRewriteRuleProperties1.setNetwork("192.168.1.0");
|
rewriteRuleProperties1.setNetwork("192.168.1.0");
|
||||||
final IpRewriteRuleProperties ipRewriteRuleProperties10 = new IpRewriteRuleProperties();
|
final RewriteRuleProperties rewriteRuleProperties10 = new RewriteRuleProperties();
|
||||||
ipRewriteRuleProperties10.setNetwork("192.168.10.0");
|
rewriteRuleProperties10.setNetwork("192.168.10.0");
|
||||||
final IpRewriteProperties ipRewriteProperties = new IpRewriteProperties();
|
final RewriteProperties rewriteProperties = new RewriteProperties();
|
||||||
ipRewriteProperties.setEnabled(true);
|
rewriteProperties.setEnabled(true);
|
||||||
ipRewriteProperties.setPrefix(24);
|
rewriteProperties.setPrefix(24);
|
||||||
ipRewriteProperties.setRule(List.of(ipRewriteRuleProperties1, ipRewriteRuleProperties10));
|
rewriteProperties.setRule(List.of(rewriteRuleProperties1, rewriteRuleProperties10));
|
||||||
NetUtils.init(ipRewriteProperties);
|
NetUtils.init(rewriteProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import com.acgist.taoyao.boot.config.FfmpegProperties;
|
import com.acgist.taoyao.boot.config.FfmpegProperties;
|
||||||
|
import com.acgist.taoyao.boot.config.RewriteProperties;
|
||||||
import com.acgist.taoyao.boot.config.MediaProperties;
|
import com.acgist.taoyao.boot.config.MediaProperties;
|
||||||
import com.acgist.taoyao.boot.config.SocketProperties;
|
import com.acgist.taoyao.boot.config.SocketProperties;
|
||||||
import com.acgist.taoyao.boot.config.WebrtcProperties;
|
import com.acgist.taoyao.boot.config.WebrtcProperties;
|
||||||
@@ -32,6 +33,7 @@ public class ConfigController {
|
|||||||
private final FfmpegProperties ffmpegProperties;
|
private final FfmpegProperties ffmpegProperties;
|
||||||
private final SocketProperties socketProperties;
|
private final SocketProperties socketProperties;
|
||||||
private final WebrtcProperties webrtcProperties;
|
private final WebrtcProperties webrtcProperties;
|
||||||
|
private final RewriteProperties rewriteProperties;
|
||||||
|
|
||||||
@Operation(summary = "媒体配置", description = "媒体配置")
|
@Operation(summary = "媒体配置", description = "媒体配置")
|
||||||
@GetMapping("/media")
|
@GetMapping("/media")
|
||||||
@@ -61,4 +63,11 @@ public class ConfigController {
|
|||||||
return Message.success(this.webrtcProperties);
|
return Message.success(this.webrtcProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "地址重写配置", description = "地址重写配置")
|
||||||
|
@GetMapping("/rewrite")
|
||||||
|
@ApiResponse(content = @Content(schema = @Schema(implementation = WebrtcProperties.class)))
|
||||||
|
public Message rewrite() {
|
||||||
|
return Message.success(this.rewriteProperties);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,6 +236,18 @@ taoyao:
|
|||||||
# port: 3478
|
# port: 3478
|
||||||
# username: taoyao
|
# username: taoyao
|
||||||
# password: taoyao
|
# password: taoyao
|
||||||
|
# 地址重写
|
||||||
|
rewrite:
|
||||||
|
enabled: true
|
||||||
|
prefix: 24
|
||||||
|
# 重写规则
|
||||||
|
rule:
|
||||||
|
# - network: 192.168.1.0
|
||||||
|
# inner-host:
|
||||||
|
# outer-host:
|
||||||
|
# - network: 192.168.8.0
|
||||||
|
# inner-host:
|
||||||
|
# outer-host:
|
||||||
# 安全配置
|
# 安全配置
|
||||||
security:
|
security:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -253,15 +265,3 @@ taoyao:
|
|||||||
room: 0 0/5 * * * ?
|
room: 0 0/5 * * * ?
|
||||||
# 清理无效终端连接
|
# 清理无效终端连接
|
||||||
client: 0 * * * * ?
|
client: 0 * * * * ?
|
||||||
# 地址重写
|
|
||||||
ip-rewrite:
|
|
||||||
enabled: true
|
|
||||||
prefix: 24
|
|
||||||
# 重写规则
|
|
||||||
rule:
|
|
||||||
# - network: 192.168.1.0
|
|
||||||
# inner-host:
|
|
||||||
# outer-host:
|
|
||||||
# - network: 192.168.8.0
|
|
||||||
# inner-host:
|
|
||||||
# outer-host:
|
|
||||||
|
|||||||
Reference in New Issue
Block a user