添加通道音频设置

添加media配置
This commit is contained in:
648540858
2020-10-13 17:16:38 +08:00
parent d4ae8194eb
commit f9ab13a145
13 changed files with 234 additions and 23 deletions

View File

@@ -2,7 +2,6 @@ package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import org.apache.http.HttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.utils.IpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
@@ -44,7 +45,13 @@ public class ZLMHttpHookListener {
@Autowired
private IVideoManagerStorager storager;
@Value("${media.ip}")
private String mediaIp;
@Value("${media.port}")
private int mediaPort;
/**
* 流量统计事件播放器或推流器断开时并且耗用流量超过特定阈值时会触发此事件阈值通过配置文件general.flowThreshold配置此事件对回复不敏感。
*
@@ -308,6 +315,7 @@ public class ZLMHttpHookListener {
// List<MediaServerConfig> mediaServerConfigs = JSON.parseArray(JSON.toJSONString(json), MediaServerConfig.class);
// MediaServerConfig mediaServerConfig = mediaServerConfigs.get(0);
MediaServerConfig mediaServerConfig = JSON.toJavaObject(json, MediaServerConfig.class);
mediaServerConfig.setLocalIP(mediaIp);
storager.updateMediaInfo(mediaServerConfig);
// TODO Auto-generated method stub

View File

@@ -0,0 +1,152 @@
package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.conf.MediaServerConfig;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@Component
@Order(value=1)
public class ZLMRunner implements CommandLineRunner {
private final static Logger logger = LoggerFactory.getLogger(ZLMRunner.class);
@Autowired
private IVideoManagerStorager storager;
@Value("${media.ip}")
private String mediaIp;
@Value("${media.port}")
private int mediaPort;
@Value("${media.secret}")
private String mediaSecret;
@Value("${sip.ip}")
private String sipIP;
@Value("${server.port}")
private String serverPort;
@Override
public void run(String... strings) throws Exception {
// 获取zlm信息
logger.info("等待zlm接入...");
MediaServerConfig mediaServerConfig = getMediaServerConfig();
if (mediaServerConfig != null) {
logger.info("zlm接入成功...");
storager.updateMediaInfo(mediaServerConfig);
logger.info("设置zlm...");
saveZLMConfig();
}
}
public MediaServerConfig getMediaServerConfig() {
MediaServerConfig mediaServerConfig = null;
OkHttpClient client = new OkHttpClient();
String url = String.format("http://%s:%s/index/api/getServerConfig?secret=%s", mediaIp, mediaPort, mediaSecret);
//创建一个Request
Request request = new Request.Builder()
.get()
.url(url)
.build();
//通过client发起请求
final Call call = client.newCall(request);
//执行同步请求获取Response对象
Response response = null;
try {
response = call.execute();
if (response.isSuccessful()) {
String responseStr = response.body().string();
if (responseStr != null) {
JSONObject responseJSON = JSON.parseObject(responseStr);
JSONArray data = responseJSON.getJSONArray("data");
if (data != null && data.size() > 0) {
mediaServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), MediaServerConfig.class);
mediaServerConfig.setLocalIP(mediaIp);
}
}
}else {
logger.error("getMediaServerConfig失败, 1s后重试");
Thread.sleep(1000);
getMediaServerConfig();
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return mediaServerConfig;
}
private void saveZLMConfig() {
String hookIP = sipIP;
if (mediaIp.equals(sipIP)) {
hookIP = "127.0.0.1";
}
OkHttpClient client = new OkHttpClient();
String url = String.format("http://%s:%s/index/api/setServerConfig", mediaIp, mediaPort);
String hookPrex = String.format("http://%s:%s/index/hook", hookIP, serverPort);
RequestBody body = new FormBody.Builder()
.add("secret",mediaSecret)
.add("hook.enable","1")
.add("hook.on_flow_report","")
.add("hook.on_http_access","")
.add("hook.on_publish",String.format("%s/on_publish", hookPrex))
.add("hook.on_record_mp4","")
.add("hook.on_record_ts","")
.add("hook.on_rtsp_auth","")
.add("hook.on_rtsp_realm","")
.add("hook.on_server_started",String.format("%s/on_server_started", hookPrex))
.add("hook.on_shell_login",String.format("%s/on_shell_login", hookPrex))
.add("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex))
.add("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex))
.add("hook.timeoutSec","20")
.build();
Request request = new Request.Builder()
.post(body)
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
logger.error("saveZLMConfig ",e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String responseStr = response.body().string();
if (responseStr != null) {
JSONObject responseJSON = JSON.parseObject(responseStr);
if (responseJSON.getInteger("code") == 0) {
logger.info("设置zlm成功");
}else {
logger.info("设置zlm失败: " + responseJSON.getString("msg"));
}
}
}
}
});
}
}