弹幕消息组件(
BarrageStreamView
)负责在直播间屏幕上显示弹幕消息,从而提升直播的互动性和趣味性。该组件可以渲染用户通过消息发送组件发送的文本和表情消息。效果展示

说明:
为尊重表情设计版权,TUILiveKit 工程中不包含大表情元素切图,正式上线商用前请您替换为自己设计或拥有版权的其他表情包。下图所示默认的小黄脸表情包版权归腾讯云所有,可有偿授权使用,如果需要获得授权可 提交工单 联系我们。


组件接入
组件使用
弹幕组件需要直播间信息,因此必须在观众成功进入直播间或主播创建直播间后才能使用。
初始化组件
在需要展示弹幕的位置,创建并初始化
BarrageStreamView
来展示弹幕消息。ownerId
用于区分房主和观众的显示效果。let barrageDisplayView = BarrageStreamView(roomId: roomId)// ...此处将barrageInputView添加到您的父视图上并调整布局barrageDisplayView.setOwnerId(ownerId)
插入本地弹幕消息
BarrageStreamView
提供了 insertBarrages
接口,用于插入自定义消息(如礼物消息、直播间公告等)。您可以通过自定义样式实现不同的展示效果。说明:
此操作必须在进房成功的回调中执行。
import RTCCommon// 示例1:在弹幕区插入一条礼物消息let barrage = TUIBarrage()barrage.content = "gift"barrage.user.userId = "sender.userId"barrage.user.userName = "sender.userName"barrage.user.avatarUrl = "sender.avatarUrl"barrage.user.level = "sender.level"let giftCount = 1barrage.extInfo["TYPE"] = AnyCodable("GIFTMESSAGE")barrage.extInfo["gift_name"] = AnyCodable("gift.giftName")barrage.extInfo["gift_count"] = AnyCodable(giftCount)barrage.extInfo["gift_icon_url"] = AnyCodable("gift.imageUrl")barrage.extInfo["gift_receiver_username"] = AnyCodable("receiver.userName")barrageDisplayView.insertBarrages([barrage])
自定义弹幕消息样式
弹幕消息样式默认有两种:普通弹幕(样式为 0)和自定义消息样式。如果您需要更多样式,可实现
BarrageStreamView
的代理方法 BarrageStreamViewDelegate
。class MyViewController: BarrageStreamViewDelegate {let barrageDisplayView = BarrageStreamView(roomId: roomId)override func viewDidLoad() {super.viewDidLoad()barrageDisplayView.delegate = self // 设置BarrageStreamView的代理// ...}func onBarrageClicked(user: TUIUserInfo) {// 此处您可添加弹幕消息点击事件处理逻辑,user为消息发送者信息}func barrageDisplayView(_ barrageDisplayView: BarrageStreamView, createCustomCell barrage: TUIBarrage) -> UIView? {// 是否需要使用自定义UI,如不需要返回 nil 即可guard let type = barrage.extInfo["TYPE"], type.value as? String == "GIFTMESSAGE" else {return nil}// 返回自定义消息样式UI(礼物回显)return CustomBarrageView(barrage: barrage)}}// 自定义UIclass CustomBarrageView: UIView {let barrage: TUIBarrageinit(barrage: TUIBarrage) {self.barrage = barragesuper.init(frame: .zero)}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}// ...此处布局与绘制您自己的UI}