committed by
							
								
								skywsp
							
						
					
				
				 14 changed files with 1039 additions and 15 deletions
			
			
		@ -0,0 +1,206 @@ | 
				
			|||||
 | 
					package com.genersoft.iot.vmp.common; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | 
				
			||||
 | 
					import org.jetbrains.annotations.NotNull; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.util.List; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					public class RealVideo implements Comparable<RealVideo>{ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 应用名 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String app; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 流id | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String stream; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 观看总人数,包括hls/rtsp/rtmp/http-flv/ws-flv | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String totalReaderCount; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 协议 包括hls/rtsp/rtmp/http-flv/ws-flv | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private List<MediaSchema> schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源类型, | 
				
			||||
 | 
					     * unknown = 0, | 
				
			||||
 | 
					     * rtmp_push=1, | 
				
			||||
 | 
					     * rtsp_push=2, | 
				
			||||
 | 
					     * rtp_push=3, | 
				
			||||
 | 
					     * pull=4, | 
				
			||||
 | 
					     * ffmpeg_pull=5, | 
				
			||||
 | 
					     * mp4_vod=6, | 
				
			||||
 | 
					     * device_chn=7 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private int originType; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 客户端和服务器网络信息,可能为null类型 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private MediaItem.OriginSock originSock; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源类型的字符串描述 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String originTypeStr; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源的url | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String originUrl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * GMT unix系统时间戳,单位秒 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private Long createStamp; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 存活时间,单位秒 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private Long aliveSecond; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 音视频轨道 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private List<MediaItem.MediaTrack> tracks; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 音视频轨道 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String vhost; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getVhost() { | 
				
			||||
 | 
					        return vhost; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setVhost(String vhost) { | 
				
			||||
 | 
					        this.vhost = vhost; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Override | 
				
			||||
 | 
					    public int compareTo(@NotNull RealVideo realVideo) { | 
				
			||||
 | 
					        return new Long(this.createStamp - realVideo.getCreateStamp().intValue()).intValue(); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public static class MediaSchema { | 
				
			||||
 | 
					        private String schema; | 
				
			||||
 | 
					        private Long bytesSpeed; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public String getSchema() { | 
				
			||||
 | 
					            return schema; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setSchema(String schema) { | 
				
			||||
 | 
					            this.schema = schema; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public Long getBytesSpeed() { | 
				
			||||
 | 
					            return bytesSpeed; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setBytesSpeed(Long bytesSpeed) { | 
				
			||||
 | 
					            this.bytesSpeed = bytesSpeed; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getApp() { | 
				
			||||
 | 
					        return app; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setApp(String app) { | 
				
			||||
 | 
					        this.app = app; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getStream() { | 
				
			||||
 | 
					        return stream; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setStream(String stream) { | 
				
			||||
 | 
					        this.stream = stream; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getTotalReaderCount() { | 
				
			||||
 | 
					        return totalReaderCount; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setTotalReaderCount(String totalReaderCount) { | 
				
			||||
 | 
					        this.totalReaderCount = totalReaderCount; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public List<MediaSchema> getSchemas() { | 
				
			||||
 | 
					        return schemas; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setSchemas(List<MediaSchema> schemas) { | 
				
			||||
 | 
					        this.schemas = schemas; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public int getOriginType() { | 
				
			||||
 | 
					        return originType; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginType(int originType) { | 
				
			||||
 | 
					        this.originType = originType; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public MediaItem.OriginSock getOriginSock() { | 
				
			||||
 | 
					        return originSock; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginSock(MediaItem.OriginSock originSock) { | 
				
			||||
 | 
					        this.originSock = originSock; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getOriginTypeStr() { | 
				
			||||
 | 
					        return originTypeStr; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginTypeStr(String originTypeStr) { | 
				
			||||
 | 
					        this.originTypeStr = originTypeStr; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getOriginUrl() { | 
				
			||||
 | 
					        return originUrl; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginUrl(String originUrl) { | 
				
			||||
 | 
					        this.originUrl = originUrl; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public Long getCreateStamp() { | 
				
			||||
 | 
					        return createStamp; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setCreateStamp(Long createStamp) { | 
				
			||||
 | 
					        this.createStamp = createStamp; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public Long getAliveSecond() { | 
				
			||||
 | 
					        return aliveSecond; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setAliveSecond(Long aliveSecond) { | 
				
			||||
 | 
					        this.aliveSecond = aliveSecond; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public List<MediaItem.MediaTrack> getTracks() { | 
				
			||||
 | 
					        return tracks; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setTracks(List<MediaItem.MediaTrack> tracks) { | 
				
			||||
 | 
					        this.tracks = tracks; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,87 @@ | 
				
			|||||
 | 
					package com.genersoft.iot.vmp.media.zlm; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.alibaba.fastjson.JSON; | 
				
			||||
 | 
					import com.alibaba.fastjson.JSONArray; | 
				
			||||
 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			||||
 | 
					import com.alibaba.fastjson.TypeReference; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.common.RealVideo; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.gb28181.session.SsrcUtil; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.storager.impl.RedisCatchStorageImpl; | 
				
			||||
 | 
					import org.slf4j.Logger; | 
				
			||||
 | 
					import org.slf4j.LoggerFactory; | 
				
			||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
 | 
					import org.springframework.beans.factory.annotation.Value; | 
				
			||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.util.*; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					@Component | 
				
			||||
 | 
					public class ZLMMediaListManager { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    private Logger logger = LoggerFactory.getLogger("ZLMMediaListManager"); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Autowired | 
				
			||||
 | 
					    private ZLMRESTfulUtils zlmresTfulUtils; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Autowired | 
				
			||||
 | 
					    private IRedisCatchStorage redisCatchStorage; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void updateMediaList() { | 
				
			||||
 | 
					        JSONObject mediaList = zlmresTfulUtils.getMediaList(); | 
				
			||||
 | 
					        String dataStr = mediaList.getString("data"); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        Integer code = mediaList.getInteger("code"); | 
				
			||||
 | 
					        Map<String, RealVideo> result = new HashMap<>(); | 
				
			||||
 | 
					        if (code == 0 ) { | 
				
			||||
 | 
					            if (dataStr != null) { | 
				
			||||
 | 
					                List<MediaItem> mediaItems = JSON.parseObject(dataStr, new TypeReference<List<MediaItem>>() {}); | 
				
			||||
 | 
					                for (MediaItem item : mediaItems) { | 
				
			||||
 | 
					                    if ("rtp".equals(item.getApp())) { | 
				
			||||
 | 
					                        continue; | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                    String key = item.getApp() + "_" + item.getStream(); | 
				
			||||
 | 
					                    RealVideo realVideo = result.get(key); | 
				
			||||
 | 
					                    if (realVideo == null) { | 
				
			||||
 | 
					                        realVideo = new RealVideo(); | 
				
			||||
 | 
					                        realVideo.setApp(item.getApp()); | 
				
			||||
 | 
					                        realVideo.setStream(item.getStream()); | 
				
			||||
 | 
					                        realVideo.setAliveSecond(item.getAliveSecond()); | 
				
			||||
 | 
					                        realVideo.setCreateStamp(item.getCreateStamp()); | 
				
			||||
 | 
					                        realVideo.setOriginSock(item.getOriginSock()); | 
				
			||||
 | 
					                        realVideo.setTotalReaderCount(item.getTotalReaderCount()); | 
				
			||||
 | 
					                        realVideo.setOriginType(item.getOriginType()); | 
				
			||||
 | 
					                        realVideo.setOriginTypeStr(item.getOriginTypeStr()); | 
				
			||||
 | 
					                        realVideo.setOriginUrl(item.getOriginUrl()); | 
				
			||||
 | 
					                        realVideo.setCreateStamp(item.getCreateStamp()); | 
				
			||||
 | 
					                        realVideo.setAliveSecond(item.getAliveSecond()); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                        ArrayList<RealVideo.MediaSchema> mediaSchemas = new ArrayList<>(); | 
				
			||||
 | 
					                        realVideo.setSchemas(mediaSchemas); | 
				
			||||
 | 
					                        realVideo.setTracks(item.getTracks()); | 
				
			||||
 | 
					                        realVideo.setVhost(item.getVhost()); | 
				
			||||
 | 
					                        result.put(key, realVideo); | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    RealVideo.MediaSchema mediaSchema = new RealVideo.MediaSchema(); | 
				
			||||
 | 
					                    mediaSchema.setSchema(item.getSchema()); | 
				
			||||
 | 
					                    mediaSchema.setBytesSpeed(item.getBytesSpeed()); | 
				
			||||
 | 
					                    realVideo.getSchemas().add(mediaSchema); | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        }else { | 
				
			||||
 | 
					            logger.warn("更新视频流失败,错误code: " + code); | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        List<RealVideo> realVideos = new ArrayList<>(result.values()); | 
				
			||||
 | 
					        Collections.sort(realVideos); | 
				
			||||
 | 
					        redisCatchStorage.updateMediaList(realVideos); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,369 @@ | 
				
			|||||
 | 
					package com.genersoft.iot.vmp.media.zlm.dto; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.util.List; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					public class MediaItem { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 应用名 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String app; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 流id | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String stream; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 观看总人数,包括hls/rtsp/rtmp/http-flv/ws-flv | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String totalReaderCount; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 协议 包括hls/rtsp/rtmp/http-flv/ws-flv | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String schema; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源类型, | 
				
			||||
 | 
					     * unknown = 0, | 
				
			||||
 | 
					     * rtmp_push=1, | 
				
			||||
 | 
					     * rtsp_push=2, | 
				
			||||
 | 
					     * rtp_push=3, | 
				
			||||
 | 
					     * pull=4, | 
				
			||||
 | 
					     * ffmpeg_pull=5, | 
				
			||||
 | 
					     * mp4_vod=6, | 
				
			||||
 | 
					     * device_chn=7 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private int originType; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 客户端和服务器网络信息,可能为null类型 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private OriginSock originSock; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源类型的字符串描述 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String originTypeStr; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 产生源的url | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String originUrl; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * GMT unix系统时间戳,单位秒 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private Long createStamp; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 存活时间,单位秒 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private Long aliveSecond; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 数据产生速度,单位byte/s | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private Long bytesSpeed; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 音视频轨道 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private List<MediaTrack> tracks; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /** | 
				
			||||
 | 
					     * 音视频轨道 | 
				
			||||
 | 
					     */ | 
				
			||||
 | 
					    private String vhost; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public static class MediaTrack { | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 音频通道数 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int channels; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         *  H264 = 0, H265 = 1, AAC = 2, G711A = 3, G711U = 4 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int codecId; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 编码类型名称 CodecAAC CodecH264 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private String codecIdName; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * Video = 0, Audio = 1 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int codecType; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 轨道是否准备就绪 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private boolean ready; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 音频采样位数 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int sampleBit; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 音频采样率 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int sampleRate; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 视频fps | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int fps; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 视频高 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int height; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        /** | 
				
			||||
 | 
					         * 视频宽 | 
				
			||||
 | 
					         */ | 
				
			||||
 | 
					        private int width; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getChannels() { | 
				
			||||
 | 
					            return channels; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setChannels(int channels) { | 
				
			||||
 | 
					            this.channels = channels; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getCodecId() { | 
				
			||||
 | 
					            return codecId; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setCodecId(int codecId) { | 
				
			||||
 | 
					            this.codecId = codecId; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public String getCodecIdName() { | 
				
			||||
 | 
					            return codecIdName; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setCodecIdName(String codecIdName) { | 
				
			||||
 | 
					            this.codecIdName = codecIdName; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getCodecType() { | 
				
			||||
 | 
					            return codecType; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setCodecType(int codecType) { | 
				
			||||
 | 
					            this.codecType = codecType; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public boolean isReady() { | 
				
			||||
 | 
					            return ready; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setReady(boolean ready) { | 
				
			||||
 | 
					            this.ready = ready; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getSampleBit() { | 
				
			||||
 | 
					            return sampleBit; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setSampleBit(int sampleBit) { | 
				
			||||
 | 
					            this.sampleBit = sampleBit; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getSampleRate() { | 
				
			||||
 | 
					            return sampleRate; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setSampleRate(int sampleRate) { | 
				
			||||
 | 
					            this.sampleRate = sampleRate; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getFps() { | 
				
			||||
 | 
					            return fps; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setFps(int fps) { | 
				
			||||
 | 
					            this.fps = fps; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getHeight() { | 
				
			||||
 | 
					            return height; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setHeight(int height) { | 
				
			||||
 | 
					            this.height = height; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getWidth() { | 
				
			||||
 | 
					            return width; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setWidth(int width) { | 
				
			||||
 | 
					            this.width = width; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public static class OriginSock{ | 
				
			||||
 | 
					        private String identifier; | 
				
			||||
 | 
					        private String local_ip; | 
				
			||||
 | 
					        private int local_port; | 
				
			||||
 | 
					        private String peer_ip; | 
				
			||||
 | 
					        private int peer_port; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public String getIdentifier() { | 
				
			||||
 | 
					            return identifier; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setIdentifier(String identifier) { | 
				
			||||
 | 
					            this.identifier = identifier; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public String getLocal_ip() { | 
				
			||||
 | 
					            return local_ip; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setLocal_ip(String local_ip) { | 
				
			||||
 | 
					            this.local_ip = local_ip; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getLocal_port() { | 
				
			||||
 | 
					            return local_port; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setLocal_port(int local_port) { | 
				
			||||
 | 
					            this.local_port = local_port; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public String getPeer_ip() { | 
				
			||||
 | 
					            return peer_ip; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setPeer_ip(String peer_ip) { | 
				
			||||
 | 
					            this.peer_ip = peer_ip; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public int getPeer_port() { | 
				
			||||
 | 
					            return peer_port; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        public void setPeer_port(int peer_port) { | 
				
			||||
 | 
					            this.peer_port = peer_port; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getApp() { | 
				
			||||
 | 
					        return app; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setApp(String app) { | 
				
			||||
 | 
					        this.app = app; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getStream() { | 
				
			||||
 | 
					        return stream; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setStream(String stream) { | 
				
			||||
 | 
					        this.stream = stream; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getTotalReaderCount() { | 
				
			||||
 | 
					        return totalReaderCount; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setTotalReaderCount(String totalReaderCount) { | 
				
			||||
 | 
					        this.totalReaderCount = totalReaderCount; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public int getOriginType() { | 
				
			||||
 | 
					        return originType; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginType(int originType) { | 
				
			||||
 | 
					        this.originType = originType; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getOriginTypeStr() { | 
				
			||||
 | 
					        return originTypeStr; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginTypeStr(String originTypeStr) { | 
				
			||||
 | 
					        this.originTypeStr = originTypeStr; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getOriginUrl() { | 
				
			||||
 | 
					        return originUrl; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginUrl(String originUrl) { | 
				
			||||
 | 
					        this.originUrl = originUrl; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public Long getCreateStamp() { | 
				
			||||
 | 
					        return createStamp; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setCreateStamp(Long createStamp) { | 
				
			||||
 | 
					        this.createStamp = createStamp; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public Long getAliveSecond() { | 
				
			||||
 | 
					        return aliveSecond; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setAliveSecond(Long aliveSecond) { | 
				
			||||
 | 
					        this.aliveSecond = aliveSecond; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public List<MediaTrack> getTracks() { | 
				
			||||
 | 
					        return tracks; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setTracks(List<MediaTrack> tracks) { | 
				
			||||
 | 
					        this.tracks = tracks; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getSchema() { | 
				
			||||
 | 
					        return schema; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setSchema(String schema) { | 
				
			||||
 | 
					        this.schema = schema; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setOriginSock(OriginSock originSock) { | 
				
			||||
 | 
					        this.originSock = originSock; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public Long getBytesSpeed() { | 
				
			||||
 | 
					        return bytesSpeed; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setBytesSpeed(Long bytesSpeed) { | 
				
			||||
 | 
					        this.bytesSpeed = bytesSpeed; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public String getVhost() { | 
				
			||||
 | 
					        return vhost; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public void setVhost(String vhost) { | 
				
			||||
 | 
					        this.vhost = vhost; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public OriginSock getOriginSock() { | 
				
			||||
 | 
					        return originSock; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,45 @@ | 
				
			|||||
 | 
					package com.genersoft.iot.vmp.web; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.common.RealVideo; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.conf.SipConfig; | 
				
			||||
 | 
					import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 
				
			||||
 | 
					import org.slf4j.Logger; | 
				
			||||
 | 
					import org.slf4j.LoggerFactory; | 
				
			||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||
 | 
					import org.springframework.stereotype.Controller; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.CrossOrigin; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.RequestParam; | 
				
			||||
 | 
					import org.springframework.web.bind.annotation.ResponseBody; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import java.util.List; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/** | 
				
			||||
 | 
					 * 兼容LiveGBS的API:系统接口 | 
				
			||||
 | 
					 */ | 
				
			||||
 | 
					@Controller | 
				
			||||
 | 
					@CrossOrigin | 
				
			||||
 | 
					@RequestMapping(value = "/api/v1/media") | 
				
			||||
 | 
					public class ApiMediaController { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    private final static Logger logger = LoggerFactory.getLogger(ApiMediaController.class); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @Autowired | 
				
			||||
 | 
					    private IRedisCatchStorage redisCatchStorage; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @RequestMapping(value = "/list") | 
				
			||||
 | 
					    @ResponseBody | 
				
			||||
 | 
					    public JSONObject list( @RequestParam(required = false)Integer start, | 
				
			||||
 | 
					                            @RequestParam(required = false)Integer limit, | 
				
			||||
 | 
					                            @RequestParam(required = false)String q, | 
				
			||||
 | 
					                            @RequestParam(required = false)Boolean online ){ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        List<Object> mediaList = redisCatchStorage.getMediaList(start - 1, start - 1 + limit); | 
				
			||||
 | 
					        JSONObject jsonObject = new JSONObject(); | 
				
			||||
 | 
					        jsonObject.put("code", 0); | 
				
			||||
 | 
					        jsonObject.put("data", mediaList); | 
				
			||||
 | 
					        return jsonObject; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,256 @@ | 
				
			|||||
 | 
					<template> | 
				
			||||
 | 
						<div id="app"> | 
				
			||||
 | 
							<el-container> | 
				
			||||
 | 
								<el-header> | 
				
			||||
 | 
									<uiHeader></uiHeader> | 
				
			||||
 | 
								</el-header> | 
				
			||||
 | 
								<el-main> | 
				
			||||
 | 
									<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;"> | 
				
			||||
 | 
										<span style="font-size: 1rem; font-weight: bold;">推流列表</span> | 
				
			||||
 | 
										<div style="position: absolute; right: 1rem; top: 0.3rem;"> | 
				
			||||
 | 
											<el-button icon="el-icon-refresh-right" circle size="mini" :loading="getDeviceListLoading" @click="getDeviceList()"></el-button> | 
				
			||||
 | 
										</div> | 
				
			||||
 | 
									</div> | 
				
			||||
 | 
									<!-- <devicePlayer ref="devicePlayer"></devicePlayer> --> | 
				
			||||
 | 
									<el-table :data="deviceList" border style="width: 100%" :height="winHeight"> | 
				
			||||
 | 
										<el-table-column prop="schema" label="协议" width="180" align="center"> | 
				
			||||
 | 
										</el-table-column> | 
				
			||||
 | 
										<el-table-column prop="streamUrl" label="流地址" width="240" align="center"> | 
				
			||||
 | 
										</el-table-column> | 
				
			||||
 | 
										<el-table-column prop="online" label="在线人数" width="240" align="center"> | 
				
			||||
 | 
										</el-table-column> | 
				
			||||
 | 
										<el-table-column prop="startTime" label="开始时间" align="center"> | 
				
			||||
 | 
										</el-table-column> | 
				
			||||
 | 
										 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
										<el-table-column label="操作" width="360" 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-group> | 
				
			||||
 | 
												<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.streamId" @click="stopDevicePush(scope.row)">停止</el-button> | 
				
			||||
 | 
												</el-button-group> | 
				
			||||
 | 
												</template> | 
				
			||||
 | 
										</el-table-column> | 
				
			||||
 | 
									</el-table> | 
				
			||||
 | 
									<el-pagination | 
				
			||||
 | 
										style="float: right" | 
				
			||||
 | 
										@size-change="handleSizeChange" | 
				
			||||
 | 
										@current-change="currentChange" | 
				
			||||
 | 
										:current-page="currentPage" | 
				
			||||
 | 
										:page-size="count" | 
				
			||||
 | 
										:page-sizes="[15, 25, 35, 50]" | 
				
			||||
 | 
										layout="total, sizes, prev, pager, next" | 
				
			||||
 | 
										:total="total"> | 
				
			||||
 | 
									</el-pagination> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								</el-main> | 
				
			||||
 | 
							</el-container> | 
				
			||||
 | 
						</div> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<script> | 
				
			||||
 | 
						import uiHeader from './UiHeader.vue' | 
				
			||||
 | 
						export default { | 
				
			||||
 | 
							name: 'app', | 
				
			||||
 | 
							components: { | 
				
			||||
 | 
								uiHeader | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							data() { | 
				
			||||
 | 
								return { | 
				
			||||
 | 
									deviceList: [], //设备列表 | 
				
			||||
 | 
									currentDevice: {}, //当前操作设备对象 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
									videoComponentList: [], | 
				
			||||
 | 
									updateLooper: 0, //数据刷新轮训标志 | 
				
			||||
 | 
									currentDeviceChannelsLenth:0, | 
				
			||||
 | 
									winHeight: window.innerHeight - 200, | 
				
			||||
 | 
									currentPage:1, | 
				
			||||
 | 
									count:15, | 
				
			||||
 | 
									total:0, | 
				
			||||
 | 
									getDeviceListLoading: false | 
				
			||||
 | 
								}; | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							computed: { | 
				
			||||
 | 
								getcurrentDeviceChannels: function() { | 
				
			||||
 | 
									let data = this.currentDevice['channelMap']; | 
				
			||||
 | 
									let channels = null; | 
				
			||||
 | 
									if (data) { | 
				
			||||
 | 
										channels = Object.keys(data).map(key => { | 
				
			||||
 | 
											return data[key]; | 
				
			||||
 | 
										}); | 
				
			||||
 | 
										this.currentDeviceChannelsLenth = channels.length; | 
				
			||||
 | 
									} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
									console.log("数据:" + JSON.stringify(channels)); | 
				
			||||
 | 
									return channels; | 
				
			||||
 | 
								} | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							mounted() { | 
				
			||||
 | 
								this.initData(); | 
				
			||||
 | 
								this.updateLooper = setInterval(this.initData, 10000); | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							destroyed() { | 
				
			||||
 | 
								this.$destroy('videojs'); | 
				
			||||
 | 
								clearTimeout(this.updateLooper); | 
				
			||||
 | 
							}, | 
				
			||||
 | 
							methods: { | 
				
			||||
 | 
								initData: function() { | 
				
			||||
 | 
									this.getDeviceList(); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								currentChange: function(val){ | 
				
			||||
 | 
									this.currentPage = val; | 
				
			||||
 | 
									this.getDeviceList(); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								handleSizeChange: function(val){ | 
				
			||||
 | 
									this.count = val; | 
				
			||||
 | 
									this.getDeviceList(); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								getDeviceList: function() { | 
				
			||||
 | 
									let that = this; | 
				
			||||
 | 
									this.getDeviceListLoading = true; | 
				
			||||
 | 
									this.$axios.get(`/api/devices`,{ | 
				
			||||
 | 
										params: { | 
				
			||||
 | 
											page: that.currentPage, | 
				
			||||
 | 
											count: that.count | 
				
			||||
 | 
										} | 
				
			||||
 | 
									} ) | 
				
			||||
 | 
									.then(function (res) { | 
				
			||||
 | 
										console.log(res); | 
				
			||||
 | 
										console.log(res.data.list); | 
				
			||||
 | 
										that.total = res.data.total; | 
				
			||||
 | 
										that.deviceList = res.data.list; | 
				
			||||
 | 
										that.getDeviceListLoading = false; | 
				
			||||
 | 
									}) | 
				
			||||
 | 
									.catch(function (error) { | 
				
			||||
 | 
										console.log(error); | 
				
			||||
 | 
										that.getDeviceListLoading = false; | 
				
			||||
 | 
									}); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								showChannelList: function(row) { | 
				
			||||
 | 
									console.log(JSON.stringify(row)) | 
				
			||||
 | 
									this.$router.push(`/channelList/${row.deviceId}/0/15/1`); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								showDevicePosition: function(row) { | 
				
			||||
 | 
									console.log(JSON.stringify(row)) | 
				
			||||
 | 
									this.$router.push(`/devicePosition/${row.deviceId}/0/15/1`); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
					
 | 
				
			||||
 | 
								//gb28181平台对接 | 
				
			||||
 | 
								//刷新设备信息 | 
				
			||||
 | 
								refDevice: function(itemData) { | 
				
			||||
 | 
									///api/devices/{deviceId}/sync | 
				
			||||
 | 
									console.log("刷新对应设备:" + itemData.deviceId); | 
				
			||||
 | 
									var that = this; | 
				
			||||
 | 
									that.$refs[itemData.deviceId + 'refbtn' ].loading = true; | 
				
			||||
 | 
									this.$axios({ | 
				
			||||
 | 
										method: 'post', | 
				
			||||
 | 
										url: '/api/devices/' + itemData.deviceId + '/sync' | 
				
			||||
 | 
									}).then(function(res) { | 
				
			||||
 | 
										console.log("刷新设备结果:"+JSON.stringify(res)); | 
				
			||||
 | 
										if (!res.data.deviceId) { | 
				
			||||
 | 
											that.$message({ | 
				
			||||
 | 
												showClose: true, | 
				
			||||
 | 
												message: res.data, | 
				
			||||
 | 
												type: 'error' | 
				
			||||
 | 
											}); | 
				
			||||
 | 
										}else{ | 
				
			||||
 | 
											that.$message({ | 
				
			||||
 | 
												showClose: true, | 
				
			||||
 | 
												message: '请求成功', | 
				
			||||
 | 
												type: 'success' | 
				
			||||
 | 
											}); | 
				
			||||
 | 
										} | 
				
			||||
 | 
										that.initData() | 
				
			||||
 | 
										that.$refs[itemData.deviceId + 'refbtn' ].loading = false; | 
				
			||||
 | 
									}).catch(function(e) { | 
				
			||||
 | 
										console.error(e) | 
				
			||||
 | 
										that.$refs[itemData.deviceId + 'refbtn' ].loading = false; | 
				
			||||
 | 
									});; | 
				
			||||
 | 
								}, | 
				
			||||
 | 
								//通知设备上传媒体流 | 
				
			||||
 | 
								sendDevicePush: function(itemData) { | 
				
			||||
 | 
									// let deviceId = this.currentDevice.deviceId; | 
				
			||||
 | 
									// let channelId = itemData.channelId; | 
				
			||||
 | 
									// console.log("通知设备推流1:" + deviceId + " : " + channelId); | 
				
			||||
 | 
									// let that = this; | 
				
			||||
 | 
									// this.$axios({ | 
				
			||||
 | 
									// 	method: 'get', | 
				
			||||
 | 
									// 	url: '/api/play/' + deviceId + '/' + channelId | 
				
			||||
 | 
									// }).then(function(res) { | 
				
			||||
 | 
									// 	let ssrc = res.data.ssrc; | 
				
			||||
 | 
									// 	that.$refs.devicePlayer.play(ssrc,deviceId,channelId); | 
				
			||||
 | 
									// }).catch(function(e) { | 
				
			||||
 | 
									// }); | 
				
			||||
 | 
								}, | 
				
			||||
 | 
					      transportChange: function (row) { | 
				
			||||
 | 
					        console.log(row); | 
				
			||||
 | 
					        console.log(`修改传输方式为 ${row.streamMode}:${row.deviceId} `); | 
				
			||||
 | 
					        let that = this; | 
				
			||||
 | 
					        this.$axios({ | 
				
			||||
 | 
					          method: 'get', | 
				
			||||
 | 
					          url: '/api/devices/' + row.deviceId + '/transport/' + row.streamMode | 
				
			||||
 | 
					        }).then(function(res) { | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        }).catch(function(e) { | 
				
			||||
 | 
					        }); | 
				
			||||
 | 
					      } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
							} | 
				
			||||
 | 
						}; | 
				
			||||
 | 
					</script> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<style> | 
				
			||||
 | 
						.videoList { | 
				
			||||
 | 
							display: flex; | 
				
			||||
 | 
							flex-wrap: wrap; | 
				
			||||
 | 
							align-content: flex-start; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						.video-item { | 
				
			||||
 | 
							position: relative; | 
				
			||||
 | 
							width: 15rem; | 
				
			||||
 | 
							height: 10rem; | 
				
			||||
 | 
							margin-right: 1rem; | 
				
			||||
 | 
							background-color: #000000; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						.video-item-img { | 
				
			||||
 | 
							position: absolute; | 
				
			||||
 | 
							top: 0; | 
				
			||||
 | 
							bottom: 0; | 
				
			||||
 | 
							left: 0; | 
				
			||||
 | 
							right: 0; | 
				
			||||
 | 
							margin: auto; | 
				
			||||
 | 
							width: 100%; | 
				
			||||
 | 
							height: 100%; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						.video-item-img:after { | 
				
			||||
 | 
							content: ""; | 
				
			||||
 | 
							display: inline-block; | 
				
			||||
 | 
							position: absolute; | 
				
			||||
 | 
							z-index: 2; | 
				
			||||
 | 
							top: 0; | 
				
			||||
 | 
							bottom: 0; | 
				
			||||
 | 
							left: 0; | 
				
			||||
 | 
							right: 0; | 
				
			||||
 | 
							margin: auto; | 
				
			||||
 | 
							width: 3rem; | 
				
			||||
 | 
							height: 3rem; | 
				
			||||
 | 
							background-image: url("../assets/loading.png"); | 
				
			||||
 | 
							background-size: cover; | 
				
			||||
 | 
							background-color: #000000; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
						.video-item-title { | 
				
			||||
 | 
							position: absolute; | 
				
			||||
 | 
							bottom: 0; | 
				
			||||
 | 
							color: #000000; | 
				
			||||
 | 
							background-color: #ffffff; | 
				
			||||
 | 
							line-height: 1.5rem; | 
				
			||||
 | 
							padding: 0.3rem; | 
				
			||||
 | 
							width: 14.4rem; | 
				
			||||
 | 
						} | 
				
			||||
 | 
					</style> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue