| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import okhttp3.*; |
| | | import org.jetbrains.annotations.NotNull; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | import java.io.IOException; |
| | | import java.net.ConnectException; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.Map; |
| | | |
| | | @Component |
| | |
| | | @Value("${media.secret}") |
| | | private String mediaSecret; |
| | | |
| | | public JSONObject sendPost(String api, Map<String, Object> param) { |
| | | public interface RequestCallback{ |
| | | void run(JSONObject response); |
| | | } |
| | | |
| | | public JSONObject sendPost(String api, Map<String, Object> param, RequestCallback callback) { |
| | | OkHttpClient client = new OkHttpClient(); |
| | | String url = String.format("http://%s:%s/index/api/%s", mediaIp, mediaPort, api); |
| | | JSONObject responseJSON = null; |
| | |
| | | .post(body) |
| | | .url(url) |
| | | .build(); |
| | | try { |
| | | Response response = client.newCall(request).execute(); |
| | | if (response.isSuccessful()) { |
| | | String responseStr = response.body().string(); |
| | | if (responseStr != null) { |
| | | responseJSON = JSON.parseObject(responseStr); |
| | | if (callback == null) { |
| | | try { |
| | | Response response = client.newCall(request).execute(); |
| | | if (response.isSuccessful()) { |
| | | String responseStr = response.body().string(); |
| | | if (responseStr != null) { |
| | | responseJSON = JSON.parseObject(responseStr); |
| | | } |
| | | } |
| | | } catch (ConnectException e) { |
| | | logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage())); |
| | | logger.info("请检查media配置并确认ZLM已启动..."); |
| | | }catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }else { |
| | | client.newCall(request).enqueue(new Callback(){ |
| | | |
| | | @Override |
| | | public void onResponse(@NotNull Call call, @NotNull Response response){ |
| | | if (response.isSuccessful()) { |
| | | try { |
| | | String responseStr = response.body().string(); |
| | | if (responseStr != null) { |
| | | callback.run(JSON.parseObject(responseStr)); |
| | | }else { |
| | | callback.run(null); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(@NotNull Call call, @NotNull IOException e) { |
| | | logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage())); |
| | | logger.info("请检查media配置并确认ZLM已启动..."); |
| | | } |
| | | }); |
| | | } |
| | | } catch (ConnectException e) { |
| | | logger.error(String.format("连接ZLM失败: %s, %s", e.getCause().getMessage(), e.getMessage())); |
| | | logger.info("请检查media配置并确认ZLM已启动..."); |
| | | }catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | |
| | | return responseJSON; |
| | | } |
| | | |
| | | public JSONObject getMediaList(String app, String schema){ |
| | | public JSONObject getMediaList(String app, String stream, String schema, RequestCallback callback){ |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("app",app); |
| | | param.put("schema",schema); |
| | | if (app != null) param.put("app",app); |
| | | if (stream != null) param.put("stream",stream); |
| | | if (schema != null) param.put("schema",schema); |
| | | param.put("vhost","__defaultVhost__"); |
| | | return sendPost("getMediaList",param); |
| | | return sendPost("getMediaList",param, callback); |
| | | } |
| | | |
| | | public JSONObject getMediaList(String app, String stream){ |
| | | return getMediaList(app, stream,null, null); |
| | | } |
| | | |
| | | public JSONObject getMediaList(RequestCallback callback){ |
| | | return sendPost("getMediaList",null, callback); |
| | | } |
| | | |
| | | public JSONObject getMediaInfo(String app, String schema, String stream){ |
| | |
| | | param.put("schema",schema); |
| | | param.put("stream",stream); |
| | | param.put("vhost","__defaultVhost__"); |
| | | return sendPost("getMediaInfo",param); |
| | | return sendPost("getMediaInfo",param, null); |
| | | } |
| | | |
| | | public JSONObject getRtpInfo(String stream_id){ |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("stream_id",stream_id); |
| | | return sendPost("getRtpInfo",param); |
| | | return sendPost("getRtpInfo",param, null); |
| | | } |
| | | |
| | | public JSONObject addFFmpegSource(String src_url, String dst_url, String timeout_ms){ |
| | |
| | | param.put("src_url", src_url); |
| | | param.put("dst_url", dst_url); |
| | | param.put("timeout_ms", timeout_ms); |
| | | return sendPost("addFFmpegSource",param); |
| | | return sendPost("addFFmpegSource",param, null); |
| | | } |
| | | |
| | | public JSONObject delFFmpegSource(String key){ |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("key", key); |
| | | return sendPost("delFFmpegSource",param); |
| | | return sendPost("delFFmpegSource",param, null); |
| | | } |
| | | |
| | | public JSONObject getMediaServerConfig(){ |
| | | return sendPost("getServerConfig",null); |
| | | return sendPost("getServerConfig",null, null); |
| | | } |
| | | |
| | | public JSONObject setServerConfig(Map<String, Object> param){ |
| | | return sendPost("setServerConfig",param); |
| | | return sendPost("setServerConfig",param, null); |
| | | } |
| | | |
| | | public JSONObject openRtpServer(Map<String, Object> param){ |
| | | return sendPost("openRtpServer",param); |
| | | return sendPost("openRtpServer",param, null); |
| | | } |
| | | |
| | | public JSONObject closeRtpServer(Map<String, Object> param) { |
| | | return sendPost("closeRtpServer",param); |
| | | return sendPost("closeRtpServer",param, null); |
| | | } |
| | | |
| | | public JSONObject startSendRtp(Map<String, Object> param) { |
| | | return sendPost("startSendRtp",param, null); |
| | | } |
| | | |
| | | public JSONObject stopSendRtp(Map<String, Object> param) { |
| | | return sendPost("stopSendRtp",param, null); |
| | | } |
| | | |
| | | public JSONObject addStreamProxy(String app, String stream, String url, boolean enable_hls, boolean enable_mp4, String rtp_type) { |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("vhost", "__defaultVhost__"); |
| | | param.put("app", app); |
| | | param.put("stream", stream); |
| | | param.put("url", url); |
| | | param.put("enable_hls", enable_hls?1:0); |
| | | param.put("enable_mp4", enable_mp4?1:0); |
| | | param.put("rtp_type", rtp_type); |
| | | return sendPost("addStreamProxy",param, null); |
| | | } |
| | | |
| | | public JSONObject closeStreams(String app, String stream) { |
| | | Map<String, Object> param = new HashMap<>(); |
| | | param.put("vhost", "__defaultVhost__"); |
| | | param.put("app", app); |
| | | param.put("stream", stream); |
| | | param.put("force", 1); |
| | | return sendPost("close_streams",param, null); |
| | | } |
| | | } |