Public 成员函数 | |
---|---|
virtual | ~IChannel () |
virtual int | release ()=0 |
virtual int | setChannelEventHandler (IChannelEventHandler *channelEh)=0 |
virtual int | joinChannel (const char *token, const char *info, uid_t uid, const ChannelMediaOptions &options)=0 |
virtual int | leaveChannel ()=0 |
virtual int | publish ()=0 |
virtual int | unpublish ()=0 |
virtual const char * | channelId ()=0 |
virtual int | getCallId (ar::util::AString &callId)=0 |
virtual int | renewToken (const char *token)=0 |
virtual int | setEncryptionSecret (const char *secret)=0 |
virtual int | setEncryptionMode (const char *encryptionMode)=0 |
virtual int | registerPacketObserver (IPacketObserver *observer)=0 |
virtual int | registerMediaMetadataObserver (IMetadataObserver *observer, IMetadataObserver::METADATA_TYPE type)=0 |
virtual int | setClientRole (CLIENT_ROLE_TYPE role)=0 |
virtual int | setRemoteUserPriority (uid_t uid, PRIORITY_TYPE userPriority)=0 |
virtual int | setRemoteVoicePosition (uid_t uid, double pan, double gain)=0 |
virtual int | setRemoteRenderMode (uid_t userId, RENDER_MODE_TYPE renderMode, VIDEO_MIRROR_MODE_TYPE mirrorMode)=0 |
virtual int | setDefaultMuteAllRemoteAudioStreams (bool mute)=0 |
virtual int | setDefaultMuteAllRemoteVideoStreams (bool mute)=0 |
virtual int | muteAllRemoteAudioStreams (bool mute)=0 |
virtual int | adjustUserPlaybackSignalVolume (uid_t userId, int volume)=0 |
virtual int | muteRemoteAudioStream (uid_t userId, bool mute)=0 |
virtual int | muteAllRemoteVideoStreams (bool mute)=0 |
virtual int | muteRemoteVideoStream (uid_t userId, bool mute)=0 |
virtual int | setRemoteVideoStreamType (uid_t userId, REMOTE_VIDEO_STREAM_TYPE streamType)=0 |
virtual int | setRemoteDefaultVideoStreamType (REMOTE_VIDEO_STREAM_TYPE streamType)=0 |
virtual int | createDataStream (int *streamId, bool reliable, bool ordered)=0 |
virtual int | sendStreamMessage (int streamId, const char *data, size_t length)=0 |
virtual int | addPublishStreamUrl (const char *url, bool transcodingEnabled)=0 |
virtual int | removePublishStreamUrl (const char *url)=0 |
virtual int | setLiveTranscoding (const LiveTranscoding &transcoding)=0 |
virtual int | addInjectStreamUrl (const char *url, const InjectStreamConfig &config)=0 |
virtual int | removeInjectStreamUrl (const char *url)=0 |
virtual int | startChannelMediaRelay (const ChannelMediaRelayConfiguration &configuration)=0 |
virtual int | updateChannelMediaRelay (const ChannelMediaRelayConfiguration &configuration)=0 |
virtual int | stopChannelMediaRelay ()=0 |
virtual CONNECTION_STATE_TYPE | getConnectionState ()=0 |
详细描述
IChannel 类
构造及析构函数说明
~IChannel()
virtual ar::rtc::IChannel::~IChannel()
成员函数说明
release()
virtual int ar::rtc::IChannel::release()
销毁 IChannel 对象。
返回值
-
0: 方法调用成功
-
< 0: 方法调用失败
- ERR_NOT_INITIALIZED (7): SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 IChannel 对象并完成初始化。
setChannelEventHandler()
virtual int ar::rtc::IChannel::setChannelEventHandler(IChannelEventHandler * channelEh)
IChannel 对象的事件句柄。
设置你可以通过设置的事件句柄监听本 IChannel 对象对应频道的事件,并接收频道中用户视频信息等。
参数
参数 | 描述 |
---|---|
channelEh | IChannel 对象的事件句柄。详见 IChannelEventHandler |
返回值
-
0: 方法调用成功
-
< 0: 方法调用失败
setChannelEventHandler()
virtual int ar::rtc::IChannel::setChannelEventHandler(IChannelEventHandler * channelEh)
IChannel 对象的事件句柄。
设置你可以通过设置的事件句柄监听本 IChannel 对象对应频道的事件,并接收频道中用户视频信息等。
参数
参数 | 描述 |
---|---|
channelEh | IChannel 对象的事件句柄。详见 IChannelEventHandler |
返回值
-
0: 方法调用成功
-
< 0: 方法调用失败
joinChannel()
virtual int ar::rtc::IChannel::joinChannel( const char* token,
const char* info,
uid_t uid,
const ChannelMediaOptions& options )
通过 UID 加入频道
该方法与 IRtcEngine 类下的 joinChannel 方法有以下区别:
IChannel::joinChannel | IRtcEngine::joinChannel |
---|---|
无 channelId 参数。因为创建 IChannel 对象时已指定了 channelId 。 | 需要填入可以标识频道的 channelId 。 |
加了 options 参数,可在加入频道前通过该参数设置是否订阅该频道的音视频流。 | 无 options 参数。加入频道即默认订阅频道内的音视频流。 |
通过创建多个 IChannel 对象,并调用相应对象的 IChannel joinChannel "joinChannel" 方法,实现同时加入多个频道。 | 只允许加入一个频道。 |
通过该方法加入频道后,SDK 默认不发布本地音视频流到本频道,用户需要调用 IChannel publish "publish" 方法进行发布。 | 通过该方法加入频道后,SDK 默认发布音视频流发布到本频道。 |
参数
参数 | 描述 |
---|---|
token | 在 App 服务器端生成的用于鉴权的 Token: 将值设为你的服务端生成的正式 Token,详见 获取正式 Token. |
info | (非必选项)开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。 |
uid | (非必选项) 用户ID,长度在64字节以内的字符串,并保证频道内唯一性。如果不填或设置为nil,SDK 会自动分配一个,并在 onJoinChannelSuccess 回调方法中返回,App 层必须记住该返回值并维护,SDK 不对该返回值进行维护。 以下为支持的字符集范围(共 62 个字符): |
options | 频道媒体设置选项: ChannelMediaOptions。 |
返回值
-
0(ERR_OK): 方法调用成功。
-
< 0: 方法调用失败。
-
-2(ERR_INALID_ARGUMENT): 参数无效。
-
-3(ERR_NOT_READY): SDK 初始化失败,请尝试重新初始化 SDK。
-
-5(ERR_REFUSED): 调用被拒绝。可能有如下两个原因:
注意事项:
- 该方法不支持相同的用户重复加入同一个频道。
- 我们建议不同频道中使用不同的 UID。
- 如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的 UID 是不同的。
- 请确保用于生成 Token 的 App ID 和创建 IRtcEngine 对象时用的 App ID 一致。
leaveChannel()
virtual int ar::rtc::IChannel::leaveChannel()
离开频道
离开频道,即挂断或退出通话
当调用 joinChannel 方法后,必须调用 leaveChannel 结束通话,否则无法开始下一次通话。 不管当前是否在通话中,都可以调用 leaveChannel,没有副作用。该方法会把会话相关的所有资源释放掉。 该方法是异步操作,调用返回时并没有真正退出频道。在真正退出频道后,SDK 会触发 onLeaveChannel 回调。 成功调用该方法离开频道后,本地会触发 onLeaveChannel 回调;通信场景下的用户和直播场景下的主播离开频道后,远端会触发 onUserOffline 回调。
返回值
-
0(ERR_OK): 方法调用成功。
-
< 0: 方法调用失败。
-
-1(ERR_FAILED): 一般性的错误(未明确归类)。
-
-2(ERR_INALID_ARGUMENT): 参数无效。
-
-7(ERR_NOT_INITIALIZED): SDK 尚未初始化。
注意事项:
- 如果你调用了 leaveChannel 后立即调用 release,SDK 将无法触发 onLeaveChannel 回调。
- 如果你在旁路推流时调用 leaveChannel 方法, SDK 将自动调用 removePublishStreamUrl 方法。
publish()
virtual int ar::rtc::IChannel::publish()
将本地音视频流发布到本频道
该方法的调用需满足以下要求,否则 SDK 会返回 ERR_REFUSED (5) :
- 该方法仅支持将音视频流发布到当前 IChannel 类所对应的频道。
- 直播场景下,该方法仅适用于角色为主播的用户。你可以调用该 IChannel 类下的 setClientRole 方法设置用户角色。
- SDK 只支持用户同一时间在一个频道发布一路音视频流。详情请参考高级功能《多频道管理》。
返回值
-
0: 方法调用成功
-
< 0: 方法调用失败
-
ERR_REFUSED (5): 调用被拒绝
unpublish()
virtual int ar::rtc::IChannel::unpublish()
停止将本地音视频流发布到本频道。
请确保你想要 unpublish 音视频流的频道 channelId,与当前正在 IChannel publish "publish" 音视频流的频道 channelId 一致,否则 SDK 会返回 ERR_REFUSED (5)
返回值
-
0: 方法调用成功
-
< 0: 方法调用失败
-
ERR_REFUSED (5): 调用被拒绝
channelId()
virtual const char* ar::rtc::IChannel::channelId()
获取当前频道的频道名。
返回值
-
方法调用成功,返回 channelId,即当前频道的频道名。
-
方法调用失败,返回空字符串 ""。
getCallId()
virtual int ar::rtc::IChannel::getCallId( ar::util::AString & callId)
获取当前通话 ID。
客户端在每次 joinChannel 后会生成一个对应的 callId,标识该客户端的此次通话。 有些方法如 rate 、 [complain]((ar_rtc_win_engine#complain) 需要在通话结束后调用,向 SDK 提交反馈,这些方法必须指定 CallId 参数。使用这些反馈方法,需要在通话过程中调用 getCallId 方法获取 CallId,在通话结束后在反馈方法中作为参数传入。
参数
参数 | 描述 |
---|---|
callId | 当前的通话 ID。 |
返回值
-
0: 方法调用成功,返回当前通话 ID
-
< 0: 方法调用失败
renewToken()
virtual int ar::rtc::IChannel::renewToken( const char * token)
更新 Token。
该方法用于更新 Token。如果启用了 Token 机制,过一段时间后使用的 Token 会失效。当:
- 发生 onTokenPrivilegeWillExpire 回调时,或发生
- onConnectionStateChanged 回调报告 CONNECTION_CHANGED_TOKEN_EXPIRED(9) 时。
App 应重新获取 Token,然后调用该方法更新 Token,否则 SDK 无法和服务器建立连接。
参数
参数 | 描述 |
---|---|
token | 新的 Token。 |
返回值
-
0(ERR_OK): 方法调用成功。
-
< 0: 方法调用失败。
-
-1(ERR_FAILED): 一般性的错误(未明确归类)。
-
-2(ERR_INALID_ARGUMENT): 参数无效。
-
-7(ERR_NOT_INITIALIZED): SDK 尚未初始化。
-
setEncryptionSecret
virtual int setEncryptionSecret(const char* secret) = 0;
启用内置加密,并设置数据加密密码
在加入频道之前,App 需调用 setEncryptionSecret 方法指定 secret 来启用内置的加密功能,同一频道内的所有用户应设置相同的 secret。当用户离开频道时,该频道的 secret 会自动清除。如果未指定 secret 或将 secret 设置为空,则无法激活加密功能。
参数
| 参数 | 描述 | | ----------- | ------------------------------------------------------------ | | secret | 加密密码 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 请不要在旁路推流时调用此方法。
- 为保证最佳传输效果,请确保加密后的数据大小不超过原始数据大小 + 16 字节。16 字节是 AES 通用加密模式下最大填充块大小。。
setEncryptionMode
virtual int setEncryptionMode(const char* encryptionMode) = 0;
启用内置的加密方案
AR Video SDK 支持内置加密方案,默认支持 AES-128-XTS。如需采用其他加密方案,可以调用本方法。同一频道内的所有用户必须设置相同的加密方式和 secret 才能进行通话。关于这几种加密方式的区别,请参考 AES 加密算法的相关资料。
参数
参数 | 描述 |
---|---|
encryptionMode | 加密模式: |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 在调用本方法前,请先调用 setEncryptionSecret 启用内置加密功能。
registerPacketObserver
virtual int registerPacketObserver(IPacketObserver* observer) = 0;
注册数据包观测器
该方法注册数据包观测器 (Packet Observer)。在 AR SDK 发送/接收(语音、视频)网络包时,会回调 IPacketObserver 定义的接口,App 可用此接口对数据做处理,例如加解密。
参数
参数 | 描述 |
---|---|
observer | IPacketObserver 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 处理后发送到网络的包大小不应超过 1200 字节,否则有可能发送失败。
- 若需调用此方法,需确保接收端和发送端都调用此方法,否则会出现未定义行为(例如音频无声或视频黑屏)。
- 若在直播场景下使用 CDN 推流、录制或储存,AR 不建议调用此方法。
registerMediaMetadataObserver
virtual int registerMediaMetadataObserver(IMetadataObserver *observer, IMetadataObserver::METADATA_TYPE type) = 0;
注册媒体 metadata 观测器用于接收或发送 metadata
参数
参数 | 描述 |
---|---|
observer | 指向已注册的 metadata 观测器的指针。详见: IMetadataObserver 。 |
type | 用户希望在观测器中使用的 METADATA 类型 。目前仅支持 VIDEO_METADATA 。详见: METADATA_TYPE 。 |
返回值
- 0:方法调用成功;
- <0:方法调用失败。
setClientRole
virtual int setClientRole(AR::CLIENT_ROLE_TYPE role);
设置直播场景下的用户角色
在加入频道前,用户需要通过本方法设置观众(默认)或主播。在加入频道后,用户可以通过本方法切换用户角色。 直播场景下,如果你在加入频道后调用该方法切换用户角色,调用成功后,本地会触发 onClientRoleChanged 回调;远端会触发 onUserJoined 回调或 onUserOffline (BECOME_AUDIENCE) 回调。
参数
参数 | 描述 |
---|---|
role | 直播场景里的用户角色: CLIENT_ROLE_TYPE 。 |
返回值
0方法调用成功,<0方法调用失败。
注意事项:
- 该方法仅适用于直播场景。
setRemoteUserPriority
virtual int setRemoteUserPriority(uid_t uid, PRIORITY_TYPE userPriority) = 0;
设置远端用户流的优先级
设置远端用户的优先级。如果将某个用户的优先级设为高,那么发给这个用户的音视频流的优先级就会高于其他用户。 该方法可以与 setRemoteSubscribeFallbackOption 搭配使用。如果开启了订阅流回退选项,弱网下 SDK 会优先保证高优先级用户收到的流的质量。
参数
参数 | 描述 |
---|---|
userPriority | 远端用户的需求优先级。详见: PRIORITY_TYPE 。 |
返回值
0方法调用成功,<0方法调用失败。
注意事项:
- 目前 anyRTC SDK 仅允许将一名远端用户设为高优先级。
setRemoteVoicePosition
virtual int setRemoteVoicePosition(uid_t uid, double pan, double gain) = 0;
设置远端用户的语音位置
设置远端用户声音的空间位置和音量,方便本地用户听声辨位。
通过调用该接口设置远端用户声音出现的位置,左右声道的声音差异会产生声音的方位感,从而判断出远端用户的实时位置。在多人在线游戏场景,如吃鸡游戏中,该方法能有效增加游戏角色的方位感,模拟真实场景。
参数
参数 | 描述 |
---|---|
uid | 远端用户的 ID |
pan | 设置远端用户声音的空间位置,取值范围为 [-1.0,1.0]: |
gain | 设置远端用户声音的音量,取值范围为 [0.0,100.0],默认值为 100.0,表示该用户的原始音量。取值越小,则音量越低。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
setRemoteRenderMode
virtual int setRemoteRenderMode(uid_t userId, RENDER_MODE_TYPE renderMode, VIDEO_MIRROR_MODE_TYPE mirrorMode) = 0;
更新远端视图显示模式
初始化远端用户视图后,你可以调用该方法更新远端用户视图在本地显示时的渲染和镜像模式。该方法只影响本地用户看到的视频画面。
参数
参数 | 描述 |
---|---|
userId | 远端用户 ID。 |
renderMode | 远端用户视图的渲染模式,详见 RENDER_MODE_TYPE |
mirrorMode |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 请在调用 setupRemoteVideo 方法初始化远端视图后,调用该方法。
- 你可以在通话中多次调用该方法,多次更新远端用户视图的显示模式。
setLocalVideoMirrorMode
virtual int setLocalVideoMirrorMode(VIDEO_MIRROR_MODE_TYPE mirrorMode) = 0;
设置本地镜像
参数
参数 | 描述 |
---|---|
mirrorMode | 详见VIDEO_MIRROR_MODE_TYPE |
返回值
- 0:方法调用成功;
- <0方法调用失败。
setDefaultMuteAllRemoteAudioStreams
virtual int setDefaultMuteAllRemoteAudioStreams(bool mute) = 0;
设置是否默认接收所有音频流
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteAudioStreams(true), 会接收不到后面加入频道的用户的音频流。
参数
参数 | 描述 |
---|---|
mute |
返回值
0方法调用成功,<0方法调用失败。
注意事项:
- 停止接收音频流后,如果想要恢复接收,请调用 muteRemoteAudioStream(false),并指定你想要接收的远端用户的 ID。 如果想恢复接收多个用户的音频流,则需要多次调用 muteRemoteAudioStream。
- setDefaultMuteAllRemoteAudioStreams(false) 只能恢复接收后面加入频道的用户的音频流。
setDefaultMuteAllRemoteVideoStreams
virtual int setDefaultMuteAllRemoteVideoStreams(bool mute) = 0;
设置是否默认停止接收视频流
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteVideoStreams (true),会接收不到设置后加入频道的用户的视频流。
参数
参数 | 描述 |
---|---|
mute |
返回值
0方法调用成功,<0方法调用失败。
- 停止接收视频流后,如果想要恢复接收,请调用 muteRemoteVideoStream (false),并指定你想要接收的远端用户 uid; 如果想恢复接收多个用户的视频流,则需要多次调用 muteRemoteVideoStream。
- setDefaultMuteAllRemoteVideoStreams (false) 只能恢复接收后面加入频道的用户的视频流。
muteAllRemoteAudioStreams
virtual int muteAllRemoteAudioStreams(bool mute) = 0;
接收/停止接收所有音频流
该方法用于允许/禁止往网络发送本地音频流。 成功调用该方法后,远端会触发 onUserMuteAudio 回调。
参数
参数 | 描述 |
---|---|
mute |
返回值
0方法调用成功,<0方法调用失败。
adjustUserPlaybackSignalVolume
virtual int adjustUserPlaybackSignalVolume(AR::uid_t uid, int volume) = 0;
调节本地播放的指定远端用户音量
你可以在通话中调用该方法调节指定远端用户在本地播放的音量。如需调节多个用户在本地播放的音量,则需多次调用该方法。
参数
参数 | 描述 |
---|---|
uid | 远端用户 ID。 |
volume | 播放音量,取值范围为 [0,100]: |
返回值
0方法调用成功,<0方法调用失败。
注意事项:
- 请在加入频道后,调用该方法。
- 该方法调节的是本地播放的指定远端用户混音后的音量。
muteRemoteAudioStream
virtual int muteRemoteAudioStream(uid_t userId, bool mute) = 0;
接收/停止接收指定音频流。
你可以在通话中调用该方法调节指定远端用户在本地播放的音量。如需调节多个用户在本地播放的音量,则需多次调用该方法。
参数
参数 | 描述 |
---|---|
uid | 指定用户的 ID |
mute |
返回值
0方法调用成功,<0方法调用失败。
注意事项:
- 如果之前有调用过 muteAllRemoteAudioStreams (true) 停止订阅所有远端音频,在调用本 API 之前请确保你已调用 muteAllRemoteAudioStreams (false)。 muteAllRemoteAudioStreams 是全局控制,muteRemoteAudioStream 是精细控制。
muteAllRemoteVideoStreams
virtual int muteAllRemoteVideoStreams(bool mute) = 0;
接收/停止接收所有远端视频流
参数
参数 | 描述 |
---|---|
mute |
返回值
0方法调用成功,<0方法调用失败。
muteRemoteVideoStream
virtual int muteRemoteVideoStream(uid_t userId, bool mute) = 0;
接收/停止接收指定远端用户的视频流。
参数
参数 | 描述 |
---|---|
userId | 指定用户的用户 ID。 |
mute |
返回值
0方法调用成功,<0方法调用失败。
- 如果之前调用过 muteAllRemoteVideoStreams (true) 停止接收放所有远端视频流,在调用本 API 之前请确保你已调用 muteAllRemoteVideoStreams (false) 。muteAllRemoteVideoStreams 是全局控制,muteRemoteVideoStream 是精细控制。
setRemoteVideoStreamType
virtual int setRemoteVideoStreamType(uid_t userId, REMOTE_VIDEO_STREAM_TYPE streamType) = 0;
设置订阅的视频流类型
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode (false) 关闭双流模式,接收端可以选择接收大流还是小流。其中,大流可以接为高分辨率高码率的视频流, 小流则是低分辨率低码率的视频流。 正常情况下,用户默认接收大流。如需接收小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。 视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。 调用本方法的执行结果将在 onApiCallExecuted 中返回。
参数
参数 | 描述 |
---|---|
userId | 用户 ID。 |
streamType | 视频流类型: REMOTE_VIDEO_STREAM_TYPE 。 |
返回值
0方法调用成功,<0方法调用失败。
setRemoteDefaultVideoStreamType
virtual int setRemoteDefaultVideoStreamType(REMOTE_VIDEO_STREAM_TYPE streamType) = 0;
设置默认订阅的视频流类型
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode (false) 关闭双流模式, 接收端可以选择接收大流还是小流。其中,大流可以接为高分辨率高码率的视频流, 小流则是低分辨率低码率的视频流。
正常情况下,用户默认接收大流。如需默认接收所有用户的视频小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。视频小流默认 的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
调用本方法的执行结果将在 onApiCallExecuted 中返回。
参数
参数 | 描述 |
---|---|
streamType | 视频流类型: REMOTE_VIDEO_STREAM_TYPE 。 |
返回值
0方法调用成功,<0方法调用失败。
createDataStream
virtual int createDataStream(int* streamId, bool reliable, bool ordered) = 0;
创建数据流
该方法用于创建数据流。RtcEngine 生命周期内,每个用户最多只能创建 5 个数据流。频道内数据通道最多允许数据延迟 5 秒,若超过 5 秒接收方尚未收到数据流,则数据通道会向 App 报错。
参数
参数 | 描述 |
---|---|
streamId | 数据流 ID 。 |
reliable | |
ordered |
返回值
- 0:创建数据流成功;
- <0创建数据流失败。
注意事项:
- 将 reliable 和 ordered 同时设为 true 或 false。不要一个设为 true 另一个设为 false。
sendStreamMessage
virtual int sendStreamMessage(int streamId, const char* data, size_t length) = 0;
发送数据流
该方法发送数据流消息到频道内所有用户。SDK 对该方法的实现进行了如下限制:频道内每秒最多能发送 30 个包,且每个包最大为 1 KB。 API 须对数据通道的传送速率进行控制: 每个客户端每秒最多能发送 6 KB 数据。频道内每人最多能同时有 5 个数据通道。 成功调用该方法后,远端会触发 onStreamMessage 回调,远端用户可以在该回调中获取接收到的流消息;若调用失败,远端会触发 onStreamMessageError 回调。
参数
参数 | 描述 |
---|---|
streamId | 由 createDataStream 返回的数据流 ID。 |
data | 自定义数据。 |
length | 数据长度。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 请确保在调用该方法前,已调用 createDataStream 创建了数据流。
- 该方法仅适用于通信场景以及直播场景下的主播用户,如果直播场景下的观众调用此方法可能会造成观众变主播。
addPublishStreamUrl
virtual int addPublishStreamUrl(const char *url, bool transcodingEnabled) = 0;
增加旁路推流地址
调用该方法后,SDK会在本地触发 onRtmpStreamingStateChanged 回调,报告增加旁路推流地址的状态。
参数
参数 | 描述 |
---|---|
url | CDN 推流地址,格式为 RTMP。该字符长度不能超过 1024 字节。url 不支持中文字符等特殊字符。 |
transcodingEnabled |
返回值
- 0:方法调用成功;
- <0方法调用失败。
- ERR_INVALID_ARGUMENT (2): URL 为空或是长度为 0 的的字符串.
- ERR_NOT_INITIALIZED (7): 推流时未初始化引擎.
注意事项:
- 请确保在成功加入频道后才能调用该接口。
- 请确保已开通旁路推流的功能,详见高级功能《推流到 CDN》中的前提条件。
- 该方法每次只能增加一路旁路推流地址。若需推送多路流,则需多次调用该方法。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
removePublishStreamUrl
virtual int removePublishStreamUrl(const char *url) = 0;
删除旁路推流地址
调用该方法后,SDK 会在本地触发 onRtmpStreamingStateChanged 回调,报告删除旁路推流地址的状态。
参数
参数 | 描述 |
---|---|
url | 待删除的旁路推流地址,格式为 RTMP。该字符长度不能超过 1024 字节。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
- ERR_INVALID_ARGUMENT (2): URL 为空或是长度为 0 的的字符串.
- ERR_NOT_INITIALIZED (7): 推流时未初始化引擎.
注意事项:
- 该方法每次只能删除一路旁路推流地址。若需删除多路流,则需多次调用该方法。
- URL 不支持中文等特殊字符。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
setLiveTranscoding
virtual int setLiveTranscoding(const LiveTranscoding &transcoding) = 0;
设置直播推流转码
该方法用于旁路推流的视图布局及音频设置等。调用该方法更新转码设置后本地会触发 onTranscodingUpdated 回调。
参数
参数 | 描述 |
---|---|
transcoding | 详见 LiveTranscoding 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 在直播场景中,只有角色为主播的用户才能调用该方法。
- 请确保已开通旁路推流的功能,详见高级功能《推流到 CDN》中的前提条件。
- 首次调用该方法更新转码设置时,不会触发 onTranscodingUpdated 回调。
addInjectStreamUrl
virtual int addInjectStreamUrl(const char* url, const InjectStreamConfig& config) = 0;
输入在线媒体流
该方法将正在播放的音视频作为音视频源导入到正在进行的直播中。可主要应用于赛事直播、多人看视频互动等直播场景。调用该方法后,SDK 会在本地触发 onStreamInjectedStatus 回调,报告输入在线媒体流的状态;成功输入媒体流后,该音视频流会出现在频道中,频道内所有用户都会收到 onUserJoined 回调,其中 uid 为 666。该音视频流会出现在频道中。
参数
参数 | 描述 |
---|---|
url | 添加到直播中的视频流 URL 地址。支持 RTMP、HLS、HTTP-FLV 协议传输。 |
config | 所添加的视频流属性定义,详见: InjectStreamConfig 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
- ERR_INVALID_ARGUMENT (2): 输入的 URL 为空。请重新调用该方法,并确认输入的媒体流的 URL 有效。
- ERR_NOT_READY (3): 用户没有加入频道。
- ERR_NOT_SUPPORTED (4): 频道非直播场景。请调用 setChannelProfile 并将频道设置为直播场景再调用该方法。
- ERR_NOT_INITIALIZED (7): 引擎没有初始化。请确认调用该方法前已创建 IRtcEngine 对象并完成初始化。
注意事项:
- 请确保已开通旁路推流的功能,详见高级功能《推流到 CDN》中的前提条件。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
- 频道内同一时间只允许输入一个在线媒体流。
removeInjectStreamUrl
virtual int removeInjectStreamUrl(const char* url) = 0;
删除导入的外部媒体流
参数
参数 | 描述 |
---|---|
url | 已导入、待删除的外部视频源 URL 地址。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 成功删除外部视频源 URL 地址后会触发 onUserOffline 回调,uid 为 share666。
startChannelMediaRelay
virtual int startChannelMediaRelay(const ChannelMediaRelayConfiguration &configuration) = 0;
开始跨频道媒体流转发
该方法可用于实现跨频道连麦等场景。
成功调用该方法后,SDK 会触发 onChannelMediaRelayStateChanged 和 onChannelMediaRelayEvent 回调,并在回调中报告当前的跨频道媒体流转发状态和事件。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_RUNNING (2) 和 RELAY_OK (0),且 onChannelMediaRelayEvent 回调报告 RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL (4), 则表示 SDK 开始在源频道和目标频道之间转发媒体流。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_FAILURE (3), 则表示跨频道媒体流转发出现异常。
参数
参数 | 描述 |
---|---|
configuration | 跨频道媒体流转发参数配置。详见 ChannelMediaRelayConfiguration 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 请在成功加入频道后调用该方法。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
- 成功调用该方法后,若你想再次调用该方法,必须先调用 stopChannelMediaRelay 方法退出当前的转发状态。
updateChannelMediaRelay
virtual int updateChannelMediaRelay(const ChannelMediaRelayConfiguration &configuration) = 0;
更新媒体流转发的频道
成功开始跨频道转发媒体流后,如果你希望将流转发到多个目标频道, 或退出当前的转发频道,可以调用该方法。
成功调用该方法后,SDK 会触发 onChannelMediaRelayEvent 回调, 并在回调中报告状态码 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL (7)。
参数
参数 | 描述 |
---|---|
configuration | 跨频道媒体流转发参数配置。详见 ChannelMediaRelayConfiguration 。 |
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 请在 startChannelMediaRelay 方法后调用该方法,更新媒体流转发的频道。
stopChannelMediaRelay
virtual int stopChannelMediaRelay() = 0;
停止跨频道媒体流转发
一旦停止,主播会退出所有目标频道。
成功调用该方法后,SDK 会触发 onChannelMediaRelayStateChanged 回调。如果报告 RELAY_STATE_IDLE (0) 和 RELAY_OK (0),则表示已停止转发媒体流。
返回值
- 0:方法调用成功;
- <0方法调用失败。
注意事项:
- 如果该方法调用不成功,SDK 会触发 onChannelMediaRelayStateChanged 回调,并报告状态码 RELAY_ERROR_SERVER_NO_RESPONSE (2) 或 RELAY_ERROR_SERVER_CONNECTION_LOST (8)。你可以调用 leaveChannel 方法离开频道,跨频道媒体流转发会自动停止。
getConnectionState
virtual AR::CONNECTION_STATE_TYPE getConnectionState();
获取当前网络连接状态。
获取当前网络连接状态。