AgoraRtcChannel 类
Inherits from | NSObject |
---|---|
Declared in | AgoraRtcChannel.h |
– destroy
销毁 AgoraRtcChannel 对象
- (int)destroy
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeNotInitialized
(-7): The AgoraRtcChannel instance is not initialized before calling this method.
Declared In
AgoraRtcChannel.h
– setRtcChannelDelegate:
设置 AgoraRtcChannel 对象的 Delegate。
- (void)setRtcChannelDelegate:(id<AgoraRtcChannelDelegate> _Nullable)channelDelegate
参数
channelDelegate |
---|
详情
你可以通过该方法监听本 AgoraRtcChannel 对象对应频道的 Delegate,并接收频道中用户视频信息等。
Declared In
AgoraRtcChannel.h
– getChannelId
获取当前 AgoraRtcChannel 对象的频道 ID
- (NSString *_Nullable)getChannelId
返回
- 方法调用成功,返回当前 AgoraRtcChannel 对象的频道 ID
- 方法调用失败,返回一个空字符 “”
Declared In
AgoraRtcChannel.h
– getCallId
获取通话 ID
- (NSString *_Nullable)getCallId
返回
- 方法调用成功,返回当前通话 ID
- 方法调用失败,返回一个空字符 “”
Declared In
AgoraRtcChannel.h
– getConnectionState
获取当前网络连接状态
- (AgoraConnectionStateType)getConnectionState
返回
当前的网络连接状态,详见 AgoraConnectionStateType。
AgoraConnectionStateDisconnected
(1): 网络连接断开。AgoraConnectionStateConnecting
(2): 建立网络连接中。AgoraConnectionStateConnected
(3): 用户已经加入频道,可以在频道内发布或订阅媒体流。AgoraConnectionStateReconnecting
(4): SDK 之前曾加入过频道,但因网络等原因连接中断了,此时 SDK 会自动尝试重新接入频道。AgoraConnectionStateFailed
(5): 网络连接失败。
Declared In
AgoraRtcChannel.h
– joinChannelByToken:info:uid:options:
通过用户 ID 加入频道
- (int)joinChannelByToken:(NSString *_Nullable)token info:(NSString *_Nullable)info uid:(NSUInteger)uid options:(AgoraRtcChannelMediaOptions *_Nonnull)options
参数
token |
在 App 服务器端生成的用于鉴权的 Token:
|
---|---|
info |
(非必选项)开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。 |
uid |
用户 ID,32 位无符号整数。建议设置范围:1 到 (232-1),并保证唯一性。如果不指定(即设为 0),SDK 会自动分配一个,并在 rtcChannelDidJoinChannel 回调方法中返回,App 层必须记住该返回值并维护,SDK 不对该返回值进行维护。 |
options |
频道媒体设置选项 AgoraRtcChannelMediaOptions 。 |
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeInvalidArgument
(-2)AgoraErrorCodeNotReady
(-3)AgoraErrorCodeRefused
(-5)
详情
该方法与 AgoraRtcEngineKit 类下的 joinChannelByToken 方法有以下区别:
AgoraRtcChannel joinChannelByToken | AgoraRtcEngineKit joinChannelByToken |
---|---|
无 channelId 参数。因为创建 AgoraRtcChannel 对象时已指定了 channelId 。 |
需要填入可以标识频道的 channelId 。 |
加了 options 参数,可在加入频道前通过该参数设置是否订阅该频道的音视频流。 |
无 options 参数。加入频道即默认订阅频道内的音视频流。 |
通过创建多个 IChannel 对象,并调用相应对象的 joinChannelByToken 方法,实现同时加入多个频道。 |
只允许加入一个频道。 |
通过该方法加入频道后,SDK 默认不发布本地音视频流到本频道,用户需要调用 publish 方法进行发布。 | 通过该方法加入频道后,SDK 默认发布音视频流发布到本频道。 |
Note
- 该方法不支持相同的用户重复加入同一个频道。
- 我们建议不同频道中使用不同的
uid
。 - 如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的
uid
是不同的。 - 请确保用于生成 Token 的 App ID 和创建 AgoraRtcEngineKit 对象时用的 App ID 一致。
Declared In
AgoraRtcChannel.h
– joinChannelByUserAccount:token:options:
使用 User Account 加入频道
- (int)joinChannelByUserAccount:(NSString *_Nonnull)userAccount token:(NSString *_Nullable)token options:(AgoraRtcChannelMediaOptions *_Nonnull)options
参数
userAccount |
用户 User Account。该参数为必需,最大不超过 255 字节,不可为 null。请确保加入频道的 User Account 的唯一性。 以下为支持的字符集范围(共 89 个字符):
|
---|---|
token |
在 App 服务器端生成的用于鉴权的 Token:
|
options |
频道媒体设置选项 AgoraRtcChannelMediaOptions 。 |
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeInvalidArgument
(-2)AgoraErrorCodeNotReady
(-3)AgoraErrorCodeRefused
(-5)
详情
该方法与 AgoraRtcEngineKit 类下的 joinChannelByUserAccount 方法有以下区别:
AgoraRtcChannel joinChannelByUserAccount | AgoraRtcEngineKit joinChannelByUserAccount |
---|---|
无 channelId 参数。因为创建 AgoraRtcChannel 对象时已指定了 channelId 。 |
需要填入可以标识频道的 channelId 。 |
加了 options 参数,可在加入频道前通过该参数设置是否订阅该频道的音视频流。 |
无 options 参数。加入频道即默认订阅频道内的音视频流。 |
通过创建多个 IChannel 对象,并调用相应对象的 joinChannelByToken 方法,实现同时加入多个频道。 |
只允许加入一个频道。 |
通过该方法加入频道后,SDK 默认不发布本地音视频流到本频道,用户需要调用 publish 方法进行发布。 | 通过该方法加入频道后,SDK 默认发布音视频流发布到本频道。 |
Note
- 该方法不支持相同的用户重复加入同一个频道。
- 我们建议不同频道中使用不同的
uid
。 - 如果想要从不同的设备同时接入同一个频道,请确保每个设备上使用的
uid
是不同的。 - 请确保用于生成 Token 的 App ID 和创建 AgoraRtcEngineKit 对象时用的 App ID 一致。
Declared In
AgoraRtcChannel.h
– leaveChannel
离开频道
- (int)leaveChannel
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
成功调用该方法离开频道后,会触发以下回调:
- 本地:rtcChannelDidLeaveChannel 回调。
- 远端:通信场景下的用户和直播场景下的主播离开频道后,会触发 didOfflineOfUid 回调。
Declared In
AgoraRtcChannel.h
– publish
将本地音视频流发布到本频道。
- (int)publish
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeRefused
(-5): 调用被拒绝
详情
该方法的调用需满足以下要求,否则 SDK 会返回 AgoraErrorCodeRefused(-5):
- 该方法仅支持将音视频流发布到当前 AgoraRtcChannel 类所对应的频道。
- 直播场景下,该方法仅适用于角色为主播的用户。你可以调用该 AgoraRtcChannel 类下的 setClientRole 方法设置用户角色。
- SDK 只支持用户同一时间在一个频道发布一路音视频流。详情请参考高阶指南多频道管理。
Declared In
AgoraRtcChannel.h
– unpublish
停止将本地音视频流发布到本频道。
- (int)unpublish
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeRefused
(-5): 调用被拒绝
详情
请确保你想要 un
publish 音视频流的频道
channelId
,与当前正在 publish
音视频流的频道 channelId
一致,否则 SDK 会返回 AgoraErrorCodeRefused(-5)。
Declared In
AgoraRtcChannel.h
– setClientRole:
设置用户角色
- (int)setClientRole:(AgoraClientRole)role
参数
role |
直播场景里的用户角色
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法仅适用于直播场景。
在加入频道前,用户需要通过本方法设置观众(默认)或主播角色。在直播场景中,只有角色为主播时可调用 publish 方法。
如果你在加入频道后调用该方法切换用户角色,调用成功后会触发以下回调:
- 本地:didClientRoleChanged 回调。
- 远端:didJoinedOfUid 或 didOfflineOfUid 回调。
Declared In
AgoraRtcChannel.h
– renewToken:
更新 Token
- (int)renewToken:(NSString *_Nonnull)token
参数
token |
新的 Token |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法用于更新 Token。如果启用了 Token 机制,过一段时间后使用的 Token 会失效。当以下任意一种情况发生时:
- SDK 触发 tokenPrivilegeWillExpire 回调。
- connectionChangedToState 回调
reason
参数报告 AgoraConnectionChangedTokenExpired(9)。
App 应重新获取 Token,然后调用该 API 更新 Token,否则 SDK 无法和服务器建立连接。
Note
Agora 推荐使用 rtcChannelRequestToken 回调报告 AgoraErrorCodeTokenExpired(-109),而不是 didOccurError 回调.
Declared In
AgoraRtcChannel.h
– setEncryptionSecret:
启用内置加密,并设置数据加密密码
- (int)setEncryptionSecret:(NSString *_Nullable)secret
参数
secret |
加密密码 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
在加入频道之前, App 需调用 setEncryptionSecret
指定 secret
来启用内置的加密功能,同一频道内的所有用户应设置相同的 secret
。 当用户离开频道时,该频道的 secret
会自动清除。如果未指定 secret
或将 secret
设置为空,则无法激活加密功能。
Note
- 请不要在旁路推流时调用此方法。
- 为保证最佳传输效果,请确保加密后的数据大小不超过原始数据大小 + 16 字节。16 字节是 AES 通用加密模式下最大填充块大小。
Declared In
AgoraRtcChannel.h
– setEncryptionMode:
设置内置的加密方案
- (int)setEncryptionMode:(NSString *_Nullable)encryptionMode
参数
encryptionMode |
加密方式,有三种选择:
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
Agora Native SDK 支持内置加密功能,默认使用 AES-128-XTS 加密方式。如需使用其他加密方式,可以调用该 API 设置。同一频道内的所有用户必须设置相同的加密方式和 secret 才能进行通话。关于这几种加密方式的区别,请参考 AES 加密算法的相关资料。
Note
- 在调用本方法前,请先调用 setEncryptionSecret 启用内置加密功能。
- 请不要在旁路推流时调用此方法。
Declared In
AgoraRtcChannel.h
– setRemoteUserPriority:type:
设置远端用户流的优先级
- (int)setRemoteUserPriority:(NSUInteger)uid type:(AgoraUserPriority)userPriority
参数
uid |
远端用户的 ID |
---|---|
userPriority |
远端用户的优先级,详见 AgoraUserPriority。 |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
如果将某个用户的优先级设为高,那么发给这个用户的音视频流的优先级就会高于其他用户。
该方法可以与 setRemoteSubscribeFallbackOption 搭配使用。如果开启了订阅流回退选项,弱网下 SDK 会优先保证高优先级用户收到的流的质量。
Note
目前仅支持将一名远端用户设为高优先级。
Declared In
AgoraRtcChannel.h
– setRemoteVoicePosition:pan:gain:
设置远端用户的语音位置
- (int)setRemoteVoicePosition:(NSUInteger)uid pan:(double)pan gain:(double)gain
参数
uid |
远端用户的 ID |
---|---|
pan |
设置远端用户声音的空间位置,取值范围为 [-1.0,1.0]:
|
gain |
设置远端用户声音的音量,取值范围为 [0.0,100.0],默认值为 100.0,表示该用户的原始音量。取值越小,则音量越低。 |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
设置远端用户声音的空间位置和音量,方便本地用户听声辨位。
通过调用该接口设置远端用户声音出现的位置,左右声道的声音差异会产生声音的方位感,从而判断出远端用户的实时位置。在多人在线游戏场景,如吃鸡游戏中,该方法能有效增加游戏角色的方位感,模拟真实场景。
Note
- 使用该方法需要在加入频道前调用 enableSoundPositionIndication 开启远端用户的语音立体声
为获得最佳听觉体验,我们建议:
- 在 iOS 使用该方法时佩戴耳机
- 在 macOS 使用该方法时使用立体声外放
Declared In
AgoraRtcChannel.h
– setRemoteRenderMode:renderMode:mirrorMode:
更新远端视图显示模式。
- (int)setRemoteRenderMode:(NSUInteger)uid renderMode:(AgoraVideoRenderMode)renderMode mirrorMode:(AgoraVideoMirrorMode)mirrorMode
参数
uid |
远端用户 ID。 |
---|---|
renderMode |
远端用户视图的渲染模式,详见 AgoraVideoRenderMode 。 |
mirrorMode |
远端用户视图的镜像模式,详见 AgoraVideoMirrorMode 。 Note 默认关闭远端用户的镜像模式。 |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
初始化远端用户视图后,你可以调用该方法更新远端用户视图在本地显示时的渲染和镜像模式。该方法只影响本地用户看到的视频画面。
Note
- 请在调用 setupRemoteVideo 方法初始化远端视图后,调用该方法。
- 你可以在通话中多次调用该方法,多次更新远端用户视图的显示模式。
Declared In
AgoraRtcChannel.h
– setDefaultMuteAllRemoteAudioStreams:
设置是否默认接收音频流
- (int)setDefaultMuteAllRemoteAudioStreams:(BOOL)mute
参数
mute |
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteAudioStreams (YES)
,会接收不到设置后加入频道的用户的音频流。
Note: 停止接收音频流后,如果想要恢复接收,请调用 muteRemoteAudioStream (NO),并指定你想要接收的远端用户 uid
;如果想恢复接收多个用户的音频流,则需要多次调用 muteRemoteAudioStream
。setDefaultMuteAllRemoteAudioStreams (NO)
只能恢复接收后面加入频道的用户的音频流。
Declared In
AgoraRtcChannel.h
– setDefaultMuteAllRemoteVideoStreams:
设置是否默认接收视频流
- (int)setDefaultMuteAllRemoteVideoStreams:(BOOL)mute
参数
mute |
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteVideoStreams (YES)
,会接收不到设置后加入频道的用户的视频流。
Note: 停止接收视频流后,如果想要恢复接收,请调用 muteRemoteVideoStream (NO),并指定你想要接收的远端用户 uid
;如果想恢复接收多个用户的视频流,则需要多次调用 muteRemoteVideoStream
。setDefaultMuteAllRemoteVideoStreams (NO)
只能恢复接收后面加入频道的用户的视频流。
Declared In
AgoraRtcChannel.h
– muteRemoteAudioStream:mute:
停止/恢复接收指定用户的音频流
- (int)muteRemoteAudioStream:(NSUInteger)uid mute:(BOOL)mute
参数
uid |
指定用户的用户 ID。 |
---|---|
mute |
|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
Note
如果之前有调用过 muteAllRemoteAudioStreams(YES) 对所有远端音频进行静音,在调用本 API 之前请确保你已调用 muteAllRemoteAudioStreams(NO)
。 muteAllRemoteAudioStreams
是全局控制,muteRemoteAudioStream
是精细控制。
Declared In
AgoraRtcChannel.h
– adjustUserPlaybackSignalVolume:volume:
调节本地播放的指定远端用户音量。
- (int)adjustUserPlaybackSignalVolume:(NSUInteger)uid volume:(int)volume
参数
uid |
远端用户 ID,需和远端用户加入频道时用的 uid 一致。 |
---|---|
volume |
播放音量,取值范围为 [0,100]。
|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
加入频道后,你可以多次调用该方法调节不同远端用户在本地播放的音量,或对某个远端用户在本地播放的音量调节多次。
Note
- 该方法要在加入频道后调用。
- 该方法调节的是本地播放的指定远端用户混音后的音量。
- 该方法每次只能调整一位远端用户在本地播放的音量。若需调整多位远端用户在本地播放的音量,则需多次调用该方法。
Declared In
AgoraRtcChannel.h
– muteAllRemoteAudioStreams:
停止/恢复接收所有远端音频流
- (int)muteAllRemoteAudioStreams:(BOOL)mute
参数
mute |
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
Declared In
AgoraRtcChannel.h
– muteRemoteVideoStream:mute:
停止/恢复接收指定视频流
- (int)muteRemoteVideoStream:(NSUInteger)uid mute:(BOOL)mute
参数
uid |
远端用户ID |
---|---|
mute |
|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
Note
如果之前有调用过 muteAllRemoteVideoStreams(YES) 暂停接收所有远端视频,在调用本 API 之前请确保你已调用 muteAllRemoteVideoStreams(NO)
。 muteAllRemoteVideoStreams
是全局控制,muteRemoteVideoStream
是精细控制。
Declared In
AgoraRtcChannel.h
– muteAllRemoteVideoStreams:
停止/恢复接收所有视频流
- (int)muteAllRemoteVideoStreams:(BOOL)mute
参数
mute |
|
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法用于禁止/允许接收所有人的视频流。
Declared In
AgoraRtcChannel.h
– setRemoteVideoStream:type:
设置订阅的视频流类型
- (int)setRemoteVideoStream:(NSUInteger)uid type:(AgoraVideoStreamType)streamType
参数
uid |
用户 ID |
---|---|
streamType |
设置视频流大小,AgoraVideoStreamType |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
如果发送端选择发送视频双流(大流或小流),接收端可以选择接收大流还是小流。其中大流可以理解为高分辨率高码率的视频流,小流则是低分辨率低码率的视频流。该方法可以根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。
Agora SDK 默认收到视频大流。如需使用视频小流,调用本方法进行切换。
- 如果发送端用户已调用 enableDualStreamMode 启用了双流模式,SDK 默认接收大流。如需接收小流,可调用本方法进行切换。
- 如果发送端用户未启用双流模式,SDK 默认接收大流。
视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
Declared In
AgoraRtcChannel.h
– setRemoteDefaultVideoStreamType:
设置默认订阅的视频流类型
- (int)setRemoteDefaultVideoStreamType:(AgoraVideoStreamType)streamType
参数
streamType |
设置默认接收的视频流类型,详见 AgoraVideoStreamType 。 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法设置远端视频默认为大流或小流。
Declared In
AgoraRtcChannel.h
– addInjectStreamUrl:config:
输入在线媒体流 URL
- (int)addInjectStreamUrl:(NSString *_Nonnull)url config:(AgoraLiveInjectStreamConfig *_Nonnull)config
参数
url |
添加到直播中的视频流 URL 地址, 支持 RTMP, HLS, HTTP-FLV 协议传输。
|
---|---|
config |
导入的视频流设置,详见 AgoraLiveInjectStreamConfig 。 |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
AgoraErrorCodeInvalidArgument
(-2):输入的 URL 为空。请重新调用该方法,并确认输入的媒体流的 URL 是有效的。AgoraErrorCodeNotInitialized
(-7):引擎没有初始化。请确认调用该方法前已创建 RtcEngine 对象并完成初始化。AgoraErrorCodeNotSupported
(-4):频道非直播场景。AgoraErrorCodeNotReady
(-3):用户没有加入频道。
详情
该方法通过在服务端拉取视频流并发送到频道中,将正在播放的视频导入到正在进行的直播中。可主要应用于赛事直播、多人看视频互动等直播场景。
调用该方法后,SDK 会在本地触发 streamInjectedStatusOfUrl 回调,报告输入在线媒体流的状态。
成功输入媒体流后,该音视频流会出现在频道中,频道内所有用户都会收到 didJoinedOfUid 回调,其中 uid
为 666。
Note:
- 请确保已开通旁路推流的功能,详见前提条件。
- 该方法适用于 Native SDK v2.4.1 及之后的版本。
- 该方法仅适用于直播场景中的主播用户。
- 频道内同一时间只允许输入一个在线媒体流。
Declared In
AgoraRtcChannel.h
– removeInjectStreamUrl:
删除输入的在线媒体流
- (int)removeInjectStreamUrl:(NSString *_Nonnull)url
参数
url |
已导入、待删除的在线媒体流 URL 地址 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
成功删除后会触发 didOfflineOfUid 回调,UID 为 666。
Declared In
AgoraRtcChannel.h
– addPublishStreamUrl:transcodingEnabled:
增加旁路推流地址
- (int)addPublishStreamUrl:(NSString *_Nonnull)url transcodingEnabled:(BOOL)transcodingEnabled
参数
url |
CDN 推流地址,格式为 RTMP。该字符串长度不能超过 1024 字节。URL 不支持中文等特殊字符。 |
---|---|
transcodingEnabled |
|
返回
- 0: 方法调用成功
< 0: 方法调用失败
AgoraErrorCodeInvalidArgument
(-2): 参数无效,一般是 URL 为空或是长度为 0 的的字符串。AgoraErrorCodeNotInitialized
(-7): 推流时未初始化引擎。
详情
该方法用于添加旁路推流地址,调用该方法后,SDK 会在本地触发 rtmpStreamingChangedToState 回调,报告增加旁路推流地址的状态。
Note:
- 该方法仅适用于直播场景。
- 请确保在成功加入频道后再调用该接口。
- 请确保已开通旁路推流的功能,详见前提条件。
- 该方法每次只能增加一路旁路推流地址。若需推送多路流,则需多次调用该方法。
Declared In
AgoraRtcChannel.h
– removePublishStreamUrl:
删除旁路推流地址
- (int)removePublishStreamUrl:(NSString *_Nonnull)url
参数
url |
待删除的推流地址,格式为 RTMP。该字符串长度不能超过 1024 字节 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法用于删除旁路推流过程中已经设置的 RTMP 推流地址。调用该方法后,SDK 会在本地触发 rtmpStreamingChangedToState 回调,报告删除旁路推流地址的状态。
Note:
- 该方法仅适用于直播场景。
- 该方法每次只能删除一路旁路推流地址。若需删除多路流,则需多次调用该方法。
- URL 不支持中文等特殊字符。
Declared In
AgoraRtcChannel.h
– setLiveTranscoding:
设置直播转码
- (int)setLiveTranscoding:(AgoraLiveTranscoding *_Nullable)transcoding
参数
transcoding |
一个 AgoraLiveTranscoding 的对象,详细设置见 AgoraLiveTranscoding 。 |
---|
返回
- 0: 方法调用成功;
- < 0: 方法调用失败。
详情
该方法用于旁路推流的视图布局及音频设置等。调用该方法更新转码设置后本地会触发 rtcEngineTranscodingUpdated 回调。
Note:
- 该方法仅适用于直播场景。
- 请确保已开通 CDN 旁路推流的功能,详见前提条件。
- 首次调用该方法更新转码设置时,不会触发
rtcEngineTranscodingUpdated
回调。
Declared In
AgoraRtcChannel.h
– createDataStream:reliable:ordered:
创建数据流
- (int)createDataStream:(NSInteger *_Nonnull)streamId reliable:(BOOL)reliable ordered:(BOOL)ordered
参数
streamId |
数据流 ID |
---|---|
reliable |
|
ordered |
|
返回
- 0: 创建数据流成功
- < 0: 创建数据流失败
详情
该方法用于创建数据流。AgoraRtcChannel 生命周期内,每个用户最多只能创建 5 个数据流。频道内数据通道最多允许数据延迟 5 秒,若超过 5 秒接收方尚未收到数据流,则数据通道会向 App 报错。 目前 Agora Native SDK 支持 99% 可靠和 100% 有序的数据传输。
Note:
请将 reliable
和 ordered
同时设置为 YES 或 NO,暂不支持交叉设置。
Declared In
AgoraRtcChannel.h
– sendStreamMessage:data:
发送数据流
- (int)sendStreamMessage:(NSInteger)streamId data:(NSData *_Nonnull)data
参数
streamId |
数据流 ID,createDataStream 的返回值。 |
---|---|
data |
需要发送的消息 |
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
该方法发送数据流消息到频道内所有用户。SDK 对该方法的实现进行了如下限制:频道内每秒最多能发送 30 个包,且每个包最大为 1 KB。 每个客户端每秒最多能发送 6 KB 数据。频道内每人最多能同时有 5 个数据通道。
成功调用该方法后,远端会触发 receiveStreamMessageFromUid 回调,远端用户可以在该回调中获取接收到的流消息;若调用失败,远端会触发 didOccurStreamMessageErrorFromUid 回调。
Note:
该方法仅适用于通信场景以及直播场景下的主播用户,如果直播场景下的观众调用此方法可能会造成观众变主播。
Declared In
AgoraRtcChannel.h
– startChannelMediaRelay:
开始跨频道媒体流转发。该方法可用于实现跨频道连麦等场景。
- (int)startChannelMediaRelay:(AgoraChannelMediaRelayConfiguration *_Nonnull)config
参数
config |
跨频道媒体流转发参数配置: AgoraChannelMediaRelayConfiguration 类。 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
成功调用该方法后,SDK 会触发 channelMediaRelayStateDidChange 和 didReceiveChannelMediaRelayEvent 回调,并在回调中报告当前的跨频道媒体流转发状态和事件。
- 如果
channelMediaRelayStateDidChange
回调报告 AgoraChannelMediaRelayStateRunning(2) 和 AgoraChannelMediaRelayStateIdle(0),且didReceiveChannelMediaRelayEvent
回调报告 AgoraChannelMediaRelayEventSentToDestinationChannel(4),则表示 SDK 开始在源频道和目标频道之间转发媒体流。 - 如果
channelMediaRelayStateDidChange
回调报告 AgoraChannelMediaRelayStateFailure(3),则表示跨频道媒体流转发出现异常。
Note
- 请在成功加入频道后调用该方法。
- 该方法仅对直播场景下的主播有效。
- 成功调用该方法后,若你想再次调用该方法,必须先调用 stopChannelMediaRelay 方法退出当前的转发状态。
- 跨频道媒体流转发功能需要联系 sales@agora.io 开通。
- 该功能不支持 String 型 UID。
Declared In
AgoraRtcChannel.h
– updateChannelMediaRelay:
更新媒体流转发的频道。成功开始跨频道转发媒体流后,如果你希望将流转发到多个目标频道,或退出当前的转发频道,可以调用该方法。
- (int)updateChannelMediaRelay:(AgoraChannelMediaRelayConfiguration *_Nonnull)config
参数
config |
跨频道媒体流转发参数配置: AgoraChannelMediaRelayConfiguration 类。 |
---|
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
成功调用该方法后,SDK 会触发 didReceiveChannelMediaRelayEvent 回调,并在回调中报告状态码 AgoraChannelMediaRelayEventUpdateDestinationChannel(7)。
Note
- 请在 startChannelMediaRelay 方法后调用该方法,更新媒体流转发的频道。
- 跨频道媒体流转发最多支持 4 个目标频道。如果直播间里已经有 4 个频道了,你可以在调用该方法之前,调用 AgoraChannelMediaRelayConfiguration 中的
removeDestinationInfoForChannelName
方法移除不需要的频道。
Declared In
AgoraRtcChannel.h
– stopChannelMediaRelay
停止跨频道媒体流转发。一旦停止,主播会退出所有目标频道。
- (int)stopChannelMediaRelay
返回
- 0: 方法调用成功
- < 0: 方法调用失败
详情
成功调用该方法后,SDK 会触发 channelMediaRelayStateDidChange 回调。如果报告 AgoraChannelMediaRelayStateIdle(0) 和 AgoraChannelMediaRelayErrorNone(0),则表示已停止转发媒体流。
Note: 如果该方法调用不成功,SDK 会触发 channelMediaRelayStateDidChange
回调,并报告状态码 AgoraChannelMediaRelayErrorServerNoResponse(2) 或 AgoraChannelMediaRelayEventUpdateDestinationChannelRefused(8)。你可以调用 leaveChannel 方法离开频道,跨频道媒体流转发会自动停止。
Declared In
AgoraRtcChannel.h
– setMediaMetadataDataSource:withType:
设置媒体附属信息的 Data source
- (BOOL)setMediaMetadataDataSource:(id<AgoraMediaMetadataDataSource> _Nullable)metadataDataSource withType:(AgoraMetadataType)type
参数
metadataDataSource |
|
---|---|
type |
附属信息的数据类型,详见 AgoraMetadataType。目前仅支持视频类的附属信息。 |
返回
- YES: 方法调用成功
- NO: 方法调用失败
详情
设置媒体附属信息的 Data source。你需要在该方法中实现一个 AgoraMediaMetadataDataSource 协议,并指定附属信息的数据类型。
该接口可以与 setMediaMetadataDelegate 接口搭配使用,在直播场景中实现发送商品链接、分发优惠券、发送答题等功能,构建更为丰富的直播互动方式。
Note: 请在调用 joinChannelByToken 加入频道前调用该方法
Note: 该方法仅适用于直播场景
Declared In
AgoraRtcChannel.h
– setMediaMetadataDelegate:withType:
设置媒体附属信息的 Delegate
- (BOOL)setMediaMetadataDelegate:(id<AgoraMediaMetadataDelegate> _Nullable)metadataDelegate withType:(AgoraMetadataType)type
参数
metadataDelegate |
|
---|---|
type |
附属信息的数据类型,详见 AgoraMetadataType。目前仅支持视频类的附属信息。 |
返回
- YES: 方法调用成功
- NO: 方法调用失败
详情
设置媒体附属信息的 Delegate。你需要在该方法中实现一个 AgoraMediaMetadataDelegate 协议,并指定附属信息的数据类型。
Note: 请在调用 joinChannelByToken 加入频道前调用该方法
Note: 该方法仅适用于直播场景
Declared In
AgoraRtcChannel.h