648540858
2020-11-07 4e8659e156767b7f471725840b331a5ec9be9894
Merge pull request #10 from lawrencehj/master

优化播放程序,缩短加载时间
5个文件已修改
63 ■■■■ 已修改文件
pom.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/channelList.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/gb28181/devicePlayer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -163,6 +163,7 @@
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
@@ -176,6 +177,18 @@
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!--
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/libs</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                     -->
                </configuration>
            </plugin>
@@ -183,6 +196,7 @@
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -276,6 +276,7 @@
        PageResult pageResult = new PageResult<Device>();
        pageResult.setPage(page);
        pageResult.setCount(count);
        Device device = null;
        if (deviceIds == null || deviceIds.length == 0) {
@@ -284,11 +285,21 @@
            pageResult.setTotal(deviceIdList.size());
            int maxCount = (page + 1)* count;
            for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) {
                devices.add((Device)redis.get((String)deviceIdList.get(i)));
                // devices.add((Device)redis.get((String)deviceIdList.get(i)));
                device =(Device)redis.get((String)deviceIdList.get(i));
                if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
                    outline(device.getDeviceId());
                }
                devices.add(device);
            }
        } else {
            for (int i = 0; i < deviceIds.length; i++) {
                devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
                // devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
                device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
                if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
                    outline(device.getDeviceId());
                }
                devices.add(device);
            }
        }
        pageResult.setData(devices);
@@ -304,16 +315,25 @@
    @Override
    public List<Device> queryVideoDeviceList(String[] deviceIds) {
        List<Device> devices = new ArrayList<>();
        Device device = null;
        if (deviceIds == null || deviceIds.length == 0) {
//            List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
            List<Object> deviceIdList = redis.scan(VideoManagerConstants.DEVICE_PREFIX+"*");
            for (int i = 0; i < deviceIdList.size(); i++) {
                devices.add((Device)redis.get((String)deviceIdList.get(i)));
                device =(Device)redis.get((String)deviceIdList.get(i));
                if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
                    outline(device.getDeviceId());
                }
                devices.add(device);
            }
        } else {
            for (int i = 0; i < deviceIds.length; i++) {
                devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
                device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
                if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
                    outline(device.getDeviceId());
                }
                devices.add(device);
            }
        }
        return devices;
src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -39,7 +39,8 @@
    private ZLMRESTfulUtils zlmresTfulUtils;
    @GetMapping("/play/{deviceId}/{channelId}")
    public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId) {
    public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId,
    Integer getEncoding) {
        Device device = storager.queryVideoDevice(deviceId);
        StreamInfo streamInfo = storager.queryPlayByDevice(deviceId, channelId);
@@ -64,6 +65,7 @@
        long startTime = System.currentTimeMillis();
        JSONObject rtpInfo = null;
        if (getEncoding == 1) {
        while (lockFlag) {
            try {
                if (System.currentTimeMillis() - startTime > 60 * 1000) {
@@ -76,7 +78,8 @@
                        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);
@@ -99,6 +102,13 @@
                e.printStackTrace();
            }
        }
        } else {
            String flv = storager.getMediaInfo().getLocalIP() + ":" + storager.getMediaInfo().getHttpPort() + "/rtp/"
                    + streamId + ".flv";
            streamInfo.setFlv("http://" + flv);
            streamInfo.setWs_flv("ws://" + flv);
            storager.startPlay(streamInfo);
        }
        if (logger.isDebugEnabled()) {
            logger.debug(String.format("设备预览 API调用,deviceId:%s ,channelId:%s", deviceId, channelId));
web_src/src/components/channelList.vue
@@ -197,11 +197,12 @@
            let deviceId = this.deviceId;
            this.isLoging = true;
            let channelId = itemData.channelId;
            console.log("通知设备推流1:" + deviceId + " : " + channelId);
            let getEncoding = itemData.hasAudio ? '1' : '0'
            console.log("通知设备推流1:" + deviceId + " : " + channelId + ":" + getEncoding);
            let that = this;
            this.$axios({
                method: 'get',
                url: '/api/play/' + deviceId + '/' + channelId
                url: '/api/play/' + deviceId + '/' + channelId + '?getEncoding=' + getEncoding
            }).then(function (res) {
                console.log(res.data)
                let ssrc = res.data.ssrc;
web_src/src/components/gb28181/devicePlayer.vue
@@ -223,7 +223,7 @@
        play: function (streamInfo, hasAudio) {
            this.hasaudio = hasAudio;
            // 根据媒体流信息二次判断
            if (!!streamInfo.tracks && streamInfo.tracks.length > 0) {
            if (!!streamInfo.tracks && streamInfo.tracks.length > 0 && hasAudio) {
                var realHasAudio = false;
                for (let i = 0; i < streamInfo.tracks.length; i++) {
                    if (streamInfo.tracks[i].codec_type == 1 && streamInfo.tracks[i].codec_id_name == "CodecAAC") { // 判断为AAC音频