目录
最近有个视频回放的功能,第三方给我这边rtmp协议的接口,rtmp协议在浏览器端是需要借助flash插件的,现在主流浏览器都不再支持flash了,火狐最后支持的版本是84.0.2、谷歌的87.0.4270.0,这个可以上网搜一下。除了这种方式还有常用三种协议格式,http-flv和http-Websoket协议格式前端可以用flv.js接收播放, hls协议原生video.js可以播放,如果是实时视频的话不推荐会有几秒延迟,回放的可以考虑在内。说了这么多,由于一些原因,这个功能只能选择rtmp协议。
npm i video.js
//全局引入在 main.js 中进行引入
import videojs from "video.js";
import "video.js/dist/video-js.css";
Vue.prototype.$video = videojs;
//局部引入在页面引入
import videojs from "video.js"
import "video.js/dist/video-js.css"
做了两个按钮手动触发和关闭,我这边需求是回放,点击播放时先显示时间弹框,点确认时再触发视频,这个按照个人需求不需要的话取video就行
template配置
<template>
<div class="video-details" id="video-detailss">
<div class="video-mm" id="video-mm">
<video id="myvideo" class="video-js vjs-default-skin vjs-big-play-centered"
preload="none"></video>
</div>
<div class="btns">
<el-button size="mini" @click="handlePlays">点击播放</el-button>
<el-button size="mini" @click="handleClear">关闭销毁</el-button>
</div>
</div>
</template>
//这是个时间处理
import moment from 'moment'
import videojs from "video.js"
import "video.js/dist/video-js.css"
props: {
liftInfoData: {
type: Object,
default: {},
},
},
otherCloseVideo() {
if (this.videoPlayers != null) {
this.videoPlayers.pause() //关闭
this.videoPlayers.dispose();//销毁
this.videoPlayers = null
}
},
如果不销毁会一直占用你的浏览器内存,直到把浏览器崩溃
beforeDestroy() {
this.otherCloseVideo() //调用上方的销毁事件
},
我这里的点播放的时候跳出选择时间节点的弹框,点确定时触发事件,先判断有无videoPlayers,有就给他先销毁再创建,你也可以选择我下方的重置,一样可以达到切换视频的效果。
handlePlay() {
if (this.videoPlayers) {
this.videoPlayers.dispose();//dispose该销毁是销毁的所有dom节点
$("#video-mm").html(' <video id="myvideo" class="video-js vjs-default-skin vjs-
big-play-centered" preload="none"></video>');//手动再创建
//这里隐藏掉的是重置播放器,重新选择地址,达到一个切换视频的效果,不太符合需求所以没有采用
// this.videoPlayers.reset();
// this.videoPlayers.src([
// {
// type: 'application/x-mpegURL',
// src:this.godSrc
// },
// ]);
// this.videoPlayers.load();
// this.videoPlayers.play();
}
let that=this
that.videoPlayers = videojs("myvideo", {
//确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用
autoplay属性或通过Player API。
// controls: true,
//自动播放属性,muted:静音播放
muted: true,
autoplay: true,
//建议浏览器是否应在<video>加载元素后立即开始下载视频数据。
preload: "auto",
//设置视频播放器的显示宽度(以像素为单位)
width: "960px",
//设置视频播放器的显示高度(以像素为单位)
height: "522px",
//这里面放的就是视频的地址
sources: [{
src: that.godSrc
}],
playbackRates: [0.5, 1, 1.5, 2] //倍速播放
}, function () {
console.log("videojs播放器初始化成功");
});
that.videoPlayers.play();
},

在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到rubygems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在Heroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class