1.2.2 • Published 4 years ago

vue-fllplayer-v2 v1.2.2

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

vue-alipayer-v2

感谢每一位开源的开发者. 这是一个基于Alipayer 开发并封装成vue组件的播放器.

vue中使用Alipayer,播放rtmp,m3u8,mp4视频

本项目在线演示

阿里云播放器在线演示

假如此轮子对你有帮助,请顺手star一下吧.o( ̄︶ ̄)o

1.安装使用! 下载安装npm包

npm i vue-aliplayer-v2 --save
or
yarn add vue-aliplayer-v2 

全局注册 main.js

import VueAliplayerV2 from 'vue-aliplayer-v2';

Vue.use(VueAliplayerV2);

局部注册 App.vue

import VueAliplayerV2 from 'vue-aliplayer-v2';
components:{ VueAliplayerV2: VueAliplayerV2.Player }

2.组件中使用

组件模板使用,但需要注意的是,假如你的页面中有多个播放器,那么这个id需要唯一!!,ID必传,只有一个的时候,可以忽略,命名只能是有效字符开头. 下面的视频连接仅供演示测试.

<template>
    <div id="app">
        <template v-if="show">
            <vue-aliplayer-v2 :source="source" ref="VueAliplayerV2" :options="options" />
        </template>
        <p class="remove-text" v-else>播放器已销毁!</p>
        <div class="player-btns">
            <span @click="play()">播放</span>
            <span @click="pause()">暂停</span>
            <span @click="replay()">重播</span>
            <span @click="getCurrentTime()">播放时刻</span>
            <span @click="show = !show">{{ show ? '销毁' : '重载' }}</span>
            <span @click="options.isLive = !options.isLive">{{ options.isLive ? '切换普通模式' : '切换直播模式' }}</span>
            <span @click="getStatus()">获取播放器状态</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/cctv1.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>
<script>
// import VueAliplayerV2 from 'vue-aliplayer-v2';
export default {
    // components:{ VueAliplayerV2: VueAliplayerV2.Player },
    data(){
        return {
            options: {
                source:'//player.alicdn.com/video/aliyunmedia.mp4'
            },
            source: '//player.alicdn.com/video/aliyunmedia.mp4',
            show: true
        }
    },

    methods:{

        play(){
            this.$refs.VueAliplayerV2.play()
        },

        pause(){
            this.$refs.VueAliplayerV2.pause();
        },

        replay(){
            this.$refs.VueAliplayerV2.replay();
        },

        getCurrentTime(){
            this.$refs.VueAliplayerV2.getCurrentTime();
        }
    }
}
</script>
<style lang="less">
* {
    margin: 0;
    padding: 0;
}
.remove-text{
    text-align: center;
    padding: 20px;
    font-size: 24px;
}
.player-btns{
    width: 100%;
    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>

3.功能与配置

props:{
    options: {  //配置项 (options.source 不支持动态切换,需要动态切换请直接使用source)
        required: false,
        type: [Object],
        default: () => null
    },

    source: {  //播放源(此属性存在则优先于options.source) 支持动态切换,目前只支持同种格式(mp4/flv/m3u8)之间切换。暂不支持直播rtmp流切换。
        required: false,
        type: [Object],
        default: () => null
    },
    
    id:{  //播放器的ID 唯一标识符 不传就是默认的 但是有多个的时候不一定是唯一的
        required: false,
        type: [String],
        default: `player-${Date.parse(new Date())}`
    },

    cssLink:{   //css版本源
        required: false,
        type: [String],
        default: `https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css`
    },
    scriptSrc:{ //js版本源
        required: false,
        type: [String],
        default: `https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js`
    }
}

3.1 配置项 options 属性

可以参考 属性和接口说明

名称类型说明
sourceString视频播放地址url:单独url。默认状态,表示使用vid+playauth。source播放方式优先级最高。source支持多清晰度设置:source:’{“HD”:”address1”,”SD”:”address2”’,详情参见多清晰度播放。
vidString媒体转码服务的媒体Id。
playauthString播放权证,如何得到参见获取playauth。
heightString播放器高度,可形如‘100%’或者‘100px’,chrome浏览器下flash播放器分别不能小于397x297。
widthString播放器宽度,可形如‘100%’或者‘100px’,chrome浏览器下flash播放器分别不能小于397x297。
videoWidthString视频宽度,仅h5支持。详情参见旋转和镜像。
videoHeightString视频高度,仅h5支持。详情参见旋转和镜像。
preloadBoolean播放器自动加载,目前仅h5可用。
coverString播放器默认封面图片,请填写正确的图片url地址。需要autoplay为’false’时,才生效。Flash播放器封面也需要开启允许跨域访问。
isLiveBoolean播放内容是否为直播,直播时会禁止用户拖动进度条。
autoplayBoolean播放器是否自动播放,在移动端autoplay属性会失效。Safari11不会自动开启自动播放如何开启。
rePlayBoolean播放器自动循环播放。
useH5PrismBoolean指定使用H5播放器。
useFlashPrismBoolean指定使用Flash播放器。
playsinlineBooleanH5是否内置播放,有的Android浏览器不起作用。
showBufferBoolean显示播放时缓冲图标,默认true。
skinResUrl说明:皮肤图片,不建议随意修改该字段,如要修改,请参照皮肤定制。
skinLayoutArray Boolean说明:功能组件布局配置,不传该字段使用默认布局。传false隐藏所有功能组件,请参照皮肤定制。
controlBarVisibilityString控制面板的实现,默认为‘hover’。可选的值为:‘click’、‘hover’、‘always’。
showBarTimeString控制栏自动隐藏时间(ms)。
extraInfoString说明:JSON串用于定制性接口参数。
>>1.“fullTitle”:“测试页面”全屏时显示视频标题(仅flash支持)。
>>2. “m3u8BufferLength”:“30”播放m3u8时加载缓存ts文件长度单位(秒)(仅flash支持)。
>>3. “liveStartTime”:“2016/08/17 12:00:00”,直播开始时间,用于提示直播未开始(仅flash支持)。
>>4. “liveOverTime”:“2016/08/17 14:00:00”,直播结束时间,用于提示直播结束(仅flash支持)。
enableSystemMenuBoolean是否允许系统右键菜单显示,默认为false。
formatString指定播放地址格式,只有使用vid的播放方式时支持,可选值为’mp4’、’m3u8’、’flv’、’mp3’,默认为空,仅H5支持。
mediaTypeString指定返回音频还是视频,只有使用vid的播放方式时支持。可选值为’video’和’audio’,默认为’video’,‘audio’主要是针对只包含音频的视频格式,比如音频的mp4,仅H5支持。
qualitySortString指定排序方式,只有使用vid + plauth播放方式时支持。‘desc’表示按倒序排序(即:从大到小排序),‘asc’表示按正序排序(即:从小到大排序),默认值:‘asc’,仅H5支持。
definitionString显示视频清晰度,多个用逗号分隔,比如:’FD,LD’,此值是vid对应流清晰度的一个子集,取值范围:FD(流畅)LD(标清)SD(高清)HD(超清)OD(原画)2K(2K)4K(4K),仅H5支持。
defaultDefinitionString默认视频清晰度,此值是vid对应流的一个清晰度,取值范围:FD(流畅)LD(标清)SD(高清)HD(超清)OD(原画)2K(2K)4K(4K),仅H5支持。
x5_typeString声明启用同层H5播放器,启用时设置的值为‘h5’,详情参见同层播放。
x5_fullscreenBoolean声明视频播放时是否进入到TBS的全屏模式,默认为false。当需要把视频做为背景时,设置为true,详情参见同层播放。
x5_video_positionString声明视频播在界面上的位置,默认为“center”。可选值为:“top”,“center”,详情参见同层播放。
x5_orientationString声明TBS播放器支持的方向,可选值:landscape:横屏,portraint:竖屏,详情参见同层播放。
x5LandscapeAsFullScreenString声明TBS全屏播放是否横屏,默认值为true。
autoPlayDelayNumber延迟播放时间,单位为秒。详情参见延迟播放
autoPlayDelayDisplayTextString延迟播放提示文本,详情参见延迟播放。
languageString国际化,默认为‘zh-cn’。如果未设置,则采用浏览器语言。可选值为‘zh-cn’、‘en-us’或其它值。
languageTextsJSON自定义国际化文本json结构,key的值需要和language属性值对应起来。例子:{jp:{Play:”Play”}},自定义值参见Json结构。
snapshotBooleanflash启用截图功能。
snapshotWatermarkObjectH5设置截图水印。
useHlsPluginForSafariBooleanSafari浏览器可以启用Hls插件播放,Safari 11除外。
enableStashBufferForFlvBooleanH5播放flv时,设置是否启用播放缓存,只在直播下起作用。
stashInitialSizeForFlvNumberH5播放flv时,初始缓存大小,只在直播下起作用。
loadDataTimeoutNumber缓冲多长时间后,提示用户切换低清晰度,默认:20秒。
waitingTimeoutNumber最大缓冲超时时间,超过这个时间会有错误提示,默认:60秒。
liveStartTimeString直播开始时间,直播时移功能使用,格式为:“2018/01/04 12:00:00”。
liveOverTimeString直播结束时间,直播时移功能使用,格式为:“2018/01/04 12:00:00”。
liveTimeShiftUrlString直播可用时移查询地址,详情参见直播时移。
liveShiftSourceStringflv直播地址播放时,hls的流地址,详情参见直播时移。
recreatePlayerFunctionflv直播和hls时移切换是,重新创建播放器方法,详情参见直播时移。
diagnosisButtonVisibleBoolean是否显示检测按钮,默认为true。
disableSeekBoolean禁用进度条的Seek,默认为false,仅Flash支持。
encryptTypeint加密类型,播放点播私有加密视频时,设置值为1,默认值为0。
progressMarkersArray进度条打点内容数组,详情参见进度条打点。
vodRetryint点播失败重试次数,默认3次
liveRetryint直播播放失败重试次数,默认5次

3.2 播放器方法

// 暂停播放
this.$refs.VueAliplayerV2.pause();

可以参考 播放器接口方法

名称参数说明
play-播放视频。
pause-暂停视频。
replay-重播视频。
seektime跳转到某个时刻进行播放,time的单位为秒。
getCurrentTime-获取当前的播放时刻,返回的单位为秒。
getDuration-获取视频总时长,返回的单位为秒,这个需要在视频加载完成以后才可以获取到,可以在play事件后获取。
getVolume-获取当前的音量,返回值为0-1的实数。ios和部分android会失效。
setVolume-设置音量,vol为0-1的实数,ios和部分android会失效。
loadByUrlurl,time直接播放视频url,time为可选值(单位秒)。目前只支持同种格式(mp4/flv/m3u8)之间切换。暂不支持直播rtmp流切换。
replayByVidAndPlayAuthvid:视频id,playauth:播放凭证目前只支持H5播放器。暂不支持不同格式视频间的之间切换。暂不支持直播rtmp流切换。
replayByVidAndAuthInfo仅MPS用户时使用,参数顺序为:vid、accId、accSecret、stsToken、authInfo、domainRegion目前只支持H5播放器。暂不支持不同格式视频间的之间切换。暂不支持直播rtmp流切换。
setPlayerSizew,h设置播放器大小w,h可分别为400px像素或60%百分比。chrome浏览器下flash播放器分别不能小于397x297。
setSpeedspeed手动设置播放的倍速,倍速播放仅H5支持。移动端可能会失效,比如android微信。倍速播放UI默认是开启的。如果自定义过skinLaout属性,需要添加speedButton项到数组里:
>>{name:“speedButton”,align:“tr”,x:10,y:23}
setSanpshotPropertieswidth:宽度,height:高度,rate:截图质量设置截图参数。
requestFullScreen-播放器全屏,仅H5支持。
cancelFullScreen-播放器退出全屏,iOS调用无效,仅H5支持。
getIsFullScreen-获取播放器全屏状态,仅H5支持。
getStatus-获取播放器状态,包含的值:‘init’,‘ready’,‘loading’,‘play’,‘pause’,‘playing’,‘waiting’,‘error’,‘ended’
setLiveTimeRange开始时间,结束时间设置直播的开始结束时间,开启直播时移功能时使用。例子:player.liveShiftSerivce.setLiveTimeRange(“”,‘2018/01/04 20:00:00’)
setRotaterotate 旋转角度参数为旋转角度, 正数为正时针旋转, 负数为逆时针旋转。例如: setRotate(90)。详情参见旋转和镜像。
getRotate-获取旋转角度。详情参见旋转和镜像。
setImageimage:镜像类型,可选值为:horizon,vertical设置镜像,例如: setImage(‘horizon’)。详情参见旋转和镜像。
dispose-播放器销毁
setCovercover封面地址设置封面
setProgressMarkersmarkers打点数据集合设置打点数据
setPreviewTimetime试看时间设置试看时间,单位为秒,详情参见试看
getPreviewTime-获取试看时间
isPreview-是否试看
offev:事件名String,handle,事件回调方法Function通过播放器实例的off方法取消绑定的方法

4.播放器事件

<template>
    <vue-aliplayer-v2  @ready="handleReady" />
</template>
<script>
export default {
    methods:{
        /**
         * 播放器事件回调 
         */
        handleReady(e){
            console.log(`ready`,e);
        }
    }
}
</script>

可以参考 播放器事件

名称说明
ready播放器视频初始化按钮渲染完毕。播放器UI初始设置需要此事件后触发,避免UI被初始化所覆盖。播放器提供的方法需要在此事件发生后才可以调用。
play视频由暂停恢复为播放时触发。
pause视频暂停时触发。
canplay能够开始播放音频/视频时发生,会多次触发,仅H5播放器。
playing播放中,会触发多次。
ended当前视频播放完毕时触发。
liveStreamStop直播流中断时触发。m3u8/flv/rtmp在重试5次未成功后触发。提示上层流中断或需要重新加载视频。PS:m3u8一直自动重试,不需要上层添加重试。
onM3u8Retrym3u8直播流中断后重试事件,每次断流只触发一次。
hideBar控制栏自动隐藏事件。
showBar控制栏自动显示事件。
waiting数据缓冲事件。
timeupdate播放位置发生改变时触发,仅H5播放器。可通过getCurrentTime方法,得到当前播放时间。
snapshoted截图完成事件。
requestFullScreen全屏事件,仅H5支持。
cancelFullScreen取消全屏事件,iOS下不会触发,仅H5支持。
error错误事件。
startSeek开始拖拽,参数返回拖拽点的时间。
completeSeek完成拖拽,参数返回拖拽点的时间。

5. 图片展示

图片1

图片2

6.二次开发 下载项目

git clone https://github.com/langyuxiansheng/vue-aliplayer-v2.git

Project setup

cd vue-aliplayer-v2

npm install

Compiles and hot-reloads for development

npm run dev

Compiles and minifies for production

npm run build

Lints and fixes files

npm run lint

7.缺陷 & 后期计划

2019年12月27日 更新优化局部引用方式

您有功能建议,或者bug反馈请留言.

8.感谢


Customize configuration

See Configuration Reference.

更新日志

v1.2.2 修复指定id情况下,播放器报错"没有为播放器指定容器",目前移除外部指定id的方式,所有的播放器id都由内部生成,不再由外部指定容器(外部指定的意义并不大),其它的说明:更新1.2.1后报错Uncaught TypeError: 没有为播放器指定容器,因为源码中变更了部分代码,以及最大限度的简化代码,组件内部的根容器就只有一个div容器,导致以前外部指定id的时候,容器id与外部的不一致,导致抛出异常了,现在已经紧急修复了,若在使用,请更新到v1.2.2的版本;如果使用了外部指定id的方式请移除外部的id.否则id会出现重复的情况., 感谢"liyoro"的反馈和建议.

v1.2.1 修复直播播放的情况下,播放器已经销毁,而后台还在继续下载资源造成卡顿的bug,修复多个播放器只渲染1个的bug, 感谢"Jonauil"和"guangming95"两位网友的反馈和建议.

v1.2.0 修复播放源(MP4/m3u8)之间切换无法正常播放的bug,增加options配置项动态响应功能,优化部分播放器的逻辑, 感谢"liyoro"网友的反馈和建议.

v1.1.9 修复播放源(修复prop:source类型验证报错), 感谢"hugo2017"和“nullF”网友的反馈.

v1.1.8 修复播放源(增加source属性类型错误),修复获取播放器状态 getStatus()方法报错, 感谢"kongjigu"网友的反馈.

v1.1.7 增加动态切换播放源(增加source属性)功能 感谢"wikimo"和"jieruian"两位网友的反馈建议.

v1.1.6 修复部分已知bug和优化局部的引用方式