uniappx hls如何实现流媒体播放
在uniappx中如何实现HLS流媒体播放?我尝试使用video组件播放m3u8格式的视频流,但无法正常加载。是否需要引入额外的插件或进行特殊配置?官方文档中相关说明较少,希望能提供具体的实现方案或示例代码。另外,在安卓和iOS平台上是否存在兼容性问题需要注意?
2 回复
在uniappx中,使用video组件,设置src为HLS流地址,并添加type="hls"属性即可播放。
在 UniApp X 中,可以通过以下方式实现 HLS 流媒体播放:
1. 使用 video 组件(推荐)
<template>
<view class="container">
<video
id="myVideo"
src="https://example.com/stream.m3u8"
autoplay
controls
@error="onVideoError"
style="width: 100%; height: 400rpx;"
></video>
</view>
</template>
<script>
export default {
setup() {
const onVideoError = (e) => {
console.error('视频播放错误:', e.detail.errMsg)
}
return {
onVideoError
}
}
}
</script>
2. 使用 createVideoContext 控制播放
// 在页面中
import { getCurrentInstance } from '@vue/composition-api'
export default {
setup() {
const instance = getCurrentInstance()
const playVideo = () => {
const videoContext = uni.createVideoContext('myVideo', instance)
videoContext.play()
}
const pauseVideo = () => {
const videoContext = uni.createVideoContext('myVideo', instance)
videoContext.pause()
}
return {
playVideo,
pauseVideo
}
}
}
3. 完整示例
<template>
<view class="container">
<video
id="hlsVideo"
:src="videoUrl"
:autoplay="autoplay"
:controls="true"
:loop="false"
:muted="false"
@play="onPlay"
@pause="onPause"
@ended="onEnded"
@error="onError"
style="width: 100%; height: 400rpx;"
></video>
<view class="controls">
<button @click="play">播放</button>
<button @click="pause">暂停</button>
<button @click="seek">跳转到30秒</button>
</view>
</view>
</template>
<script>
export default {
setup() {
const videoUrl = ref('https://example.com/live/stream.m3u8')
const autoplay = ref(false)
const videoContext = ref(null)
onMounted(() => {
// 获取视频上下文
const instance = getCurrentInstance()
videoContext.value = uni.createVideoContext('hlsVideo', instance)
})
const play = () => {
videoContext.value?.play()
}
const pause = () => {
videoContext.value?.pause()
}
const seek = () => {
videoContext.value?.seek(30)
}
const onPlay = () => {
console.log('视频开始播放')
}
const onPause = () => {
console.log('视频暂停')
}
const onEnded = () => {
console.log('视频播放结束')
}
const onError = (e) => {
console.error('播放错误:', e.detail.errMsg)
}
return {
videoUrl,
autoplay,
play,
pause,
seek,
onPlay,
onPause,
onEnded,
onError
}
}
}
</script>
注意事项:
- HLS 支持:UniApp X 内置的 video 组件支持 HLS 格式,但需要确保目标平台(iOS/Android)支持
- 跨域问题:确保视频源服务器配置了正确的 CORS 策略
- 格式兼容:不同平台对 HLS 的支持程度可能有所不同
- 性能优化:对于长视频,建议使用分段的 m3u8 文件
平台差异:
- iOS:原生支持 HLS
- Android:需要系统版本支持,建议 Android 5.0+
- Web:需要浏览器支持 Media Source Extensions
这种方式简单易用,适合大多数 HLS 流媒体播放场景。

