VUE2中使用阿里云播放器AliPlayer

简述

基于 Vue 的播放器单页应用, 利用 web 播放器 sdk 进行视频点播,包含播放列表、字幕、多语言、自适应码率,皮肤自定义等功能 Web播放器文档

已知问题

  • vue中使用截图,不太好使【已自行优化】
  • 无键盘快捷键,无法通过空格暂停播放【已自行优化】
  • 无法双击全屏【已自行优化】
  • 没有提供直接更改主题色的方式,但自己可以通过CSS更改(莫得必要)【已自行优化】

前情提示

系统:

一说

  • 部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤
  • 带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行
  • 如果无法下载、无法复制,请评论后留言即可。收到消息后会第一时间回复~
  • 知识付费,1对1技术支持:开放技术支持 | 需求墙 · 语雀

有账号的朋友,可以点个赞或者评论两句哦,评论后会获得积分奖励~

官网文档:Web播放器快速接入_视频点播-阿里云帮助中心

其他

解决思路:直接iframe等方式内嵌HTML写法的播放器即可。

示例代码

<template><page-header-wrapper><a-card :bordered="false"><a-divider>MP4录播</a-divider><div style="width:100%;"></div><div class="prism-player" id="player-con"></div></a-card></page-header-wrapper>
</template><script>
import { tableMixin } from '@/store/table-mixin'
import {videoList} from './js/testVideoList'
export default {name: 'Qrcode',components: {},mixins: [tableMixin],data () {return {videoList: videoList,player: null,playingVideo: {},loadingColor: ['#276cb3', '#f2ac1a', '#28130e', '#229849', '#db2344'],videoLoading: true,fullScreen: false,}},filters: {},created () {console.log('created')},mounted () {console.log('mounted')const url = 'https://cesium.com/public/SandcastleSampleData/big-buck-bunny_trailer.mp4'const poster = 'https://tcplayer-1306264703.cos.ap-nanjing.myqcloud.com/picture/poster.png'// this.createDemoPlayer(this.videoList[0].source, this.videoList[0].CoverURL)this.createDemoPlayer(url, poster)// this.playingVideo = videoList[0]this.videoLoading = false},computed: {},watch: {},methods: {playVideo(video) {if (this.player === null || this.playingVideo.VideoId === video.VideoId) {return}this.player.loadByUrl(video.source)this.playingVideo = video},createDemoPlayer(source, cover) {if (document.getElementById('player-con') === null) {const playerDomWrap = this.$refs.playerTempconst playerDom = document.createElement('div')playerDom.setAttribute('id', 'player-con')playerDomWrap.appendChild(playerDom)}const props = {id: 'player-con',width: '100%',height: '485px',language: 'zh-cn',source: source,isLive: false,cover: cover,'autoplay': false,'rePlay': false,'playsinline': true,'keyShortCuts': true,'preload': true,'controlBarVisibility': 'hover','useH5Prism': true,'extraInfo': {'crossOrigin': 'anonymous'},components: [{name: 'StartADComponent',type: AliPlayerComponent.StartADComponent,args: ['https://img.alicdn.com/tfs/TB1byi8afDH8KJjy1XcXXcpdXXa-1920-514.jpg', 'https://promotion.aliyun.com/ntms/act/videoai.html', 3]}, {name: 'PauseADComponent',type: AliPlayerComponent.PauseADComponent,args: ['https://img.alicdn.com/tfs/TB1byi8afDH8KJjy1XcXXcpdXXa-1920-514.jpg', 'https://promotion.aliyun.com/ntms/act/videoai.html']}],snapshotWatermark:{left:'100',top:'100',text:'Powered By PUSDN',font:'italic bold 12px 宋体',strokeColor:'gray',fillColor:'gray'},'skinLayout': [{'name': 'bigPlayButton','align': 'cc'},{'name': 'H5Loading','align': 'cc'},{'name': 'errorDisplay','align': 'tlabs','x': 0,'y': 0},{'name': 'infoDisplay'},{'name': 'tooltip','align': 'blabs','x': 0,'y': 56},{'name': 'thumbnail'},{'name': 'controlBar','align': 'blabs','x': 0,'y': 0,'children': [{'name': 'progress','align': 'blabs','x': 0,'y': 44},{'name': 'playButton','align': 'tl','x': 15,'y': 12},{'name': 'timeDisplay','align': 'tl','x': 10,'y': 7},{'name': 'fullScreenButton','align': 'tr','x': 10,'y': 12},{'name': 'subtitle','align': 'tr','x': 15,'y': 12},{'name': 'setting','align': 'tr','x': 15,'y': 12},{'name': 'volume','align': 'tr','x': 5,'y': 10},{'name': 'snapshot','align': 'tr','x': 10,'y': 12}]}]}// this.player = new Aliplayer(props)// this.player.on('requestFullScreen', this.fullScreenHandle)// this.player.on('cancelFullScreen', this.cancelFullScreenHandel)this.player = new Aliplayer(props, (player) => {console.log('播放器初始化完成', player)// 添加截图事件监听器player.on('snapshoted', (data) => {console.log('截图完成', data)this.handleSnapshot(data)})})let clicked = falsethis.player.tag.addEventListener('click', ()=>{console.log(this.player.getStatus())if (!clicked) {setTimeout(() => {// 如果在一定时间内没有发生双击事件,执行单击事件逻辑if (!clicked) {console.log(this.player.getStatus())if (this.player.getStatus() === 'pause') {this.player.play()} else {this.player.pause()}}clicked = false // 重置状态}, 300) // 设置一个合适的时间间隔}})this.player.tag.addEventListener('dblclick', ()=>{clicked = true // 表示已经发生了双击事件const service = this.player.fullscreenServiceif(service.getIsFullScreen()){service.cancelFullScreen()} else {service.requestFullScreen()}})// this.player.on('snapshoted', (data) => {//   console.log('截图完成', data)//   var pictureData = data.paramData.base64//   var downloadElement = document.createElement('a')//   downloadElement.setAttribute('href', pictureData)//   var fileName = 'Aliplayer' + Date.now() + '.png'//   downloadElement.setAttribute('download', fileName)//   downloadElement.click()//   pictureData = null// })},playNextVideo() {const videoList = this.videoListconst index = videoList.findIndex(item => item.VideoId === this.playingVideo.VideoId)if (index === -1 || index === videoList.length - 1) {// this.player.getComponent('playerTipComponent').fadeOutTip()return}this.playVideo(videoList[index + 1])},fullScreenHandle() {const title = this.playingVideo.Titlethis.player.getComponent('playerFullScreenTitle').fullScreenHandle(title)this.fullScreen = true},cancelFullScreenHandel() {// this.player.getComponent('playerFullScreenTitle').cancelFullScreenHandle()this.fullScreen = false},handleSnapshot2 (data) {var canvas = document.createElement('canvas'),video = this.player.tagcanvas.width =video.videoWidth,//视频原有尺寸canvas.height = video.videoHeight//视频原有尺寸var ctx = canvas.getContext('2d')ctx.save()
//判断用户是否对视频做过镜像var image = this.player.getImage()if(image == 'vertical')//垂直镜像{ctx.translate(0,canvas.height)ctx.scale(1, -1)}else if(image == 'horizon')//水平镜像{ctx.translate(canvas.width, 0)ctx.scale(-1, 1)}
//视频的当前画面渲染到画布上ctx.drawImage(video, 0, 0, canvas.width, canvas.height)ctx.restore()},handleSnapshot(data) {console.log('截图完成', data)var pictureData = data.paramData.base64var downloadElement = document.createElement('a')downloadElement.setAttribute('href', pictureData)var fileName = 'Pusdn_' + Date.now() + '.png'downloadElement.setAttribute('download', fileName)downloadElement.click()pictureData = null},}
}
</script>
<style scoped></style>

修改皮肤

Web播放器SDK的进阶功能_视频点播-阿里云帮助中心

    .prism-player .prism-liveshift-progress .prism-progress-played, .prism-player .prism-progress .prism-progress-played {position: absolute;top: 0;left: 0;width: 0;height: 100%;background-color: #f00;}

额外

https://github.com/aliyunvideo/AliyunPlayer_Web/blob/master/H5VodVueDemo/README.zh_CN.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DCGAN 使用指南:将卷积神经网络和对抗网络结合,适用于生成小尺寸的图像

DCGAN 使用指南&#xff1a;将卷积神经网络和对抗网络结合 网络结构细节设计 论文地址&#xff1a;https://arxiv.org/abs/1511.06434 项目代码&#xff1a;https://github.com/tensorlayer/DCGAN.git DCGAN 适用于生成小尺寸的图像&#xff0c;并且具有简单易用的优势 Styl…

“2024上海智博会、2024北京智博会”双展联动,3月上海,6月北京

“2024上海智博会、2024北京智博会”双展联动&#xff0c;将分别于3月和6月在上海和北京举办。这两个展会旨在充分展示智慧城市、人工智能、物联网、大数据、软件等新兴行业的最新产品和技术。 作为中国最具影响力和创新力的智能科技展会&#xff0c;上海智博会和北京智博会吸引…

bclinux aarch64 ceph 14.2.10 云主机 性能对比FastCFS vdbench

部署参考 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph 14.2.10 aarch64 非集群内 客户端 挂载块设备-CSDN博客 FastCFS vdbench数据参考 bclinux aarch64 openeuler 20.03 …

Java LeetCode篇-深入了解关于单链表的经典解法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 移除链表元素 1.1 使用双指针方法 2.0 反转链表 2.1 递归法 2.2 头插法 3.0 链表中倒数第 k 个节点 3.1 递归法 3.2 快慢指针 4.0 合并两个有序链表 4.1 递归法 …

【每日一题】1670. 设计前中后队列-2023.11.28

题目&#xff1a; 1670. 设计前中后队列 请你设计一个队列&#xff0c;支持在前&#xff0c;中&#xff0c;后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类&#xff1a; FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面…

如何通过“闻香”给葡萄酒分类?

有句话叫做“闻香识女人”&#xff0c;葡萄酒也如同美女&#xff0c;千娇百媚风情万种&#xff0c;所以通过“闻香”也可以给葡萄酒进行分类。 那么&#xff0c;云仓酒庄的品牌雷盛红酒分享葡萄酒都有哪些不同的香呢&#xff1f; 云仓酒庄是云仓酒庄的结合&#xff0c;也就是在…

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…

vivado产生报告阅读分析21

其他命令选项 • -of_objects <suggestion objects> &#xff1a; 启用特定建议的报告。在此模式下运行时 &#xff0c; report_qor_suggestions 不会生成新建议。此命令可快速执行 &#xff0c; 读取 RQS 文件后 &#xff0c; 此命令可用于查看其中包 含的建议。其…

流程控制翻转学习

&#x1f4d1;前言 本文主要是【Python】——Python流程控制翻转学习的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

OSHI-操作系统和硬件信息库

文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包&#xff08;package&#xff09;1.4 涉及的核心类 二、操作系统信息&#xff1a;OperatingSystem2.1 总揽2.2 文件系统信息&#xff1a;FileSystem2.3 网络参数信息&#xff1a;NetworkParams2.4 进程信息&am…

Docker,从入门到精通

1、DockerFile 介绍 dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。 具体步骤&#xff1a; 1、编写一个 dockerfile 文件 2、docker build 构造一个镜像 3、docker run 运行镜像 4、docker push 发布镜像 DockerFile 构建过程 1、每个保留关键字都必须是大…

WSDM 2024 | LLMs辅助基于内容的推荐系统增强BPR训练数据

本文提出了一种简单而有效的基于LLMs的图数据增强策略&#xff0c;称为LLMRec&#xff0c;以增强基于内容的推荐系统。LLMRec包含三种数据增强策略和两种去噪策略。数据增强策略包括从文本自然语言的角度挖掘潜在的协同信号, 构建用户画像(LLM-based), 并强化item side informa…

Adobe Illustrator绘图解决卡顿问题

最近在用AI做矢量图&#xff0c;但是遇到了一个很难搞的问题&#xff0c;当我们需要分辨率较高的图片的时候&#xff0c;Python用Matplotlib生成的pdf时dpi参数会设置为600及以上&#xff0c;但是样子的话就造成了pdf文件过大以及AI卡顿&#xff0c;比如&#xff0c;下午生成的…

解码 SQL:深入探索 Antlr4 语法解析器背后的奥秘

探寻SQL的背后机制 前言 在数据领域&#xff0c;SQL&#xff08;Structured Query Language&#xff09;是一门广泛使用的语言&#xff0c;用于查询和处理数据。你可能已经使用过诸如MySQL、Hive、ClickHouse、Doris、Spark和Flink等工具来编写SQL查询。 每一种框架都提供了…

F22服装管理软件系统 前台任意文件上传漏洞复现

0x01 产品简介 F22服装管理软件系统是广州锦铭泰软件科技有限公司一款专为服装行业开发的综合性管理软件。该产品旨在帮助服装企业实现全面、高效的管理&#xff0c;提升生产效率和经营效益。 0x02 漏洞概述 F22服装管理软件系统UploadHandler.ashx接口处存在任意文件上传漏洞…

实时天气(预报)API接口

实时天气预报API接口 一、实时天气(预报)API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、实时天气(预报)API接口 一款帮助你获取实时天气和天气预报的API接口 二、使用步…

对于 ` HttpServletResponse ` , ` HttpServletRequest `我们真的学透彻了吗

对于 **HttpServletResponse , HttpServletRequest**我们真的学透彻了吗 问题引入 PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) {ExcelUtil<SysUser> util new ExcelUtil<SysUser>(SysUser.class);uti…

RHCSA---基本命令使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Linux中终端中的很多操作都是通过命令行实现的&#xff0c;最常用的输入命令的方法有以下两种。 (1).打开自带的终端&#xff0c;类似于Windows中的CMD (2).ssh远程连接&#xff0c;关于…

基于Java SSM框架实现高校二手交易平台系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现高校二手交易平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校二手交易平台&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…

如何使用群晖Synology Office结合内网穿透实现多人远程编辑文件协同办公

使用群晖Synology Office提升生产力&#xff1a;多人同时编辑一个文件 文章目录 使用群晖Synology Office提升生产力&#xff1a;多人同时编辑一个文件本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制…