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