MediaServiceImpl.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.genersoft.iot.vmp.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.genersoft.iot.vmp.common.StreamInfo;
  6. import com.genersoft.iot.vmp.conf.MediaConfig;
  7. import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
  8. import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  9. import com.genersoft.iot.vmp.media.zlm.dto.OnPublishHookParam;
  10. import com.genersoft.iot.vmp.media.zlm.dto.StreamAuthorityInfo;
  11. import com.genersoft.iot.vmp.service.IMediaServerService;
  12. import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
  13. import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  14. import com.genersoft.iot.vmp.service.IMediaService;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.util.ObjectUtils;
  18. import org.springframework.util.StringUtils;
  19. @Service
  20. public class MediaServiceImpl implements IMediaService {
  21. @Autowired
  22. private IRedisCatchStorage redisCatchStorage;
  23. @Autowired
  24. private IVideoManagerStorage storager;
  25. @Autowired
  26. private IMediaServerService mediaServerService;
  27. @Autowired
  28. private MediaConfig mediaConfig;
  29. @Autowired
  30. private ZLMRESTfulUtils zlmresTfulUtils;
  31. @Override
  32. public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String callId) {
  33. return getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, null, callId, true);
  34. }
  35. @Override
  36. public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId, String addr, boolean authority) {
  37. StreamInfo streamInfo = null;
  38. if (mediaServerId == null) {
  39. mediaServerId = mediaConfig.getId();
  40. }
  41. MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
  42. if (mediaInfo == null) {
  43. return null;
  44. }
  45. String calld = null;
  46. StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(app, stream);
  47. if (streamAuthorityInfo != null) {
  48. calld = streamAuthorityInfo.getCallId();
  49. }
  50. JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, app, stream);
  51. if (mediaList != null) {
  52. if (mediaList.getInteger("code") == 0) {
  53. JSONArray data = mediaList.getJSONArray("data");
  54. if (data == null) {
  55. return null;
  56. }
  57. JSONObject mediaJSON = JSON.parseObject(JSON.toJSONString(data.get(0)), JSONObject.class);
  58. JSONArray tracks = mediaJSON.getJSONArray("tracks");
  59. if (authority) {
  60. streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr, calld);
  61. }else {
  62. streamInfo = getStreamInfoByAppAndStream(mediaInfo, app, stream, tracks, addr,null, true);
  63. }
  64. }
  65. }
  66. return streamInfo;
  67. }
  68. @Override
  69. public StreamInfo getStreamInfoByAppAndStreamWithCheck(String app, String stream, String mediaServerId, boolean authority) {
  70. return getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, null, authority);
  71. }
  72. @Override
  73. public StreamInfo getStreamInfoByAppAndStream(MediaServerItem mediaInfo, String app, String stream, Object tracks, String addr, String callId, boolean isPlay) {
  74. StreamInfo streamInfoResult = new StreamInfo();
  75. streamInfoResult.setStream(stream);
  76. streamInfoResult.setApp(app);
  77. if (addr == null) {
  78. addr = mediaInfo.getStreamIp();
  79. }
  80. streamInfoResult.setIp(addr);
  81. streamInfoResult.setMediaServerId(mediaInfo.getId());
  82. String callIdParam = ObjectUtils.isEmpty(callId)?"":"?callId=" + callId;
  83. streamInfoResult.setRtmp(String.format("rtmp://%s:%s/%s/%s%s", addr, mediaInfo.getRtmpPort(), app, stream, callIdParam));
  84. if (mediaInfo.getRtmpSSlPort() != 0) {
  85. streamInfoResult.setRtmps(String.format("rtmps://%s:%s/%s/%s%s", addr, mediaInfo.getRtmpSSlPort(), app, stream, callIdParam));
  86. }
  87. streamInfoResult.setRtsp(String.format("rtsp://%s:%s/%s/%s%s", addr, mediaInfo.getRtspPort(), app, stream, callIdParam));
  88. if (mediaInfo.getRtspSSLPort() != 0) {
  89. streamInfoResult.setRtsps(String.format("rtsps://%s:%s/%s/%s%s", addr, mediaInfo.getRtspSSLPort(), app, stream, callIdParam));
  90. }
  91. streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  92. streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  93. streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  94. streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  95. streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  96. streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  97. streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  98. streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
  99. streamInfoResult.setRtc(String.format("http://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s%s", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream, isPlay?"play":"push", ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
  100. if (mediaInfo.getHttpSSlPort() != 0) {
  101. streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  102. streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  103. streamInfoResult.setHttps_hls(String.format("https://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  104. streamInfoResult.setWss_hls(String.format("wss://%s:%s/%s/%s/hls.m3u8%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  105. streamInfoResult.setHttps_fmp4(String.format("https://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  106. streamInfoResult.setWss_fmp4(String.format("wss://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  107. streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  108. streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  109. streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
  110. streamInfoResult.setRtcs(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s%s", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream, isPlay?"play":"push", ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
  111. }
  112. streamInfoResult.setTracks(tracks);
  113. return streamInfoResult;
  114. }
  115. }