大家好,欢迎来到IT知识分享网。
H5播放器
H5直播/点播
播放器,使用简单,功能强大
-
支持WebRTC播放;
-
支持MP4播放;
-
支持m3u8/HLS播放;
-
支持HTTP-FLV/WS-FLV播放;
-
支持RTMP播放;
-
支持直播和点播播放;
-
支持播放器快照截图;
-
支持点播多清晰度播放;
-
支持全屏或比例显示;
-
自带的flash支持极速和流畅模式;
-
自带的flash支持HTTP-FLV播放;
-
自动检测IE浏览器兼容播放;
-
支持自定义叠加层;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLlkxk9y-1669170949599)(/images/liveplayer/rendering.jpg)]
属性(Property)
-
video-url
视频流地址, String default ‘’ -
video-title
视频右上角显示的标题, String default ‘’ -
poster
视频封面图片, String default ‘’ -
autoplay
自动播放, Boolean default true -
controls
显示播放器控制栏, Boolean default true -
loop
是否循环播放, Boolean default false -
live
是否直播, 标识要不要显示进度条, Boolean default false -
alt
视频流地址没有指定情况下, 视频所在区域显示的文字, 相当于 html img 标签的 alt 属性, String default ‘无信号’ -
muted
是否静音, Boolean default true -
aspect
视频显示区域的宽高比, fullscreen 即是全屏展示, String default ‘16:9’ -
loading
指示加载状态, 支持 sync 修饰符, Boolean default false -
fluent
流畅模式, Boolean default true -
stretch
是否拉伸, Boolean default false -
timeout
m3u8 加载超时(秒), Number default 20 -
show-custom-button
是否在工具栏显示自定义按钮(极速/流畅, 拉伸/标准), Boolean default true -
hide-big-play-button
是否隐藏起播状态下的大播放按钮, Boolean default false -
hide-snapshot-button
是否隐藏 快照 按钮, Boolean default false -
hide-fullscreen-button
是否隐藏 全屏 按钮, Boolean default false -
hide-fluent-button
是否隐藏 极速/流畅 按钮, Boolean default false -
hide-stretch-button
是否隐藏 拉伸/标准 按钮, Boolean default false -
resolution
HLS点播流播放时使用:需已有对应清晰度的HLS流,供选择的清晰度配置, 如 “yh,fhd,hd,sd” (说明:yh:原始分辨率,fhd:超清,hd:高清,sd:标清,不配置则不启用,需要提供多清晰度源,比如原画源是test.m3u8, 则hd源即为test_hd.m3u8), String default ‘’ -
resolutiondefault
HLS点播流播放时使用:默认播放的清晰度, String default ‘hd’ -
playback-rates
HLS点播流播放时使用:倍速列表, Array default [0.5, 1, 2, 3] -
playback-rate
HLS点播流播放时使用:默认倍速, Number default 1 -
hasaudio
HTTP-FLV播放时使用: 是否有音频,传递该属性用于处理只有音频或只有视频的源, Boolean 默认不配置自动判断 -
hasvideo
HTTP-FLV播放时使用: 是否有视频,传递该属性用于处理只有音频或只有视频的源, Boolean 默认不配置自动判断 -
custom-buttons
自定义工具栏按钮, 配置模板(按钮名称[:class名称]), 多个用英文逗号分隔, 示例:custom-buttons=“对讲,配置:vjs-icon-cog”, String default ‘’ -
autofocus
是否自动获取焦点, Boolean default false -
dblclick-fullscreen
是否双击全屏, Boolean default true -
language
语言(zh-CN/en), String 默认不配置自动判断
方法(Method)
-
play
播放 -
pause
暂停 -
paused
获取暂停状态 -
getCurrentTime
获取当前播放时间进度, 同步返回播放时间进度数据 -
setCurrentTime
设置当前播放时间进度, 即 seek -
snap
外部 API 方式获取快照, 快照获取成功后, 触发 snapOutside Event -
getMuted
获取静音状态 -
setMuted
设置静音状态 -
isFullscreen
获取全屏状态 -
requestFullscreen
触发全屏, 需要放置到交互事件回调中调用 -
exitFullscreen
退出全屏, 需要放置到交互事件回调中调用 -
toggleFullscreen
触发全屏, 需要放置到交互事件回调中调用, 如果已处在全屏状态, 则退出全屏 -
getVolume
获取音量 -
setVolume
设置音量, 0~1
事件(Event)
-
message
m3u8 加载失败时触发通知消息, 参数: { type: ‘’, message: ‘’} -
error
播放器出错回调, 参数: Error Object -
ended
播放结束, 参数: 无 -
timeupdate
进度更新, 参数: 当前时间进度 -
pause
暂停, 参数: 当前时间进度 -
play
播放, 参数: 当前时间进度 -
fullscreen
全屏状态改变, 参数:true/false -
snapOutside
外部快照回调, 参数: 快照 Base64 数据 -
snapInside
内部快照回调, 由控制栏快照按钮触发, 参数: 快照 Base64 数据 -
customButtons
自定义按钮点击回调, 参数:名称
安装使用(Install)
安装
-
vue2
npm install @liveqing/liveplayer
-
vue3
npm install @liveqing/liveplayer-v3
或 下载版本包
在 Vue 中使用
第一步 复制依赖文件(示例 通过 webpack 插件自动复制依赖)
copy node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf 到 www 根目录
copy node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml 到 www 根目录
copy node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js 到 www 根目录
以上 copy 操作可以借助 webpack 插件完成
安装 copy-webpack-plugin 插件, npm install copy-webpack-plugin@4.6.0
,
编辑你的 webpack.config.js
const CopyWebpackPlugin = require('copy-webpack-plugin');
......
// copy js lib and swf files to dist dir
new CopyWebpackPlugin([
{
from: 'node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml'},
{
from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'},
{
from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'js/'}
]),
......
如果正在使用 vue2 + vue-cli, 编辑你的 vue.config.js
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
configureWebpack: {
plugins: [
new CopyWebpackPlugin([
{
from: 'node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml'},
{
from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'},
{
from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'js/'},
])
]
}
}
如果正在使用 vue3 + vite, 编辑你的 vite.config.js
import copy from 'rollup-plugin-copy'
export default defineConfig({
plugins: [vue(), copy({
targets: [
{
src: 'node_modules/@liveqing/liveplayer-v3/dist/component/liveplayer-lib.min.js', dest: 'public/js'},
]
})]
})
vue2 + vue-cli 集成 LivePlayer H5 播放器 Gitee 示例
vue3 + vite 集成 LivePlayer H5 播放器 Gitee 示例
第二步 html模板中引入依赖js
在 html 中引用 www 根目录 liveplayer-lib.min.js
<!DOCTYPE HTML>
<html>
<head>
<title>template</title>
......
<script src="js/liveplayer-lib.min.js"></script>
<!-- 如果正在使用 vue-cli: <script src="<%= BASE_URL %>js/liveplayer-lib.min.js"></script> -->
</head>
<body>
......
</body>
</html>
第三步 编辑你的 Vue 组件
......
import LivePlayer from '@liveqing/liveplayer' // vue2
// import LivePlayer from '@liveqing/liveplayer-v3' // vue3
......
components: {
LivePlayer
}
......
<LivePlayer :videoUrl="videoUrl" fluent autoplay live stretch></LivePlayer>
脱离 Vue 使用
copy node_modules/@liveqing/liveplayer/dist/element/liveplayer.swf 到 www 根目录
copy node_modules/@liveqing/liveplayer/dist/element/crossdomain.xml 到 www 根目录
copy node_modules/@liveqing/liveplayer/dist/element/liveplayer-element.min.js 到 www 根目录
在 html 中引用 www 根目录 liveplayer-element.min.js
HTML 集成 Demo, 需要将页面代码放到 HTTP Web Server 容器下
<!DOCTYPE HTML>
<html>
<head>
<title>liveplayer</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport">
<!-- 引用 liveplayer-element.min.js -->
<script type="text/javascript" src="liveplayer-element.min.js"></script>
</head>
<body>
<live-player id="player01" video-url="rtmp://live.hkstv.hk.lxdns.com/live/hks" live="true" stretch="true">
<div style="position:absolute;left:15px;top:15px;color:#FFF;">自定义叠加层</div>
</live-player>
<live-player video-url="http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8" live="false" stretch="true"></live-player>
<live-player video-url="http://live.hkstv.hk.lxdns.com/flv/hks.flv" live="true" stretch="true"></live-player>
<script> window.onload = function () {
// 页面加载完成以后执行 // JavaScript 交互示例, 需要将页面代码放到 http web server 容器下, 通过浏览器 http 协议访问 var player = document.getElementById('player01'); player.addEventListener('snapOutside', evt => {
console.log('获取快照 base64 数据', evt.detail[0]); }); player.addEventListener('customButtons', function(evt) {
console.log('自定义按钮点击回调 按钮名称', evt.detail[0]) }); player.addEventListener('fullscreen', evt => {
console.log('fullscreen', evt.detail[0]); }); var videoUrlBak = ""; document.addEventListener("visibilitychange", () => {
if (document.visibilityState === 'visible') {
if(videoUrlBak) {
console.log("标签页恢复可见, 继续播放..."); player.setAttribute("video-url", videoUrlBak); } } else {
console.log("标签页不可见, 停止播放..."); videoUrlBak = player.getAttribute("video-url"); player.setAttribute("video-url", ""); } }); setTimeout(() => {
console.log("快照, 回调 snapOutside..."); player.getVueInstance().snap(); console.log("静音..."); player.getVueInstance().setMuted(true); console.log("静音状态: " + player.getVueInstance().getMuted()); console.log("暂停..."); player.getVueInstance().pause(); console.log("暂停状态: " + player.getVueInstance().paused()); console.log("全屏状态: " + player.getVueInstance().isFullscreen()); //触发全屏, 需要放置到交互事件回调中 //btn.onclick = () => { player.getVueInstance().requestFullscreen(); } player.getVueInstance().setMuted(false); console.log("音量: " + player.getVueInstance().getVolume()); player.getVueInstance().setVolume(0.5); console.log("音量1: " + player.getVueInstance().getVolume()); player.getVueInstance().setVolume(0.3); console.log("音量2: " + player.getVueInstance().getVolume()); }, 3000); setTimeout(() => {
console.log("放音..."); player.getVueInstance().setMuted(false); console.log("静音状态: " + player.getVueInstance().getMuted()); console.log("播放..."); player.getVueInstance().play(); console.log("暂停状态: " + player.getVueInstance().paused()); }, 6000); setTimeout(() => {
console.log("切换媒体源..."); player.setAttribute("video-url", "rtmp://live.hkstv.hk.lxdns.com/live/hks2"); }, 9000); } </script>
</body>
</html>
常见问题
页面控制台 Console 错误提示
-
提示: ReferenceError: videojs is not defined
如果在 Vue 中使用,检查 html 是否正确引入依赖
js/liveplayer-lib.min.js
如果脱离 Vue 使用,检查 html 是否正确引入依赖
liveplayer-element.min.js
-
提示: TypeError: The element or ID supplied is not valid. (videojs)
检查 video-url 设置的播放地址 是否有效(可以用 VLC 播放尝试)
-
提示:Access to XMLHttpRequest at … from origin … has been blocked by CORS policy
检查 video-url 设置的播放地址 是否允许跨域访问
多分屏超过 6 路不能播放
浏览器对同源 HTTP/1.x
连接的并发个数有限制, 几种方式规避这个问题:
-
通过 WebRTC 协议访问直播流,如:播放 WebRTC 直播流
-
通过 WebSocket 协议访问直播流,如:播放 WS-FLV 直播流
-
开启 HTTPS, 通过 HTTPS 协议访问直播流
如何自适应 div
设置 aspect=‘fullscreen’,父级元素加上 position: relative
播放器如何销毁
将 video-url
属性置为空即销毁
支持播放 RTSP 吗
不能直接在浏览器中播放 RTSP, 推荐使用 LiveNVR 拉转 RTSP 成 WebRTC、FLV、WS_FLV、HLS、RTMP 来间接支持
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/26613.html