发布和订阅
本部分介绍如何实现在房间发布、订阅媒体流。
- 发布是指将创建好的音视频 Track 对应的音视频数据推送到七牛实时音视频服务的操作,执行发布操作后,远端用户可以选择性的进行订阅观看。
- 订阅是指向七牛实时音视频服务请求拉取远端发布的音视频数据的操作。订阅后,本地即可实时的接收远端发布的音视频数据。
- 有别于 CDN 转推,发布和订阅的音视频数据将通过 UDP 协议在房间内流转,若您想要实现 RTMP 直播流分发的场景,请在音视频 Track 发布后,参考使用指南的 CDN 转推进行实现。
发布 Track
发布 Track 前,需要对 Track 进行配置和创建,详情请见音视频采集,创建好 Track 后即可将该 Track 通过 QNRTCClient.Publish 向房间内进行发布。
请确保在发布前已经成功加入房间,否则将发布失败。
private publishCallback: QNPublishResultCallback = (onPublished, errorCode, errorMessage) => {
if (onPublished) {
console.log("publish callback success")
} else {
console.error("publish callback failed: ", errorCode, errorMessage)
}
}
let ret: number = this.client.Publish(this.localTracks, this.publishCallback)
其中,QNPublishResultCallback 回调了发布操作的结果通知,其接口定义如下:
export type QNPublishResultCallback = (onPublished: boolean, errorCode: number, errorMessage: string) => void
发布 Track 失败的错误码可参考发布 Track 相关错误码。
发布 Track 成功后,远端用户会收到 QNClientEventListener.OnUserPublished 回调:
OnUserPublished: (remoteUserId: string, remoteTrackList: QNRemoteTrack[]) => {
console.log("OnUserPublished")
}
取消发布 Track
调用 QNRTCClient.Unpublish 取消发布本地媒体流。
let ret: number = this.client.UnPublish(this.localTracks)
取消发布成功后,远端用户会收到 QNClientEventListener.OnUserUnpublished 回调:
OnUserUnpublished: (remoteUserId: string, remoteTrackList: QNRemoteTrack[]) => {
console.log("OnUserUnPublished")
}
订阅远端 Track
自动订阅
支持默认自动订阅的功能,用户可以通过设置 QNRTCClient.SetAutoSubscribe 进行对自动订阅功能的开启与关闭。
let ret: number = this.client.SetAutoSubscribe(true)
手动订阅
在自动订阅功能关闭时,用户可以通过调用 QNRTCClient.Subscribe 接口订阅远端 Tracks。
let ret: number = this.client.Subscribe(remoteTracks)
无论是自动订阅还是手动订阅,当成功订阅远端用户媒体流后,都会触发 QNClientEventListener.OnSubscribed,回调如下:
OnSubscribed: (userid: string, remoteAudioTrackList: QNRemoteAudioTrack[],
remoteVideoTrackList: QNRemoteVideoTrack[]) => {
console.log("OnSubscribed")
}
成功订阅远端视频后,即可通过 QNRemoteVideoTrack.Play 接口传入预先创建好的 QNComponentController 实例进行视频画面的渲染。
示例代码如下:
let ret: number = remoteVideoTrack.Play(componentController)
取消订阅远端 Track
调用 QNRTCClient.Unsubscribe 接口取消订阅远端 Track。
let ret: number = this.client.UnSubscribe(remoteTracks)
示例代码
发布订阅场景的示例代码可参考 API-Examples-HarmonyOS
文档反馈
(如有产品使用问题,请 提交工单)