648540858
4 years ago
13 changed files with 234 additions and 23 deletions
@ -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")); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue