帮你快速理解、总结文档立即下载

主播开播(HarmonyOS)

最近更新时间:2026-11-11 19:00:01
本文档已由 AI 辅助审校
我的收藏
TUILiveKit 的主播开播能力基于 PusherView,为直播场景提供开箱即用的全功能界面,涵盖开播前预览、视频推流、直播互动与下播结算,可快速集成到您的 HarmonyOS 应用中。

功能概览

开播前预览:支持摄像头预览、直播标题与封面设置、美颜与音效调试、倒计时开播。
视频直播开播:组件内部完成创建直播间与推流,直播中可查看直播时长、在线观众、网络与设备状态。
直播互动与管理:支持弹幕、礼物、观众连麦等互动,并提供在线用户列表与直播间管理能力。
主播开播前预览
主播开播
主播和观众连麦






组件说明

PusherView 是 ArkUI @Component struct,统一从 'tuilivekit' 导入,是主播开播的唯一入口。组件内部按 开播前预览 → 直播中 → 下播结算 三个阶段切换界面,并自行完成摄像头预览、创建直播间、推流、连麦、弹幕礼物与下播清理。

快速接入

步骤1:开通服务

参考 开通服务 文档开通体验版或大规模直播版套餐。

步骤2:代码集成

参考 准备工作 接入 TUILiveKit。
注意:
创建 PusherView 之前,请确保已完成登录,否则开播会失败。
组件 HAR 自身不声明权限,宿主 entry/src/main/module.json5 需声明 ohos.permission.INTERNET、ohos.permission.GET_NETWORK_INFO、ohos.permission.CAMERA、ohos.permission.MICROPHONE;组件会在运行时通过 requestPermissionsFromUser 动态申请相机与麦克风权限。
组件通过 applicationStateChange 监听前后台切换,无需在 module.json5 中额外声明后台模式。

步骤3:接入 PusherView 开播

在您的主播开播页中创建 PusherView:
Kotlin


import { PusherView } from 'tuilivekit'

@Entry
@Component
struct PusherPage {
// 1. 传入直播间 ID
liveID: string = ''
onBack?: () => void

build() {
// 2. 加载 PusherView,组件自带开播前预览、直播中与下播结算界面
PusherView({
liveID: this.liveID,
// 3. 设置退出回调:关闭预览页或退出下播结算页时触发
onExit: () => this.onBack?.(),
})
}
}
说明:
liveID 需非空且 UTF-8 编码后不超过 48 字节;可由您的业务服务端生成,也可按自定义规则拼接(Demo 使用 live_${userID})。
开播由组件在用户点击开始直播后自行调用 AtomicPusher.startPush 完成;下播时先进入结算页,用户点击退出后才回调 onExit。
宿主处理原生返回键时,需通过 context.eventHub.emit('tuilivekit.pusher.hostBack', liveID) 把事件转发给组件,由组件决定关闭弹层或进入结算页;aboutToDisappear() 本身不会回调 onExit。
组件会在退到后台时停止预览、回到前台后恢复,并保持直播期间屏幕常亮,宿主无需手动管理采集生命周期。

步骤4:跳转到主播开播页面

在您需要进入主播开播页时,可通过 NavPathStack 跳转并把 liveID 作为路由参数传入;路由名由您的宿主工程自行定义:
Kotlin
this.navigationStack.pushPath({ name: 'pusher', param: liveID })
在 Navigation 的 navDestination 构造器中按路由名创建承载 PusherView 的页面,并通过 NavDestination 的 onBackPressed 转发原生返回事件:
import { common } from '@kit.AbilityKit'

@Builder
destination(name: string, liveID: string) {
NavDestination() {
if (name === 'pusher') {
PusherPage({ liveID: liveID, onBack: () => this.navigationStack.pop() })
}
}
.onBackPressed(() => {
if (name !== 'pusher') {
return false
}
const context = getContext(this) as common.UIAbilityContext
context.eventHub.emit('tuilivekit.pusher.hostBack', liveID)
return true
})
}

组件 API 说明

PusherView

PusherView 是 ArkUI 组件,是主播开播页的唯一对外组件。
属性
说明
liveID: string
直播间 ID,非空且 UTF-8 编码后不超过 48 字节;组件据此创建 LiveSeatStore 与连麦 Store。
onExit?: () => void
退出回调。用户在开播前预览页点击关闭,或在下播结算页点击退出时触发;组件会先完成会话清理。
audioEffect / safeBottom
框架注入参数(@Provide / @StorageProp),由组件内部管理,宿主无需手动传值。

开播流程与状态

组件内部按三个阶段切换界面,宿主无需也不应自行调用开播 / 下播方法:
阶段
说明
开播前预览
摄像头预览、标题与封面设置、美颜与音效调试;点击开播进入倒计时。
直播中
组件调用 AtomicPusher.startPush 开始推流,并展示弹幕、礼物、连麦、在线观众等互动 UI。
下播结算
下播后展示本场直播统计,用户点击退出时触发 onExit。

下一步

恭喜您,现在您已经成功集成了主播开播。接下来,您可以实现观众观看、直播列表、礼物系统等功能,可参考下表:
功能
描述
集成指引
观众观看
使用 PlayerView 观看单个直播间,包含拉流、进房与互动能力。
直播列表
以信息流形式展示多个直播间,支持上下滑动切换与分页加载。

常见问题

开播后无画面?

请检查宿主 entry/src/main/module.json5 中 ohos.permission.CAMERA、ohos.permission.MICROPHONE 的 requestPermissions 声明,以及用户是否已授权;组件会在运行时通过 requestPermissionsFromUser 动态申请。

点击开播按钮提示「未登录」?

参考 准备工作 完成 LoginStore.shared().login 登录接入,并在创建 PusherView 之前登录成功。

需要自己调用创建直播间或开播接口吗?

不需要。宿主只需传入 liveID,组件会在用户点击开播后自行调用 AtomicPusher.startPush 并接管直播间;请勿重复创建 LiveInfo 或调用 startLive / createRoom。