Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
veplayer-mp-douyin
Advanced tools
小程序播放器抖音原生版本
只需三步:安装、构建 npm、代码引入、即可完成小程序播放器组件的使用。
# npm
npm i veplayer-mp-douyin
# yarn
yarn add veplayer-mp-douyin
请优先了解抖音开放平台官网对于 npm 功能 的介绍
导入项目,并在开发工具右侧【NPM功能: 依赖管理】中添加npm包
参考自定义组件的使用方式
{
"usingComponents": {
"ve-video": "ext://veplayer-mp-douyin/veplayer"
}
}
<view>
<!-- 以下是对小程序播放器组件的引用 -->
<ve-video
id="videoContainer"
mode="portrait"
src="http://xxxx.mp4"
muted
loop
></ve-video>
</view>
<view>
<!-- 以下是对一个播放器组件的引用 -->
<ve-video
id='xgVideo'
className='xg-video'
mode='small'
playDomain='https://vod.volcengineapi.com'
playAuthToken='*****************'
></ve-video>
</view>
playDomain
是调用火山引擎视频点播OpenAPI的接口地址,业务方如果做了该接口的代理,可以替换成业务方的地址。playAuthToken
是获取视频播放信息(包括播放地址,传入此项时不需要传入src)的临时凭证,由业务方服务端通过调用火山服务端SDK本地生成,具体生成参考火山引擎视频点播文档
小程序播放器对video原生组件进行了封装,因此支持大部分的video属性配置。以下说明列出了新增属性及差异化属性,列出的部分中以 show-
开头的开关即影响原生组件又影响自定义UI,不在列表中的只影响原生组件:
Property | Type | Default | Required | Description |
---|---|---|---|---|
mode | 'portrait' | 'landscape' | 'landscape' | No | 播放器支持竖屏(portrait)及横屏(landscape)两种播放UI模式。横屏模式偏向于普通的PC视频播放器UI,竖屏视频展示类似抖音等短视频播放模式。 |
src | string | No | ||
controls | 'custom' | 'native'|'false' | 'custom' | No | custom: 自定义UI,native: 原生组件UI,false: 完全关闭播放UI控件(包括自定义UI及原生组件UI),播放UI控件指loading状态、播控按钮、进度条、时间显示等 |
show-fullscreen-btn | boolean | No | 当开始/继续播放时触发play事件 | |
duration | number | No | 根据官方文档说明,duration属性只是控制显示的时长,不会控制实际播放的时长。因此该属性不设置给原始video组件,只提供给自定义UI使用 | |
playDomain | string | No | 调用火山引擎视频点播OpenAPI的接口地址,业务方如果做了该接口的代理,可以替换成业务方的地址 | |
playAuthToken | string | No | 获取视频播放信息(包括播放地址,传入此项时不需要传入src)的临时凭证,由业务方服务端通过调用火山服务端SDK本地生成,具体生成方法参考火山引擎视频点播文档 | |
bindplay | eventhandle | No | 当开始/继续播放时触发play事件 | |
bindpause | eventhandle | No | 当暂停播放时触发 pause 事件 | |
bindended | eventhandle | No | 当播放到末尾时触发 ended 事件 | |
bindtimeupdate | eventhandle | No | 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次 | |
bindfullscreenchange | eventhandle | No | 视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal | |
bindwaiting | eventhandle | No | 视频出现缓冲时触发 | |
binderror | eventhandle | No | 视频播放出错时触发 | |
bindprogress | eventhandle | No | 加载进度变化时触发,只支持一段加载。event.detail = {buffered},百分比 | |
bindloadedmetadata | eventhandle | No | 视频元数据加载完成时触发。event.detail = {width, height, duration} | |
bindplaybackratechange | eventhandle | No | 视频倍速改变完成时触发。返回改变后的倍速值。event.detail={playbackRate}。 | |
bindenterbackground | eventhandle | No | 进入小窗播放时触发 | |
bindclosebackground | eventhandle | No | 关闭小窗播放时触发 | |
bindleavebackground | eventhandle | No | 离开小窗进入 app 事件时触发 | |
bindseeking | eventhandle | No | 组件内部代理劫持VideoContext,VideoContext.seek 调用后会立即发送该事件,该事件非video自带事件,只支持 controls="custom" 时才对外发送 | |
bindseekcomplete | eventhandle | No | seek 完成时触发 (position iOS 单位 s, Android 单位 ms) |
PS. 原生组件支持的属性配置请参考官方文档:https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/component/media-component/video
小程序播放器对VideoContext进行了封装,提供同原生接口一致的API。原生接口更多细节可阅读官网
let player = null
// 异步获取
const component = this.selectComponent("#videoContainer", (component) => {
player = component.getContext()
});
// 同步获取,需要保证是在page或者component的ready事件之后才能正常调用
// player = this.selectComponent("#videoContainer").getContext();
// 原生接口
player.play()
player.pause()
player.stop()
player.seek(10)
player.requestFullScreen()
player.exitFullScreen()
player.setWaterMark({ color: "#FFFF11" })
player.setMediaVolume({ value: 1})
player.getMediaVolume(options)
player.playbackRate(1)
player.requestFullScreen({ direction: 90 })
player.exitFullScreen()
小程序播放器对外支持两种方式的事件订阅形式:组件属性配置事件订阅
或者通过组件对象进行事件订阅
,请选择其中一种进行订阅,尽量不要两者混用。这两种方式在组件实例被从页面节点树移除(lifetimes->detached)时进行事件解绑,不需要业务单独关注事件泄漏问题
小程序播放器提供了接口可以获取player context,并可以对player添加事件订阅。具体方式如下:
let player = null
const component = this.selectComponent("#videoContainer", (component) => {
player = component.getContext()
// 事件订阅
player.on('error', (e) => {
console.log('event error:', e)
})
player.on('timeupdate', (e) => {
const { currentTime, duration } = e.detail;
console.log('event error:', currentTime, duration)
})
...
});
事件列表:
EventName | CustomEvent | Description |
---|---|---|
play | No | 参见属性 bindplay 描述 |
pause | No | 参见属性 bindpause 描述 |
ended | No | 参见属性 bindended 描述 |
timeupdate | No | 参见属性 bindtimeupdate 描述 |
fullscreenchange | No | 参见属性 bindfullscreenchange 描述 |
waiting | No | 参见属性 bindwaiting 描述 |
error | No | 参见属性 binderror 描述 |
progress | No | 参见属性 bindprogress 描述 |
loadedmetadata | No | 参见属性 bindloadedmetadata 描述 |
playbackratechange | No | 参见属性 bindplaybackratechange 描述 |
enterbackground | No | 参见属性 bindenterbackground 描述 |
closebackground | No | 参见属性 bindclosebackground 描述 |
leavebackground | No | 参见属性 bindleavebackground 描述 |
seeking | Yes | 参见属性 bindseeking 描述 |
seekcomplete | No | 参见属性 bindseekcomplete 描述 |
FAQs
> 小程序播放器抖音原生版本
The npm package veplayer-mp-douyin receives a total of 59 weekly downloads. As such, veplayer-mp-douyin popularity was classified as not popular.
We found that veplayer-mp-douyin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.