代码svn地址 (用户名:liu,密码;123)
这一篇来说视频,使用的是基于 Alipayer封装的组件vue-alipayer-v2,地址
效果图:

现在是直播模式,应该是可以播放监控摄像头的,但我没有能用的监控摄像头IP。
还记得我们之前的模拟实时数据监测图层吗?

这里有个在线视频,之前是放上个视频播放,现在来改一下。
1,首先运行命令安装vue-aliplayer-v2组件
npm install vue-aliplayer-v2
2,将下面的文件解压缩后放到src文件夹里
链接:https://pan.baidu.com/s/1Z1Xk0kN-_SYjsAPduv4rqg
提取码:31w9
3,在views文件夹里新建AliPlayer.vue文件
<template>
<div id="app">
<template v-if="!isShowMultiple && show">
<vue-aliplayer-v2 :source="source"
ref="VueAliplayerV2"
:options="options" />
</template>
<div v-if="isShowMultiple && show"
class="show-multiple">
<template v-for="x in 5">
<vue-aliplayer-v2 class="multiple-player"
:key="x"
:source="source"
ref="VueAliplayerV2"
:options="options" />
</template>
</div>
<!-- <p class="remove-text"
v-if="!show">播放器已销毁!</p>
<div class="player-btns"> -->
<div style="text-align:center;margin-top:10px;height:50px">
<el-button type="text"
icon="el-icon-play"
size="medium"
@click="play()"
style="height: 30px;width: 80px;">播放</el-button>
<el-button type="text"
icon="el-icon-pause"
size="medium"
@click="pause()"
style="height: 30px;width: 80px;">暂停</el-button>
<el-button type="text"
icon="el-icon-replay"
size="medium"
@click="replay()"
style="height: 30px;width: 80px;">重播</el-button>
</div>
<!-- </div> -->
<!-- <div class="player-btns">
<template v-if="!isShowMultiple && show">
<span @click="play()">播放</span>
<span @click="pause()">暂停</span>
<span @click="replay()">重播</span>
<span @click="getCurrentTime()">播放时刻</span>
<span @click="getStatus()">获取播放器状态</span>
</template>
<span @click="show = !show">{{ show ? '销毁' : '重载' }}</span>
<span @click="options.isLive = !options.isLive">{{ options.isLive ? '切换普通模式' : '切换直播模式' }}</span>
<span @click="showMultiple()">{{isShowMultiple ? '显示1个播放器' : '显示多个播放器'}}</span>
</div> -->
<!-- <div class="source-box">
<span class="source-label">选择播放源(支持动态切换):</span>
<select v-model="source" name="source" id="source">
<option value="//player.alicdn.com/video/aliyunmedia.mp4">播放源1</option>
<option value="//yunqivedio.alicdn.com/user-upload/nXPDX8AASx.mp4">播放源2</option>
<option value="//tbm-auth.alicdn.com/e7qHgLdugbzzKh2eW0J/kXTgBkjvNXcERYxh2PA@@hd_hq.mp4?auth_key=1584519814-0-0-fc98b2738f331ff015f7bf5c62394888">播放源3</option>
<option value="//ivi.bupt.edu.cn/hls/cctv1hd.m3u8">直播播放源4</option>
</select>
</div>
<div class="source-box">
<span class="source-label">输入播放源(支持动态切换):</span>
<input class="source-input" type="text" v-model="source">
</div> -->
</div>
</template>
<link rel="stylesheet" href="../aliPlayer/aliplayer-min.css" />
<script type="text/javascript" charset="utf-8" src="../aliPlayer/aliplayer-min.js"></script>
<script>
import VueAliplayerV2 from 'vue-aliplayer-v2';
export default {
name: 'Live-Demo',
components:{ VueAliplayerV2: VueAliplayerV2.Player },
data(){
return {
options: {
// source:'//player.alicdn.com/video/aliyunmedia.mp4',
isLive: true, //切换为直播流的时候必填(true-直播状态,false-普通模式,播放器普通视频)
},
source: null, //'//player.alicdn.com/video/aliyunmedia.mp4'
show: true,
isShowMultiple: false
}
},
props: ["data"],
created () {
//this.source=this.data.IP+":"+this.data.PORT //在线监控的IP加端口号
this.source="//player.alicdn.com/video/aliyunmedia.mp4" //模拟在线监控的固定视频
},
methods:{
play(){
this.$refs.VueAliplayerV2.play()
},
pause(){
this.$refs.VueAliplayerV2.pause();
},
replay(){
this.$refs.VueAliplayerV2.replay();
},
getCurrentTime(){
// this.$refs.VueAliplayerV2.getCurrentTime();
this.source = 'http://ivi.bupt.edu.cn/hls/cctv1.m3u8';
},
getStatus(){
const status = this.$refs.VueAliplayerV2.getStatus();
console.log(`getStatus:`, status);
alert(`getStatus:${status}`);
},
showMultiple(){
this.isShowMultiple = !this.isShowMultiple;
}
}
}
</script>
<style lang="less" scoped>
* {
margin: 0;
padding: 0;
}
.remove-text{
text-align: center;
padding: 20px;
font-size: 24px;
}
.show-multiple{
display: flex;
.multiple-player{
width: calc(80% / 4);
margin: 20px;
}
}
.player-btns{
width: 80%;
display: flex;
justify-content: center;
flex-wrap: wrap;
span {
margin: 0 auto;
display: inline-block;
padding: 5px 10px;
width: 150px;
height: 40px;
line-height: 40px;
border: 1px solid #eee;
background: #e1e1e1;
border-radius: 10px;
text-align: center;
margin: 5px;
cursor: pointer;
}
}
.source-box{
padding: 5px 10px;
margin-bottom: 20px;
.source-label{
margin-right: 20px;
font-size: 16px;
display: block;
}
#source{
margin-top: 10px;
}
.source-input{
margin-top: 10px;
padding: 5px 10px;
width: 80%;
border: 1px solid #ccc;
}
}
</style>
4,然后在DataMonitor.vue里引用,分三步
import aliPlayer from './AliPlayer.vue'
components: { PieChart, aliPlayer },
<el-tab-pane label="在线视频">
<div style="width:460px;height:375px">
<aliPlayer ref="video"></aliPlayer>
</div>
</el-tab-pane>
此时此刻,DataMonitor.vue完整代码:
<!-- 数据监测 -->
<template>
<section>
<el-tabs type="border-card">
<el-tab-pane label="数据监测实时曲线">
<!-- 图表 -->
<div ref="chart"
style="width:460px;height:375px;">
<PieChart ref="echarts"></PieChart>
</div>
</el-tab-pane>
<el-tab-pane label="在线视频">
<div style="width:460px;height:375px">
<aliPlayer ref="video"></aliPlayer>
</div>
</el-tab-pane>
</el-tabs>
</section>
</template>
<script>
import PieChart from "./MonitorChart.vue"; //引入自定义Echart饼图组件
import aliPlayer from './AliPlayer.vue'
export default {
components: { PieChart, aliPlayer },
data () {
return {
pieChart: {
radius: '25%',
pieData: [],
pieDataName: [],
},
form: {}
}
},
props: {
info: {
type: Object,
default: () => {
return {};
}
},
layerid: {
type: String,
default: ""
},
lydata: {
type: Object,
default: () => {
return {};
}
}
},
methods: {
},
mounted () {
//传递来的数据
this.form = this.info;
//把你所需要数据赋值给data中的pieChart对象,然后获取对象中的键值
var { radius, pieData, pieDataName } = this.pieChart;
pieData = this.form.data;
pieDataName = this.form.data.NAME;
//数据渲染图表
this.$refs.echarts.initChart(radius, pieData, pieDataName)
}
}
</script>
<style scoped>
.el-range-editor--mini.el-input__inner {
height: 28px;
left: 20px;
top: 30px;
}
</style>
5,别忘了播放按钮的图标,这是自定义的,把下面三张图片,放到assets文件夹的images文件夹里



然后在blue.css里加上下面的代码
/*自定义按钮*/
.el-icon-play{
background: url(../assets/images/播放.png) center no-repeat;
background-size: cover;
}
.el-icon-pause{
background: url(../assets/images/暂停.png) center no-repeat;
background-size: cover;
}
.el-icon-replay{
background: url(../assets/images/重播.png) center no-repeat;
background-size: cover;
}
.el-icon-play:before,.el-icon-pause:before,.el-icon-replay:before{
content: "替";
visibility: hidden;
}
好,可以了;系统又完善了一点,下一篇再见!
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够
我有一台生产机器和一台开发机器,都运行ubuntu8.10并且都运行最新的phusionpassenger。当我在osx上的本地开发机器上使用ruby1.9.1时,我想知道外面的人是否已经在使用带有ruby1.9.1甚至1.9.2的phusionpassenger?如果是这样,请告诉我们您的设置!此外,有没有办法在apache上使用phusionpassenger同时运行ruby1.8.7(ree)和1.9.1?感谢您的指点,我在任何地方都找不到任何提示... 最佳答案 是的,从某些2.2.x版本开始就正式支持它,我不记
date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期
我一直在寻找一种以编程方式或通过命令行将mp3转换为aac的方法,但没有成功。理想情况下,我有一段代码可以从我的Rails应用程序中调用,将mp3转换为aac。我安装了ffmpeg和libfaac,并能够使用以下命令创建aac文件:ffmpeg-itest.mp3-acodeclibfaac-ab163840dest.aac当我将输出文件的名称更改为dest.m4a时,它无法在iTunes中播放。谢谢! 最佳答案 FFmpeg提供AAC编码功能(如果您已编译它们)。如果您使用的是Windows,则可以从here获取完整的二进制文件。
我想从特定索引开始遍历数组。我该怎么做?myj.eachdo|temp|...end 最佳答案 执行以下操作:your_array[your_index..-1].eachdo|temp|###end 关于ruby-从特定索引开始迭代数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44151758/
参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍 介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。 内容有: ①:Hub模型的方法介绍 ②:服务器端代码介绍 ③:前端vue3安装并调用后端方法 ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke() 去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on
我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:
我如何用ruby编写一个脚本,当从命令行执行时播放mp3文件(背景音乐)?我试过了run="mplayer#{"/Users/bhushan/resume/m.mp3"}-aosdl-vox11-framedrop-cache16384-cache-min20/100"system(run)但它也不起作用,以上是播放器特定的。如果用户没有安装mplayer怎么办。有没有更好的办法? 最佳答案 我一般都是这样pid=fork{exec'mpg123','-q',file} 关于ruby