uniapp如何实现支持m3u8和mp4格式的播放器插件
在uniapp中如何实现一个同时支持m3u8和mp4格式的视频播放器插件?需要兼容iOS和Android平台,最好能支持自定义UI和控制条。目前尝试过官方video组件但对m3u8格式兼容性不太好,有没有成熟的插件方案或实现思路?求推荐具体的实现方法和注意事项。
2 回复
使用uniapp的video组件即可支持mp4和m3u8播放。设置src为视频链接,添加controls属性显示控制条。示例代码:
<video :src="videoUrl" controls></video>
注意:m3u8在安卓端需配置白名单,iOS端需服务器支持HTTPS。
在uni-app中实现支持M3U8和MP4格式的播放器,推荐使用以下方案:
方案一:使用官方video组件 + 条件编译
<template>
<view>
<!-- H5平台 -->
<!-- #ifdef H5 -->
<video
:src="videoUrl"
controls
style="width: 100%;"
></video>
<!-- #endif -->
<!-- App平台 -->
<!-- #ifdef APP-PLUS -->
<video
:src="videoUrl"
controls
style="width: 100%;"
@play="onPlay"
@pause="onPause"
></video>
<!-- #endif -->
</view>
</template>
<script>
export default {
data() {
return {
videoUrl: '' // 根据格式设置URL
}
},
methods: {
setVideoSource(url) {
this.videoUrl = url
},
onPlay() {
console.log('视频开始播放')
},
onPause() {
console.log('视频暂停')
}
}
}
</script>
方案二:使用第三方插件(推荐)
安装uni-app视频播放器插件:
npm install @dcloudio/uni-ui
使用示例:
<template>
<view>
<uni-video
:src="videoUrl"
:autoplay="false"
:controls="true"
:loop="false"
:muted="false"
:poster="posterUrl"
@play="onPlay"
@pause="onPause"
@ended="onEnded"
/>
</view>
</template>
<script>
import uniVideo from '@dcloudio/uni-ui/lib/uni-video/uni-video'
export default {
components: { uniVideo },
data() {
return {
videoUrl: '',
posterUrl: ''
}
},
methods: {
// 设置视频源,自动识别格式
setVideoSource(url, poster = '') {
this.videoUrl = url
this.posterUrl = poster
},
onPlay() {
console.log('视频播放')
},
onPause() {
console.log('视频暂停')
},
onEnded() {
console.log('视频播放结束')
}
}
}
</script>
方案三:自定义播放器(高级)
对于需要更多自定义功能的场景,可以封装原生播放器:
// utils/videoPlayer.js
class VideoPlayer {
constructor(options = {}) {
this.options = options
}
// 播放视频
play(url) {
if (url.endsWith('.m3u8')) {
this.playM3U8(url)
} else if (url.endsWith('.mp4')) {
this.playMP4(url)
} else {
console.error('不支持的视频格式')
}
}
playM3U8(url) {
// HLS流媒体处理
// #ifdef H5
if (Hls.isSupported()) {
const hls = new Hls()
hls.loadSource(url)
hls.attachMedia(videoElement)
}
// #endif
// #ifdef APP-PLUS
// App端原生支持m3u8
this.nativePlay(url)
// #endif
}
playMP4(url) {
// MP4直接播放
this.nativePlay(url)
}
nativePlay(url) {
// 调用原生播放器
plus.video.createVideoPlayer('videoPlayer', {
src: url,
top: '0px',
left: '0px',
width: '100%',
height: '300px',
position: 'static'
})
}
}
注意事项
-
平台兼容性:
- H5平台:MP4原生支持,M3U8需要HLS.js库
- App平台:两种格式都原生支持
- 小程序:支持有限,需使用各平台专用API
-
性能优化:
- 大视频文件建议使用流媒体
- 合理设置视频尺寸和清晰度
- 使用CDN加速视频加载
-
用户体验:
- 添加加载状态
- 错误处理
- 网络状态检测
推荐使用方案二,因为它提供了更好的跨平台兼容性和更丰富的功能。

