| | |
| | | </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> |
| | | <span v-if="!recordDetail" >云端录像</span> |
| | | <el-page-header v-if="recordDetail" @back="backToList" content="云端录像"> |
| | | </el-page-header> |
| | | <div style="position: absolute; right: 5rem; top: 0.3rem;"> |
| | | 节点选择: |
| | | <el-select size="mini" @change="chooseMediaChange" style="width: 16rem; margin-right: 1rem;" v-model="mediaServerId" placeholder="请选择" :disabled="recordDetail"> |
| | |
| | | </div> |
| | | <div style="position: absolute; right: 1rem; top: 0.3rem;"> |
| | | <el-button v-if="!recordDetail" icon="el-icon-refresh-right" circle size="mini" :loading="loading" @click="getRecordList()"></el-button> |
| | | <el-button v-if="recordDetail" icon="el-icon-arrow-left" circle size="mini" @click="backToList()"></el-button> |
| | | </div> |
| | | </div> |
| | | <div v-if="!recordDetail"> |
| | |
| | | :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | <cloud-record-detail ref="cloudRecordDetail" v-if="recordDetail" :recordFile="chooseRecord" :mediaServerId="mediaServerId" ></cloud-record-detail> |
| | | <cloud-record-detail ref="cloudRecordDetail" v-if="recordDetail" :recordFile="chooseRecord" :mediaServerId="mediaServerId" :mediaServerPath="mediaServerPath" ></cloud-record-detail> |
| | | </el-main> |
| | | </el-container> |
| | | </div> |
| | |
| | | return { |
| | | mediaServerList: [], // 滅体节点列表 |
| | | mediaServerId: null, // 媒体服务 |
| | | mediaServerPath: null, // 媒体服务地址 |
| | | recordList: [], // 设备列表 |
| | | chooseRecord: null, // 媒体服务 |
| | | |
| | |
| | | that.mediaServerList = data.data; |
| | | if (that.mediaServerList.length > 0) { |
| | | that.mediaServerId = that.mediaServerList[0].id |
| | | let port = that.mediaServerList[0].httpPort; |
| | | if (location.protocol === "https:" && that.mediaServerList[0].httpSSlPort) { |
| | | port = that.mediaServerList[0].httpSSlPort |
| | | } |
| | | that.mediaServerPath = location.protocol + "//" + that.mediaServerList[0].streamIp + ":" + port |
| | | that.getRecordList(); |
| | | } |
| | | }) |
| | |
| | | <i class="el-icon-video-camera" ></i> |
| | | {{ item.substring(0,17)}} |
| | | </el-tag> |
| | | <a class="el-icon-download" style="color: #409EFF;font-weight: 600;margin-left: 10px;" :href="`${basePath}/${mediaServerId}/record/${recordFile.app}/${recordFile.stream}/${chooseDate}/${item}`" download /> |
| | | <!-- <a class="el-icon-download" style="color: #409EFF;font-weight: 600;margin-left: 10px;" :href="`${basePath}/${mediaServerId}/record/${recordFile.app}/${recordFile.stream}/${chooseDate}/${item}`" download />--> |
| | | <a class="el-icon-download" style="color: #409EFF;font-weight: 600;margin-left: 10px;" :href="`${basePath}/download.html?url=${recordFile.app}/${recordFile.stream}/${chooseDate}/${item}`" target="_blank" /> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | |
| | | <li class="task-list-item" v-for="item in taskListEnded"> |
| | | <div class="task-list-item-box" style="height: 2rem;line-height: 2rem;"> |
| | | <span>{{ item.startTime.substr(10) }}-{{item.endTime.substr(10)}}</span> |
| | | <a class="el-icon-download download-btn" :href="basePath + '/' + item.recordFile" download > |
| | | <a class="el-icon-download download-btn" :href="basePath + '/download.html?url=../' + item.recordFile" target="_blank"> |
| | | </a> |
| | | </div> |
| | | </li> |
| | |
| | | components: { |
| | | uiHeader, player |
| | | }, |
| | | props: ['recordFile', 'mediaServerId', 'dateFiles'], |
| | | props: ['recordFile', 'mediaServerId', 'dateFiles', 'mediaServerPath'], |
| | | data() { |
| | | return { |
| | | basePath: process.env.NODE_ENV === 'development'?`${location.origin}/debug/zlm/${this.mediaServerId}`:`${location.origin}/zlm/${this.mediaServerId}`, |
| | | basePath: `${this.mediaServerPath}/record`, |
| | | dateFilesObj: [], |
| | | detailFiles: [], |
| | | chooseDate: null, |
| | |
| | | this.videoUrl = ""; |
| | | }else { |
| | | // TODO 控制列表滚动条 |
| | | this.videoUrl = `${this.basePath}/${this.mediaServerId}/record/${this.recordFile.app}/${this.recordFile.stream}/${this.chooseDate}/${this.choosedFile}` |
| | | this.videoUrl = `${this.basePath}/${this.recordFile.app}/${this.recordFile.stream}/${this.chooseDate}/${this.choosedFile}` |
| | | console.log(this.videoUrl) |
| | | } |
| | | |
| | |
| | | // return `http://${baseZlmApi}/${streamInfo.app}/${streamInfo.streamId}.flv`; |
| | | if (location.protocol === "https:") { |
| | | if (streamInfo.wss_flv === null) { |
| | | this.$message({ |
| | | showClose: true, |
| | | message: '媒体服务器未配置ssl端口', |
| | | type: 'error' |
| | | }); |
| | | console.error("媒体服务器未配置ssl端口, 使用http端口") |
| | | // this.$message({ |
| | | // showClose: true, |
| | | // message: '媒体服务器未配置ssl端口, ', |
| | | // type: 'error' |
| | | // }); |
| | | return streamInfo.ws_flv |
| | | }else { |
| | | return streamInfo.wss_flv; |
| | | } |