pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
web_src/src/components/channelList.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
web_src/src/components/gb28181/devicePlayer.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
web_src/src/components/videoList.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -131,7 +131,7 @@ <artifactId>jain-sip-ri</artifactId> <version>1.3.0-92</version> <scope>system</scope> <systemPath>${project.basedir}/libs/jain-sip-ri-1.3.0-92.jar</systemPath> <systemPath>${pom.basedir}/libs/jain-sip-ri-1.3.0-92.jar</systemPath> </dependency> <dependency> <groupId>log4j</groupId> @@ -141,7 +141,7 @@ <!-- xml解析库 --> <dependency> <groupId>org.dom4j</groupId> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> </dependency> src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -77,6 +77,9 @@ @Value("${media.seniorSdp}") private boolean seniorSdp; @Value("${media.autoApplyPlay}") private boolean autoApplyPlay; @Autowired private ZLMHttpHookSubscribe subscribe; @@ -182,11 +185,11 @@ /** * 云台指令码计算 * * @param cmdCode 指令码 * @param parameter1 数据1 * @param parameter2 数据2 * @param combineCode2 组合码2 */ * @param cmdCode 指令码 * @param parameter1 数据1 * @param parameter2 数据2 * @param combineCode2 组合码2 */ public static String frontEndCmdString(int cmdCode, int parameter1, int parameter2, int combineCode2) { StringBuilder builder = new StringBuilder("A50F01"); String strTmp; @@ -208,13 +211,13 @@ /** * 云台控制,支持方向与缩放控制 * * @param device 控制设备 * @param channelId 预览通道 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 * @param upDown 镜头上移下移 0:停止 1:上移 2:下移 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大 * @param moveSpeed 镜头移动速度 * @param zoomSpeed 镜头缩放速度 * @param device 控制设备 * @param channelId 预览通道 * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 * @param upDown 镜头上移下移 0:停止 1:上移 2:下移 * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大 * @param moveSpeed 镜头移动速度 * @param zoomSpeed 镜头缩放速度 */ @Override public boolean ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed, @@ -287,8 +290,12 @@ @Override public void playStreamCmd(Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) { try { String ssrc = streamSession.createPlaySsrc(); String ssrc = ""; if (rtpEnable) { ssrc = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); }else { ssrc = streamSession.createPlaySsrc(); } String streamId = null; if (rtpEnable) { streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); @@ -326,13 +333,14 @@ if (seniorSdp) { if("TCP-PASSIVE".equals(streamMode)) { content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n"); }else if ("TCP-ACTIVE".equals(streamMode)) { content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n"); }else if("UDP".equals(streamMode)) { content.append("m=video "+ mediaPort +" RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" RTP/AVP 96 126 125 99 34 98 97\r\n"); } content.append("a=recvonly\r\n"); content.append("a=rtpmap:96 PS/90000\r\n"); content.append("a=fmtp:126 profile-level-id=42e01e\r\n"); content.append("a=rtpmap:126 H264/90000\r\n"); content.append("a=rtpmap:125 H264S/90000\r\n"); @@ -341,7 +349,6 @@ content.append("a=fmtp:99 profile-level-id=3\r\n"); content.append("a=rtpmap:98 H264/90000\r\n"); content.append("a=rtpmap:97 MPEG4/90000\r\n"); content.append("a=rtpmap:96 PS/90000\r\n"); if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式 content.append("a=setup:passive\r\n"); content.append("a=connection:new\r\n"); @@ -380,9 +387,6 @@ content.append("y="+ssrc+"\r\n");//ssrc // String fromTag = UUID.randomUUID().toString(); // Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, fromTag, null, ssrc); Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null, ssrc); ClientTransaction transaction = transmitRequest(device, request, errorEvent); @@ -408,8 +412,16 @@ , SipSubscribe.Event errorEvent) { try { MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); String ssrc = streamSession.createPlayBackSsrc(); String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); String ssrc = null; String streamId = null; if (rtpEnable) { ssrc = String.format("gb_playback_%s_%s", device.getDeviceId(), channelId); streamId = ssrc; }else { ssrc = streamSession.createPlayBackSsrc(); streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); } // 添加订阅 JSONObject subscribeKey = new JSONObject(); subscribeKey.put("app", "rtp"); @@ -417,7 +429,6 @@ subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, subscribeKey, event); // StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); content.append("o="+sipConfig.getSipId()+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n"); @@ -437,13 +448,14 @@ if (seniorSdp) { if("TCP-PASSIVE".equals(streamMode)) { content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n"); }else if ("TCP-ACTIVE".equals(streamMode)) { content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n"); }else if("UDP".equals(streamMode)) { content.append("m=video "+ mediaPort +" RTP/AVP 126 125 99 34 98 97 96\r\n"); content.append("m=video "+ mediaPort +" RTP/AVP 96 126 125 99 34 98 97\r\n"); } content.append("a=recvonly\r\n"); content.append("a=rtpmap:96 PS/90000\r\n"); content.append("a=fmtp:126 profile-level-id=42e01e\r\n"); content.append("a=rtpmap:126 H264/90000\r\n"); content.append("a=rtpmap:125 H264S/90000\r\n"); @@ -452,7 +464,6 @@ content.append("a=fmtp:99 profile-level-id=3\r\n"); content.append("a=rtpmap:98 H264/90000\r\n"); content.append("a=rtpmap:97 MPEG4/90000\r\n"); content.append("a=rtpmap:96 PS/90000\r\n"); if("TCP-PASSIVE".equals(streamMode)){ // tcp被动模式 content.append("a=setup:passive\r\n"); content.append("a=connection:new\r\n"); @@ -521,9 +532,6 @@ if (dialog == null) { return; } Request byeRequest = dialog.createRequest(Request.BYE); SipURI byeURI = (SipURI) byeRequest.getRequestURI(); String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString(); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -297,7 +297,7 @@ device.setStreamMode("UDP"); } storager.updateDevice(device); cmder.catalogQuery(device, null); //cmder.catalogQuery(device, null); // 回复200 OK responseAck(evt); if (offLineDetector.isOnline(deviceId)) { src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -19,15 +19,6 @@ "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status})") int add(DeviceChannel channel); // @Update("UPDATE device_channel " + // "SET name=#{name}, manufacture=#{manufacture}, model=#{model}, owner=#{owner}, civilCode=#{civilCode}, " + // "block=#{block}, address=#{address}, parental=#{parental}, parentId=#{parentId}, safetyWay=#{safetyWay}, " + // "registerWay=#{registerWay}, certNum=#{certNum}, certifiable=#{certifiable}, errCode=#{errCode}, secrecy=#{secrecy}, " + // "ipAddress=#{ipAddress}, port=#{port}, password=#{password}, PTZType=#{PTZType}, status=#{status}, streamId=#{streamId}, " + // "hasAudio=#{hasAudio}" + // "WHERE deviceId=#{deviceId} AND channelId=#{channelId}") @Update(value = {" <script>" + "UPDATE device_channel " + "SET deviceId='${deviceId}'" + src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java
@@ -63,13 +63,6 @@ /** * 分页查询通道数 * @param deviceId 设备id * @param page 当前页 * @param count 每页条数 * @return 通道列表 */ /** * 分页查询通道数 * * @param deviceId 设备id * @param page 当前页 src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -169,7 +169,6 @@ // 超时处理 result.onTimeout(()->{ logger.warn(String.format("设备预览/回放停止超时,streamId:%s ", streamId)); RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_STOP + uuid); msg.setData("Timeout"); src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
@@ -39,8 +39,6 @@ @Autowired private IRedisCatchStorage redisCatchStorage; private boolean closeWaitRTPInfo = false; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; web_src/src/components/channelList.vue
@@ -44,8 +44,8 @@ <el-table-column label="状态" width="180" align="center"> <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> <el-tag size="medium" v-if="scope.row.status == 1">在线</el-tag> <el-tag size="medium" type="info" v-if="scope.row.status == 0">离线</el-tag> <el-tag size="medium" v-if="scope.row.status == 1">开启</el-tag> <el-tag size="medium" type="info" v-if="scope.row.status == 0">关闭</el-tag> </div> </template> </el-table-column> @@ -99,14 +99,14 @@ total: 0, beforeUrl: "/videoList", isLoging: false, autoList: false autoList: true }; }, mounted() { this.initData(); if (this.autoList) { this.updateLooper = setInterval(this.initData, 1500); this.updateLooper = setInterval(this.initData, 5000); } }, @@ -179,7 +179,7 @@ //通知设备上传媒体流 sendDevicePush: function (itemData) { console.log(itemData) console.log(itemData); let deviceId = this.deviceId; this.isLoging = true; let channelId = itemData.channelId; web_src/src/components/gb28181/devicePlayer.vue
@@ -67,7 +67,7 @@ <div style="position: absolute; left: 7.25rem; top: 1.25rem" @mousedown="ptzCamera(0, 0, 1)" @mouseup="ptzCamera(0, 0, 0)"><i class="el-icon-zoom-in control-zoom-btn" style="font-size: 1.875rem;"></i></div> <div style="position: absolute; left: 7.25rem; top: 3.25rem; font-size: 1.875rem;" @mousedown="ptzCamera(0, 0, 2)" @mouseup="ptzCamera(0, 0, 0)"><i class="el-icon-zoom-out control-zoom-btn"></i></div> <div class="contro-speed" style="position: absolute; left: 4px; top: 7rem; width: 9rem;"> <el-slider v-model="controSpeed"></el-slider> <el-slider v-model="controSpeed" :max="255"></el-slider> </div> </div> web_src/src/components/videoList.vue
@@ -52,7 +52,7 @@ <el-table-column label="操作" width="240" align="center" fixed="right"> <template slot-scope="scope"> <el-button size="mini" :ref="scope.row.deviceId + 'refbtn' " icon="el-icon-refresh" @click="refDevice(scope.row)">刷新通道</el-button> <el-button size="mini" icon="el-icon-s-open" type="primary" @click="showChannelList(scope.row)">查看通道</el-button> <el-button size="mini" icon="el-icon-s-open" v-bind:disabled="scope.row.online==0" type="primary" @click="showChannelList(scope.row)">查看通道</el-button> </template> </el-table-column> </el-table>