648540858
2021-01-11 4005962c5ba25d1c34e4513d9b9ad27722de97a8
Merge pull request #30 from lawrencehj/master

与2.0同步修正部分错误
10个文件已修改
109 ■■■■■ 已修改文件
pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/channelList.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/gb28181/devicePlayer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/videoList.vue 2 ●●● 补丁 | 查看 | 原始文档 | 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>