|
|
@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; |
|
|
|
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.util.StringUtils; |
|
|
@ -38,8 +39,12 @@ public class PlaybackController { |
|
|
|
@Autowired |
|
|
|
private ZLMRESTfulUtils zlmresTfulUtils; |
|
|
|
|
|
|
|
@Value("${media.closeWaitRTPInfo}") |
|
|
|
private boolean closeWaitRTPInfo; |
|
|
|
|
|
|
|
@GetMapping("/playback/{deviceId}/{channelId}") |
|
|
|
public ResponseEntity<String> play(@PathVariable String deviceId,@PathVariable String channelId, String startTime, String endTime){ |
|
|
|
public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId, String startTime, |
|
|
|
String endTime) { |
|
|
|
|
|
|
|
if (logger.isDebugEnabled()) { |
|
|
|
logger.debug(String.format("设备回放 API调用,deviceId:%s ,channelId:%s", deviceId, channelId)); |
|
|
@ -59,10 +64,12 @@ public class PlaybackController { |
|
|
|
} |
|
|
|
|
|
|
|
// }else {
|
|
|
|
// String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase();
|
|
|
|
// String streamId = String.format("%08x",
|
|
|
|
// Integer.parseInt(streamInfo.getSsrc())).toUpperCase();
|
|
|
|
// JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
|
|
|
|
// if (rtpInfo.getBoolean("exist")) {
|
|
|
|
// return new ResponseEntity<String>(JSON.toJSONString(streamInfo),HttpStatus.OK);
|
|
|
|
// return new
|
|
|
|
// ResponseEntity<String>(JSON.toJSONString(streamInfo),HttpStatus.OK);
|
|
|
|
// }else {
|
|
|
|
// storager.stopPlayback(streamInfo);
|
|
|
|
// streamInfo = cmder.playbackStreamCmd(device, channelId, startTime, endTime);
|
|
|
@ -81,6 +88,13 @@ public class PlaybackController { |
|
|
|
long lockStartTime = System.currentTimeMillis(); |
|
|
|
JSONObject rtpInfo = null; |
|
|
|
|
|
|
|
if (closeWaitRTPInfo) { |
|
|
|
String flv = storager.getMediaInfo().getWanIp() + ":" + storager.getMediaInfo().getHttpPort() + "/rtp/" |
|
|
|
+ streamId + ".flv"; |
|
|
|
streamInfo.setFlv("http://" + flv); |
|
|
|
streamInfo.setWs_flv("ws://" + flv); |
|
|
|
storager.startPlayback(streamInfo); |
|
|
|
} else { |
|
|
|
while (lockFlag) { |
|
|
|
try { |
|
|
|
if (System.currentTimeMillis() - lockStartTime > 75 * 1000) { |
|
|
@ -93,7 +107,8 @@ public class PlaybackController { |
|
|
|
logger.info("查询RTP推流信息..."); |
|
|
|
rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); |
|
|
|
} |
|
|
|
if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null && streamInfo.getFlv() != null){ |
|
|
|
if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null |
|
|
|
&& streamInfo.getFlv() != null) { |
|
|
|
logger.info("查询流编码信息:" + streamInfo.getFlv()); |
|
|
|
rtpPushed = true; |
|
|
|
Thread.sleep(2000); |
|
|
@ -116,6 +131,7 @@ public class PlaybackController { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (streamInfo != null) { |
|
|
|
return new ResponseEntity<String>(JSON.toJSONString(streamInfo), HttpStatus.OK); |
|
|
|
} else { |
|
|
|