panlinlin
2021-01-05 381e3129a3e4efbf2423be6a63342fc9c35befbc
存储部分使用sqlite代替redis-4
6个文件已修改
57 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/wvp.sqlite 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/channelList.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -357,11 +357,7 @@
            ClientTransaction transaction = transmitRequest(device, request, errorEvent);
            streamSession.put(streamId, transaction);
            DeviceChannel deviceChannel = storager.queryChannel(device.getDeviceId(), channelId);
            if (deviceChannel != null) {
                deviceChannel.setStreamId(streamId);
                storager.updateChannel(device.getDeviceId(), deviceChannel);
            }
        } catch ( SipException | ParseException | InvalidArgumentException e) {
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -23,7 +23,8 @@
            "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} " +
            "ipAddress=#{ipAddress}, port=#{port}, password=#{password}, PTZType=#{PTZType}, status=#{status}, streamId=#{streamId}, " +
            "hasAudio=#{hasAudio}" +
            "WHERE deviceId=#{deviceId} AND channelId=#{channelId}")
    int update(DeviceChannel channel);
src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.MediaServerConfig;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -37,6 +38,12 @@
        msg.setId(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid);
        StreamInfo streamInfo = onPublishHandler(resonse, deviceId, channelId, uuid);
        if (streamInfo != null) {
            DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
            if (deviceChannel != null) {
                deviceChannel.setStreamId(streamInfo.getStreamId());
                storager.updateChannel(deviceId, deviceChannel);
            }
            redisCatchStorage.startPlay(streamInfo);
            msg.setData(JSON.toJSONString(streamInfo));
            resultHolder.invokeResult(msg);
src/main/resources/application-dev.yml
@@ -20,13 +20,20 @@
        timeout: 10000
    # [不可用] jdbc数据库配置, 暂不支持
    datasource:
        #        name: eiot
        #        url: jdbc:mysql://127.0.0.1:3306/eiot?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true
        #        username:
        #        password:
        #        type: com.alibaba.druid.pool.DruidDataSource
        #        driver-class-name: com.mysql.jdbc.Driver
        name: eiot
        url: jdbc:mysql://127.0.0.1:3306/eiot?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true
        url: jdbc:sqlite::resource:wvp.sqlite
        username:
        password:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        driver-class-name:  org.sqlite.JDBC
        max-active: 1
        min-idle: 1
# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:
src/main/resources/wvp.sqlite
Binary files differ
web_src/src/components/channelList.vue
@@ -19,12 +19,12 @@
                    <el-option label="设备" value="false"></el-option>
                    <el-option label="子目录" value="true"></el-option>
                </el-select>
                在线状态: <el-select size="mini" @change="search" v-model="online" placeholder="请选择" default-first-option>
                在线状态: <el-select size="mini" style="margin-right: 1rem;" @change="search" v-model="online" placeholder="请选择" default-first-option>
                    <el-option label="全部" value=""></el-option>
                    <el-option label="在线" value="true"></el-option>
                    <el-option label="离线" value="false"></el-option>
                </el-select>
                <el-checkbox size="mini" style="margin-right: 1rem; float: right;" v-model="autoList" @change="autoListChange">自动刷新</el-checkbox>
            </div>
            <devicePlayer ref="devicePlayer" v-loading="isLoging"></devicePlayer>
            <!--设备列表-->
@@ -56,7 +56,7 @@
                        <el-button-group>
                            <!-- <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">播放</el-button> -->
                            <el-button size="mini" icon="el-icon-video-play" @click="sendDevicePush(scope.row)">播放</el-button>
                            <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="scope.row.play" @click="stopDevicePush(scope.row)">停止</el-button>
                            <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="!!scope.row.streamId" @click="stopDevicePush(scope.row)">停止</el-button>
                            <el-button size="mini" icon="el-icon-s-open" type="primary" v-if="scope.row.parental == 1" @click="changeSubchannel(scope.row)">查看</el-button>
                            <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">设备录象</el-button>
                            <!--                             <el-button size="mini" @click="sendDevicePush(scope.row)">录像查询</el-button> -->
@@ -98,13 +98,17 @@
            count: parseInt(this.$route.params.count),
            total: 0,
            beforeUrl: "/videoList",
            isLoging: false
            isLoging: false,
            autoList: false
        };
    },
    mounted() {
        this.initData();
        this.updateLooper = setInterval(this.initData, 1000);
        if (this.autoList) {
            this.updateLooper = setInterval(this.initData, 1500);
        }
    },
    destroyed() {
        this.$destroy('videojs');
@@ -179,12 +183,11 @@
            let deviceId = this.deviceId;
            this.isLoging = true;
            let channelId = itemData.channelId;
            let getEncoding = itemData.hasAudio ? '1' : '0'
            console.log("通知设备推流1:" + deviceId + " : " + channelId + ":" + getEncoding);
            console.log("通知设备推流1:" + deviceId + " : " + channelId );
            let that = this;
            this.$axios({
                method: 'get',
                url: '/api/play/' + deviceId + '/' + channelId + '?getEncoding=' + getEncoding
                url: '/api/play/' + deviceId + '/' + channelId
            }).then(function (res) {
                console.log(res.data)
                let streamId = res.data.streamId;
@@ -258,7 +261,7 @@
                })
                .then(function (res) {
                    that.total = res.data.total;
                    that.deviceChannelList = res.data.data;
                    that.deviceChannelList = res.data.list;
                    // 防止出现表格错位
                    that.$nextTick(() => {
                        that.$refs.channelListTable.doLayout();
@@ -283,6 +286,13 @@
            }).then(function (res) {
                console.log(JSON.stringify(res));
            });
        },
        autoListChange: function () {
            if (this.autoList) {
                this.updateLooper = setInterval(this.initData, 1500);
            }else{
                window.clearInterval(this.updateLooper);
            }
        }
    }