From 2dacd7d703d771914be3d9988dea76fddc4d27cb Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期五, 16 四月 2021 18:00:26 +0800
Subject: [PATCH] 更新readme
---
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 28 ++++++++++++++++++++++++----
1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index abe2278..b4076d0 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.service.impl;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.Device;
@@ -62,7 +63,16 @@
playResult.setResult(result);
// 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result);
-
+ // 瓒呮椂澶勭悊
+ result.onTimeout(()->{
+ logger.warn(String.format("璁惧鐐规挱瓒呮椂锛宒eviceId锛�%s 锛宑hannelId锛�%s", deviceId, channelId));
+ // 閲婃斁rtpserver
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
+ RequestMessage msg = new RequestMessage();
+ msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + playResult.getUuid());
+ msg.setData("Timeout");
+ resultHolder.invokeResult(msg);
+ });
if (streamInfo == null) {
// 鍙戦�佺偣鎾秷鎭�
cmder.playStreamCmd(device, channelId, (JSONObject response) -> {
@@ -75,6 +85,7 @@
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
Response response = event.getResponse();
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
msg.setData(String.format("鐐规挱澶辫触锛� 閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase()));
resultHolder.invokeResult(msg);
if (errorEvent != null) {
@@ -83,8 +94,15 @@
});
} else {
String streamId = streamInfo.getStreamId();
+ if (streamId == null) {
+ RequestMessage msg = new RequestMessage();
+ msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
+ msg.setData(String.format("鐐规挱澶辫触锛� redis缂撳瓨streamId绛変簬null"));
+ resultHolder.invokeResult(msg);
+ return playResult;
+ }
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
- if (rtpInfo.getBoolean("exist")) {
+ if (rtpInfo != null && rtpInfo.getBoolean("exist")) {
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
msg.setData(JSON.toJSONString(streamInfo));
@@ -99,6 +117,7 @@
logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString());
onPublishHandlerForPlay(response, deviceId, channelId, uuid.toString());
}, event -> {
+ cmder.closeRTPServer(playResult.getDevice(), channelId);
RequestMessage msg = new RequestMessage();
msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
Response response = event.getResponse();
@@ -150,8 +169,9 @@
}
public StreamInfo onPublishHandler(JSONObject resonse, String deviceId, String channelId, String uuid) {
- String streamId = resonse.getString("id");
- StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream("rtp", streamId);
+ String streamId = resonse.getString("stream");
+ JSONArray tracks = resonse.getJSONArray("tracks");
+ StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStream("rtp", streamId, tracks);
streamInfo.setDeviceID(deviceId);
streamInfo.setChannelId(channelId);
return streamInfo;
--
Gitblit v1.8.0