视频基础功能
disableVideo
关闭视频模块。
- (int)disableVideo;
该方法用于关闭视频模块。
调用时机
- 如果在加入频道前调用,则开启纯音频模式。
- 如果在加入频道后调用,则由视频模式切换为纯音频模式,然后再调用 enableVideo 方法可开启视频模式。
调用限制
- 该方法设置的是内部引擎为禁用状态,在离开频道后仍然有效。
- 调用该方法会重置整个引擎,响应时间较慢。你可以根据实际需求用以下方法来独立控制视频模块的某一项功能:
- enableLocalVideo:: 是否启动摄像头采集并创建本地视频流。
- muteLocalVideoStream:: 是否发布本地视频流。
- muteRemoteVideoStream:mute:: 是否接收并播放远端视频流。
- muteAllRemoteVideoStreams:: 是否接收并播放所有远端视频流。
相关回调
成功调用该方法后,远端会触发 rtcEngine:didVideoEnabled:byUid: (NO
) 回调。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
enableLocalVideo:
开关本地视频采集。
- (int)enableLocalVideo:(BOOL)enabled;
详情
该方法禁用或重新启用本地视频采集,不影响接收远端视频。
调用 enableVideo 后,本地视频采集即默认开启。
如果你在频道内调用 enableLocalVideo:(NO
) 关闭本地视频采集,也会同时停止在频道内发布视频流。如果想要重新开启,则可调用 enableLocalVideo:(YES
),然后调用 updateChannelWithMediaOptions: 并设置 options 参数,将本地采集的视频流发布到频道中。
成功禁用或启用本地视频采集后,远端会触发 rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed: 回调。
- 该方法在加入频道前后都能调用。
- 该方法设置内部引擎为启用状态,在离开频道后仍然有效。
参数
- enabled
是否开启本地视频采集。
YES
:(默认)开启本地视频采集。NO
: 关闭本地视频采集。关闭后,远端用户会接收不到本地用户的视频流;但本地用户依然可以接收远端用户的视频流。设置为NO
时,该方法不需要本地有摄像头。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
enableVideo
启用视频模块。
- (int)enableVideo;
视频模块默认为关闭状态,需要调用该方法启用。如果后续需要关闭视频模块,需调用 disableVideo 方法。
调用时机
- 如果在加入频道前调用,则开启视频模块。
- 如果在纯音频通话中调用,则音频通话将自动切换为视频通话。
调用限制
- 该方法设置的是内部引擎为启用状态,在离开频道后仍然有效。
- 调用该方法会重置整个引擎,响应时间较慢。你可以根据实际需求用以下方法来独立控制视频模块的某一项功能:
- enableLocalVideo:: 是否启动摄像头采集并创建本地视频流。
- muteLocalVideoStream:: 是否发布本地视频流。
- muteRemoteVideoStream:mute:: 是否接收并播放远端视频流。
- muteAllRemoteVideoStreams:: 是否接收并播放所有远端视频流。
- 在频道内调用该方法时,会重置 enableLocalVideo:、muteRemoteVideoStream:mute: 和 muteAllRemoteVideoStreams: 的设置,需谨慎使用。
相关回调
成功调用该方法后,远端会触发 rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed: 回调。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
queryCodecCapability
查询 SDK 支持的视频编解码能力。
- (NSArray <AgoraVideoCodecCapInfo *> *__nullable)queryCodecCapability;
详情
返回值
- 如果调用成功,则返回 AgoraVideoCodecCapInfo 数组,表示 SDK 的视频编码能力。
- 如果调用超时,请修改调用逻辑,不要在主线程中调用该方法。
setVideoEncoderConfiguration:
设置视频编码属性。
- (int)setVideoEncoderConfiguration:(AgoraVideoEncoderConfiguration * _Nonnull)config;
设置本地视频的编码属性。每一种视频编码属性对应一系列视频相关参数设置,包含分辨率、帧率和码率。
调用时机
该方法在加入频道前后都能调用。如果用户在加入频道后不需要重新设置视频编码属性,则建议在 enableVideo 前调用该方法,可以加快首帧出图的时间。
调用限制
- 该方法和 getMirrorApplied 方法均支持设置镜像效果,声网建议你仅选择一种方法进行设置,同时使用两种方法会导致镜像效果叠加从而造成设置镜像失败。
- 该方法的 config 参数设置是在理想网络状态下能达到的最大值。如果网络状态不好,视频引擎便不能使用该 config 渲染本地视频,它会自动降低到一个合适的视频参数设置。
参数
- config
- 视频编码参数配置。详见 AgoraVideoEncoderConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setVideoEncoderConfigurationEx:connection:
设置视频编码属性。
- (int)setVideoEncoderConfigurationEx:(AgoraVideoEncoderConfiguration* _Nonnull)config
connection:(AgoraRtcConnection * _Nonnull)connection;
设置本地视频的编码属性。每一种视频编码属性对应一系列视频相关参数设置,包含分辨率、帧率和码率。
调用时机
该方法需要在 joinChannelExByToken:connection:delegate:mediaOptions:joinSuccess: 之后调用。
调用限制
该方法的 config 参数设置是在理想网络状态下能达到的最大值。如果网络状态不好,视频引擎便不能使用该 config 渲染本地视频,它会自动降低到一个合适的视频参数设置。
参数
- config
- 视频编码参数配置。详见 AgoraVideoEncoderConfiguration。
- connection
- Connection 信息。详见 AgoraRtcConnection。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setVideoResolution:andFrameRate:bitrate:
手动设置视频编码配置。
- (int)setVideoResolution:(CGSize)size andFrameRate:(NSInteger)frameRate bitrate:(NSInteger)bitrate;
详情
该方法手动设置视频的编码属性。该方法在加入频道前后都能调用。 如果用户加入频道后不需要重新设置视频编码属性,则建议在 enableVideo 前调用该方法,可以加快首帧出图的时间。
参数
- width
- 你想要设置的视频宽度,宽 × 高的最大值不超过 1280 × 720。
- height
- 你想要设置的视频高度,宽 × 高的最大值不超过 1280 × 720。
- frameRate
- 你想要设置的视频帧率,最高值不超过 30,如: 5、10、15、24、30 等。
- bitrate
- 你想要设置的视频码率,需要开发者根据想要设置的视频的宽、高和帧率,根据 Bitrate 中的码率参考表,手动推算出合适值。宽和高固定的情况下,码率随帧率的变化而变化:
- 如选取的帧率为 5 FPS,则推算码率为上表推荐码率除以 2。
- 如选取的帧率为 15 FPS,则推算码率为上表推荐码率。
- 如选取的帧率为 30 FPS,则推算码率为上表码率乘以 1.5。
- 如选取其余帧率,等比例推算即可。
- 如设置的视频码率超出合理范围,SDK 会自动按照合理区间处理码率。
setVideoScenario:
设置视频业务场景。
- (int)setVideoScenario:(AgoraApplicationScenarioType)scenarioType NS_SWIFT_NAME(setVideoScenario(_:));
详情
成功调用该方法设置视频业务场景后,SDK 会基于指定场景启用最佳实践策略,自动调整关键性能指标,进而优化视频体验质量。
参数
- scenarioType
- 视频业务场景。详见 AgoraApplicationScenarioType。AgoraApplicationMeetingScenario (1) 适用于会议场景。SDK 会针对该场景启用以下策略:
- 针对会议场景对小流码率要求较高的情况,自动启用多项抗弱网技术,提升小流的抗弱网能力,确保多路流订阅时接收端的流畅性。
- 实时监测接收端大流的订阅人数,根据订阅人数动态调节大流配置:
- 无人订阅大流时,会自动降低大流的码率和帧率,节省上行带宽和消耗。
- 有人订阅大流时,大流会重置为用户最近一次调用 setVideoEncoderConfiguration: 时的 AgoraVideoEncoderConfiguration 配置。如果用户此前没有进行设置,则使用如下值:
- 视频分辨率:960 × 540
- 视频帧率:15 fps
- 码率:1000 Kbps
- 实时监测接收端小流的订阅人数,根据订阅人数动态开启和关闭小流: 信息如果用户已调用 setDualStreamMode:streamConfig: 将小流设置为始终不发送 (AgoraDisableSimulcastStream),会议场景对小流的动态开关不生效。
- 无人订阅小流时,自动关闭小流,节省上行带宽和消耗。
- 有人订阅小流时,开启小流并重置为用户最近一次调用 setDualStreamMode:streamConfig: 时的 AgoraSimulcastStreamConfig 配置。如果用户此前没有进行设置,则使用如下值:
- 视频分辨率:480 × 272
- 视频帧率:15 fps
- 码率:500 Kbps
AgoraApplication1V1Scenario (2) 适用于视频 1v1 通话场景。针对该场景低延迟、高画质的体验要求,SDK 进行了策略调优,提升了画质、首帧出图、中低端机延迟及弱网流畅度等性能表现。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
- -1:一般性的错误(未明确归类)。
- -4:不支持设置视频业务场景。可能的原因是当前使用的是音频 SDK。
- -7:AgoraRtcEngineKit 对象尚未初始化。你需要在调用该方法前成功初始化 AgoraRtcEngineKit 对象。
startPreview
开启视频预览。
- (int)startPreview;
该方法用于启动本地视频预览。
调用时机
该方法必须在 enableVideo 和 setupLocalVideo: 之后调用。
调用限制
- 本地预览默认开启镜像功能。
- 在离开频道后,本地预览依然处于开启状态。你需要调用 stopPreview 关闭本地预览。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startPreview:
开启视频预览并指定预览的视频源。
- (int)startPreview: (AgoraVideoSourceType)sourceType NS_SWIFT_NAME(startPreview(_:));
该方法用于启动本地视频预览,并指定出现在预览画面中的视频源。
调用时机
该方法必须在 enableVideo 和 setupLocalVideo: 之后调用。
调用限制
- 本地预览默认开启镜像功能。
- 在离开频道后,本地预览依然处于开启状态。你需要调用 stopPreview 关闭本地预览。
参数
- sourceType
- 视频源的类型,详见 AgoraVideoSourceType。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
stopPreview
停止视频预览。
- (int)stopPreview;
适用场景
调用 startPreview 开启预览后,如果你想关闭本地视频预览,请调用该方法。
调用时机
请在加入频道前或离开频道后调用该方法。
调用限制
无。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
stopPreview:
停止视频预览。
- (int)stopPreview: (AgoraVideoSourceType)sourceType NS_SWIFT_NAME(stopPreview(_:));
适用场景
调用 startPreview: 开启预览后,如果你想关闭本地视频预览,请调用该方法。
调用时机
请在加入频道前或离开频道后调用该方法。
调用限制
无。
参数
- sourceType
- 视频源的类型,详见 AgoraVideoSourceType。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
rtcEngine:firstLocalVideoFrameWithSize:elapsed:sourceType:
已显示本地视频首帧回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
firstLocalVideoFrameWithSize:(CGSize)size
elapsed:(NSInteger)elapsed
sourceType:(AgoraVideoSourceType)sourceType;
详情
本地视频首帧显示在本地视图上时,SDK 会触发此回调。
参数
- engine
- AgoraRtcEngineKit 对象。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- size
- 本地渲染视频的尺寸。
- elapsed
- 从调用 joinChannelByToken:channelId:info:uid:joinSuccess: 或 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 加入频道时到发生此事件过去的时间(毫秒)。如果在加入频道前调用了 startPreview/startPreview:,则该参数表示从调用 startPreview 或 startPreview: 开启本地视频预览到发生此事件过去的时间。
rtcEngine:firstLocalVideoFramePublishedWithElapsed:sourceType:
已发布本地视频首帧回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
firstLocalVideoFramePublishedWithElapsed:(NSInteger)elapsed
sourceType:(AgoraVideoSourceType)sourceType;
详情
- 开启本地视频模块的情况下,调用 joinChannelByToken:channelId:info:uid:joinSuccess: 或 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 成功加入频道后。
- 调用 muteLocalVideoStream:(
YES
),再调用 muteLocalVideoStream:(NO
) 后。 - 调用 disableVideo,再调用 enableVideo 后。
- 调用 pushExternalVideoFrame:videoTrackId: 成功向 SDK 推送视频帧后。
参数
- engine
- AgoraRtcEngineKit 对象。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- elapsed
- 从调用 joinChannelByToken:channelId:info:uid:joinSuccess: 或 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 方法到触发该回调的时间间隔(毫秒)。
rtcEngine:firstRemoteVideoDecodedOfUid:size:elapsed:
已接收到远端视频并完成解码回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed;
详情
- 远端用户首次上线后发送视频。
- 远端用户视频离线再上线后发送视频。出现这种中断的可能原因包括:
- 远端用户离开频道。
- 远端用户掉线。
- 远端用户调用 disableVideo 方法关闭视频模块。
参数
- uid
- 用户 ID,指定是哪个用户的视频流。
- engine
- AgoraRtcEngineKit 对象。
- size
- 视频流尺寸。
- elapsed
- 从本地调用 joinChannelByToken:channelId:info:uid:joinSuccess: 或 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 开始到该回调触发的延迟(毫秒)。
rtcEngine:firstRemoteVideoFrameOfUid:size:elapsed:
渲染器已接收首帧远端视频回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
firstRemoteVideoFrameOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed;
详情
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 用户 ID,指定是哪个用户的视频流。
- size
- 视频流尺寸。
- elapsed
- 从本地调用 joinChannelByToken:channelId:info:uid:joinSuccess: 或 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 到发生此事件过去的时间(毫秒)。
rtcEngine:localVideoStateChangedOfState:reason:sourceType:
本地视频状态发生改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine localVideoStateChangedOfState:(AgoraVideoLocalState)state reason:(AgoraLocalVideoStreamReason)reason sourceType:(AgoraVideoSourceType)sourceType NS_SWIFT_NAME(rtcEngine(_:localVideoStateChangedOf:reason:sourceType:));
本地视频的状态发生改变时,SDK 会触发该回调,报告当前的本地视频状态以及状态改变的原因。
适用场景
你可以通过该回调及时了解本地视频流的状态变化,并根据状态改变的原因采取相应的措施,更好地管理和调试视频流相关的问题。
触发时机
- SDK 会在如下情况触发该回调,且 state 为 AgoraVideoLocalStateFailed,reason 为
AgoraLocalVideoStreamReasonCaptureFailure
:- 应用退到后台,系统回收摄像头。
- 摄像头正常启动,但连续 4 秒都没有输出采集的视频。
- 当摄像头输出采集的视频帧时,如果 SDK 检测到连续 15 个重复的视频帧,会触发该回调,且 state 为 AgoraVideoLocalStateCapturing,reason 为 AgoraLocalVideoStreamReasonCaptureFailure。 信息帧重复检测仅针对分辨率大于 200 × 200、帧率大于等于 10 fps、码率小于 20 Kbps 的视频帧。
使用限制
对某些机型而言,当本地视频采集设备正在使用中时,SDK 不会在本地视频状态发生改变时触发该回调,你需要自行做超时判断。
参数
- engine
- AgoraRtcEngineKit 对象。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- state
本地视频状态,详见 AgoraVideoLocalState。
- reason
本地视频状态改变原因,详见 AgoraLocalVideoStreamReason。
rtcEngine:localVideoStats:sourceType:
本地视频流统计信息回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
localVideoStats:(AgoraRtcLocalVideoStats * _Nonnull)stats
sourceType:(AgoraVideoSourceType)sourceType;
详情
该回调描述本地设备发送视频流的统计信息,每 2 秒触发一次。
参数
- engine
- AgoraRtcEngineKit 对象。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- stats
- 本地视频流统计信息。详见 AgoraRtcLocalVideoStats。
rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed:
远端视频状态发生改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state reason:(AgoraVideoRemoteReason)reason elapsed:(NSInteger)elapsed;
详情
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 发生视频状态改变的远端用户 ID。
- state
远端视频流状态,详见 AgoraVideoRemoteState。
- reason
远端视频流状态改变的具体原因,详见 AgoraVideoRemoteReason。
- elapsed
- 从本地用户调用 joinChannelByToken:channelId:uid:mediaOptions:joinSuccess: 方法到发生本事件经历的时间,单位为毫秒。
rtcEngine:remoteVideoStats:
通话中远端视频流的统计信息回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
remoteVideoStats:(AgoraRtcRemoteVideoStats * _Nonnull)stats;
详情
该回调描述远端用户在通话中端到端的视频流统计信息, 针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播, 该回调每 2 秒会被触发多次。
参数
- engine
- AgoraRtcEngineKit 对象。
- stats
- 远端视频统计数据。详见 AgoraRtcRemoteVideoStats。
rtcEngine:videoTransportStatsOfUid:delay:lost:rxKBitRate:
通话中远端视频流传输的统计信息回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
videoTransportStatsOfUid:(NSUInteger)uid
delay:(NSUInteger)delay
lost:(NSUInteger)lost
rxKBitRate:(NSUInteger)rxKBitRate;
详情
该回调描述远端用户通话中端到端的网络统计信息,通过视频包计算,用客观的数据,如丢包、 网络延迟等,展示当前网络状态。
通话中,当用户收到远端用户/主播发送的视频数据包后,会每 2 秒触发一次该回调。
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 用户 ID,指定是哪个用户/主播的视频包。
- delay
- 视频包从发送端到接收端的延时(毫秒)。
- lost
- 视频包从发送端到接收端的丢包率 (%)。
- rxKBitRate
- 远端视频包的接收码率(Kbps)。
rtcEngine:didLocalVideoEnabled:byUid:
远端用户开/关本地视频采集回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
didLocalVideoEnabled:(BOOL)enabled
byUid:(NSUInteger)uid
详情
- AgoraVideoRemoteStateStopped(0) 和 AgoraVideoRemoteReasonRemoteMuted(5)。
- AgoraVideoRemoteStateDecoding (2) 和 AgoraVideoRemoteReasonRemoteUnmuted(6)。
该回调是由远端用户调用 enableLocalVideo: 方法开启或关闭视频采集触发的。
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 用户 ID,提示是哪个用户的视频流。
- enabled
- 远端用户是否启用视频采集:
-
YES
: 该用户已启用视频功能。启用后,其他用户可以接收到该用户的视频流。 -
NO
: 该用户已关闭视频功能。关闭后,该用户仍然可以接收其他用户的视频流,但其他用户接收不到该用户的视频流。
-
rtcEngine:didVideoEnabled:byUid:
远端用户开/关视频模块回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
didVideoEnabled:(BOOL)enabled
byUid:(NSUInteger)uid
详情
关闭视频功能是指该用户只能进行语音通话,不能显示、发送自己的视频,也不能接收、显示别人的视频。
该回调是由远端用户调用 enableVideo 或 disableVideo 方法开启或关闭视频模块触发的。
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 用户 ID,提示是哪个用户的视频流。
- enabled
-
YES
: 该用户已启用视频功能。 -
NO
: 该用户已关闭视频功能。
-
rtcEngine:didVideoMuted:byUid:
远端用户取消或恢复发布视频流回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid
详情
当远端用户调用 muteLocalVideoStream: 取消或恢复发布视频流时,SDK 会触发该回调向本地用户报告远端用户的发流状况。
参数
- engine
- AgoraRtcEngineKit 对象。
- uid
- 远端用户 ID。
- muted
- 远端用户是否取消发布视频流:
YES
: 取消发布视频流。NO
: 发布视频流。
rtcEngine:didVideoPublishStateChange:sourceType:oldState:newState:elapseSinceLastState:
视频发布状态改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine didVideoPublishStateChange:(NSString * _Nonnull)channelId
sourceType:(AgoraVideoSourceType)sourceType
oldState:(AgoraStreamPublishState)oldState
newState:(AgoraStreamPublishState)newState
elapseSinceLastState:(int)elapseSinceLastState;
参数
- engine
- AgoraRtcEngineKit 对象。
- channelId
- 频道名。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- oldState
- 之前的发布状态,详见 AgoraStreamPublishState。
- newState
- 当前的发布状态,详见 AgoraStreamPublishState。
- elapseSinceLastState
- 两次状态变化时间间隔(毫秒)。
rtcEngine:videoSizeChangedOfSourceType:uid:size:rotation:
本地或远端视频大小和旋转信息发生改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine videoSizeChangedOfSourceType:(AgoraVideoSourceType)sourceType uid:(NSString * _Nonnull)uid size:(CGSize)size rotation:(NSInteger)rotation NS_SWIFT_NAME(rtcEngine(_:videoSizeChangedOf:uid:size:rotation:));
参数
- engine
- AgoraRtcEngineKit 对象。
- sourceType
- 视频源的类型。详见 AgoraVideoSourceType。
- uid
- 图像尺寸和旋转信息发生变化的用户 ID(本地用户的 uid 为 0。此时视频为本地用户的视频预览)。
- size
- 视频流的尺寸。
- rotation
- 旋转信息,取值范围 [0,360)。信息该参数值始终为 0。
rtcEngineVideoDidStop:
视频功能已停止回调。
- (void)rtcEngineVideoDidStop:(AgoraRtcEngineKit * _Nonnull)engine;
详情
App 如需在停止视频后对 view 做其他处理(比如显示其他画面),可以在这个回调中进行。
参数
- engine
- AgoraRtcEngineKit 对象。