在 vue 中使用保利威视视频播放器
最编程
2024-05-06 09:34:21
...
在data中
vodPlayerJs: "https://player.polyv.net/script/player.js",
this.loadPlayerScript(this.loadPlayer);
if (this.player) {
this.onPause();//两个监听事件
this.onPlay();
}
我这里不知道到底是vid还是URL,所以两个的取值根据传送的参数决定的
loadPlayerScript(callback) {
if (!window.polyvPlayer) {
const myScript = document.createElement("script");
myScript.setAttribute("src", this.vodPlayerJs);
myScript.onload = callback;
document.body.appendChild(myScript);
} else {
callback();
}
},
// 暂停事件
onPause() {
let that=this;
this.player.on("s2j_onVideoPause", function (e) {
that.flag=true;
});
},
// 播放事件
onPlay() {
const _that = this;
this.player.on("s2j_onVideoPlay", function (e) {
_that.flag=false;
});
},
loadPlayer() {
const polyvPlayer = window.polyvPlayer;
this.player = polyvPlayer({
wrap: "#player" + this.index,
width: "100%",
height: "544",
vid: this.vid,
autoplay: false,
ban_preview_video: "on",
allowFullscreen:false,
url: this.url,
});
},
关于全屏的问题
由于保利威的全屏不能带我自己写的进度条
let element = document.documentElement.getElementsByClassName("vue-video-player")[0];
let player=document.getElementsByClassName('pv-video-player')[0];
// this.player.toggleFullscreen();//保利威的全屏方法
if (this.fullscreen) {
player.style.height="544px";//用来设置保利威的视频大小,我设置AUTO或者100%的时候高度就为0了不知道为什么
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
} else {
player.style.height="100vh";
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
// IE11
element.msRequestFullscreen();
}
}
this.fullscreen = !this.fullscreen;
最后附上一些我自己写的菜单栏的方法
进度条的
var that = this;
var oDiv1 = document.getElementById('d2');
var oDiv2 = document.getElementById('bg1');
var oDiv3 = document.getElementById('drag1');
oDiv3.onmousedown = function (e) {
var oEvent = e || event;
var downLg = oEvent.clientX - oDiv3.offsetLeft;
e.preventDefault();
e.stopPropagation();
document.onmousemove = function (ev) {
var oEvent = ev || event;
var moveLg = oEvent.clientX - downLg;
ev.preventDefault();
ev.stopPropagation();
if (moveLg < 0) {
moveLg = 0;
}
else if (moveLg > oDiv1.offsetWidth - oDiv3.offsetWidth + 14) {
moveLg = oDiv1.offsetWidth - oDiv3.offsetWidth + 14;
}
oDiv2.style.width = moveLg + 'px';
oDiv3.style.left = moveLg + 'px';
that.currentTime1 = moveLg / 458 * that.allTime1;
that.currentTime = that.getHMS(moveLg / 458 * that.allTime1);
that.player.j2s_seekVideo(moveLg / 458 * that.allTime1);
}
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
}
}
附上盒子结构
这里面的取值 比如视频总长度,视频当前播放时间可以参考保利威的官方API
https://dev.polyv.net/2020/videoproduct/v-player-sdk/v-player-sdk-web/reference/
<div class="video-bar-bar">
<div class="video-bar-bar-time">{{currentTime}}</div>
<div class="video-bar-bar-line" @mousedown="changeTime">
<div class="video-bar-bar-line-cricle" id="drag1" :style="[{left:currentTime1/allTime1*458+'px'},{}]"></div>//这里是为了设置进度条跟小圆圈的长度与距离
<div class="video-bar-bar-line-all" id="d2"></div>
<div class="video-bar-bar-line-get" id="bg1" :style="[{width:currentTime1/allTime1*458+'px'},{}]"></div>
</div>
<div class="video-bar-bar-allTime">{{allTime}}</div>
</div>
关于格式化视频时间
getHMS(time) {
const hour = parseInt(time / 3600) < 10 ? '0' + parseInt(time / 3600) : parseInt(time / 3600)
const min = parseInt(time % 3600 / 60) < 10 ? '0' + parseInt(time % 3600 / 60) : parseInt(time % 3600 / 60)
const sec = parseInt(time % 3600 % 60) < 10 ? '0' + parseInt(time % 3600 % 60) : parseInt(time % 3600 % 60)
return hour + ':' + min + ':' + sec
},
关于音量的设置也是
// 拖拽音量盒子
changeVal() {
let that = this;
var oDiv1 = document.getElementById('d1');
var oDiv2 = document.getElementById('bg');
var oDiv3 = document.getElementById('drag');
oDiv3.onmousedown = function (ev) {
var oEvent = ev || event;
var downLg = oEvent.clientY - oDiv3.offsetTop;
ev.preventDefault();
ev.stopPropagation();
document.onmousemove = function (ev) {
var oEvent = ev || event;
var moveLg = oEvent.clientY - downLg;
ev.preventDefault();
ev.stopPropagation();
if (moveLg < 0) {
moveLg = 0;
} else if (moveLg > 98) {
moveLg = 98;
}
// oDiv2.style.height = 98-moveLg + 'px';
// oDiv3.style.bottom = 98-moveLg + 'px';
that.vol = 98 - moveLg;
that.player.j2s_setVolume((98 - moveLg) / 100);
}
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
}
}
},
同样附上盒子结构
<div class="video-volume" @click.stop="isShowVol=!isShowVol">
<div class="video-volume-bar" v-if="isShowVol" @mousedown="changeVal" @click.stop="changeVal">
<div class="video-volume-bar-cricle" id="drag" :style="[{bottom:vol+'px'},{}]"></div>
<div class="video-volume-bar-all" id="d1"></div>
<div class="video-volume-bar-get" id="bg" :style="[{height:vol+'px'},{}]"></div>
</div>
<img id="vol" src="../../assets/蒙版组 57@2x.png" @mouseover="hover('vol',require('../../assets/蒙版组 57@2x_1.png'))"
@mouseout="unhover('vol',require('../../assets/蒙版组 57@2x.png'))">
</div>
以上
有兴趣的大家可以一起讨论
上一篇: 带 A 链接视频的 vue 下载文件
推荐阅读
-
在 vue 中使用保利威视视频播放器
-
腾讯视频直播 02-推流-美颜滤镜 同样,腾讯云提供了 setBeautyFilter 方法来设置美颜风格、磨皮程度、美白程度和泛红程度 //style 磨皮风格:0:平滑 1:自然 2:朦胧 //美容级别:0-9。值为 0 时关闭美颜效果。默认值:0,关闭美颜效果。 //美白级别:取值 0-9。值为 0 时,将关闭美白效果。默认值:0,关闭美白效果。 //ruddyLevel:取值范围为 0-9。值为 0 时关闭美白效果。默认值:0,关闭美白效果。 public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel);; public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel) 滤镜 setFilter 方法可以设置滤镜效果,滤镜本身是一个直方图文件。setSpecialRatio 方法可以设置滤镜的程度,从 0 到 1,越大滤镜效果越明显,默认值为 0.5。 Bitmap bitmap = BitmapUtils.decodeResource(getResources, R.drawable.langman); if (mLivePusher) if (mLivePusher ! = null) { mLivePusher.setFilter(bmp); } 控制摄像头 腾讯云 sdk 默认为前置摄像头(可以通过修改 TXLivePushConfig 的配置函数 setFrontCamera 来修改默认值),调用一次 switchCamera 就切换一次,注意切换摄像头前要确保 TXLivePushConfig 和 TXLivePusher 对象已经初始化。 mLivePushConfig.setFrontCamera(true); // 默认前置摄像头。 mLivePusher.switchCamera; //切换摄像头。 ⑦ 设置徽标水印 腾讯视频云目前支持两种设置水印的方式:一种是在流媒体 SDK 中设置水印,原理是在 SDK 中对视频进行编码前在画面中设置水印。另一种方式是在云端设置水印,即由云端解析视频并添加水印标识。 建议使用 SDK 添加水印,因为在云端添加水印会有问题。下面是添加水印的 SDK 介绍: //设置视频水印 mLivePushConfig.setWatermark(BitmapFactory.decodeResource(getResources,R.drawable.watermark), 10, 10); // 最后两个参数是视频的水印。 //最后两个参数是水印位置的 X 轴和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); 如果需要对水印图像的位置进行模型适配,则需要调用水印规范化接口。 /设置视频水印 mLivePushConfig.setWatermark(mBitmap, 0.02f, 0.05f, 0.2f); //参数为水印图像。 //参数包括水印图像的位图、水印位置的 X 轴坐标、水印位置的 Y 轴坐标和水印宽度。后三个参数的范围是 [0,1]。 // 最后两个参数是水印位置的 X 轴坐标和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); TXLivePushConfig 中的 setHardwareAcceleration 方法可以启用或禁用硬件编码。 if (mHWVideoEncode){ if (mLivePushConfig ! = null) { if (Build.VERSION.SDK_INT < 18){ Toast.makeText(getApplicationContext, "Hardware acceleration failed, current phone API level is too low (min 18)"、 Toast.LENGTH_SHORT).show; mHWVideoEncode = false; } } } } mLivePushConfig.setHardwareAcceleration(mHWVideoEncode ? TXLiveConstants.ENCODE_VIDEO_HARDWARE : TXLiveConstants.ENCODE_VIDEO_SOFTWARE); mLivePusher.setConfig(mLivePushConfig); // 如果您不确定何时启用硬件加速,建议将其设置为 ENCODE_VIDEO_AUTO。 // 默认情况下启用软件编码,但如果手机的 CPU 使用率超过 80% 或帧速率为 10,SDK 将自动切换到硬件编码。 ⑨ 后台推流 在常规模式下,一旦应用程序进入后台,摄像头捕捉数据的能力就会被 Android 禁用,这意味着 SDK 无法继续捕捉和编码音频和视频数据。如果我们什么都不做,故事就会按照下面的脚本发展: 阶段 1(背景剪切后 10 秒 ->)- CDN 无法将视频流传输给观众,因为没有数据,观众看到的是主帧。 阶段 2(10 秒-> 70 秒)--观众一方的播放器因无法接收到直播流而退出,房间里空无一人。 第 3 阶段(70 秒后)--服务器直接断开了推送流媒体的 RTMP 链接,主播需要重新打开直播才能继续。 主播可能只是短暂地接了一个紧急电话,但各云提供商的安全措施会迫使主播的直播提前结束。 1) 设置 setPauseFlag 在开始推流之前,使用 TXLivePushConfig 的 setPauseImg 接口设置一个等待图像,其含义建议为 "主播将暂时离开,稍后再回来"。
-
在iOS上使用Vue开发视频播放器
-
Vue 使用 video 标签实现视频播放-复制代码在main.js中引入