音视频数据回调

音视频流数据回调事件图解

App 通过设置采集器实例(RongRTCAVCapturer)设置音视频数据回调函数, SDK 内部的音频和视频的相关回调均通过该采集器回调函数返回给 App,App 处理完音视频数据后回传给 SDK,由 SDK 进行音视频的发送

本端音频采集回调:将本端采集的音频回调给 App 处理

远端音频采集回调:将远端采集的音频回调给 App 处理

本端视频采集发送前回调:视频帧发送前会回调给 App 先进行预处理

本端视频本地预览前回调:视频帧本地显示前回调给 App 先进行预处理

1、发送端音频

发送端音频数据回调可以通过设置 audioBufferCallback 回调的 block 来进行监听,SDK 在发送音频前会回调该数据,用户可以修改音频数据实现个性化音效。

/**
 接收到音频或者发送音频时的音频数据,用户可以直接处理该音频数据,读取 audioBufferCallback 中的 isOutput 即可判断是输入还是输出
 */
@property (nonatomic,copy,nullable) RongRTCAudioPCMBufferCallback audioBufferCallback;

2、发送端视频

发送端视频分为两个回调:

1. 即将发送视频帧时的回调,用户处理完成后将视频帧返回给 SDK,由 SDK 直接进行发送从而达到发送视频帧修改的目的。

2. 本地视频即将显示的帧回调,APP 可以操作该视频帧达到本地视频预览的修改目的
/**
 引擎底部开始视频编码并发送之前会往上层抛一个回调,用户可以修改和调整 CMSampleBufferRef 数据,然后返回一个 CMSampleBufferRef 数据,如果返回空或者没有实现该回调,则会使用默认视频数据传输

 注:如果用户传正常数据,则内部会自行 CFRelease CMSampleBufferRef 对象,上层不需要再考虑释放问题
 */
@property (nonatomic,copy,nullable) RongRTCVideoCMSampleBufferCallback videoSendBufferCallback;

/**
 本地摄像头采集的视频在即将预览前会往上层抛一个视频帧回调,用户可以处理视频帧数据之后然后回传给 RTC,RTC 使用用户处理的视频帧进行预览

  注:如果用户传正常数据,则内部会自行 CFRelease CMSampleBufferRef 对象,上层不需要再考虑释放问题
 */
@property (nonatomic,copy,nullable) RongRTCVideoCMSampleBufferCallback videoDisplayBufferCallback;

3、接收端音频

接收端音频和发送端音频共用一个回调,通过其中属性 isOutput 来判断是本端数据还是远端输入

/**
 接收到音频或者发送音频时的音频数据,用户可以直接处理该音频数据,读取 audioBufferCallback 中的 isOutput 即可判断是输入还是输出
 */
@property (nonatomic,copy,nullable) RongRTCAudioPCMBufferCallback audioBufferCallback;

4、接收端视频

接收端视频用户需要设置 RongRTCAVInputStream (用户订阅的流对象)的代理,实现代理方法即可实现远端视频帧的回调处理,用户可以基于该视频帧做相应的个性化定制。

/**
 音视频流的delegate
 */
@protocol RongRTCAVInputStreamDelegate <NSObject>
/**
  视图即将渲染某个视频帧,如果如果需要自定义视频显示的话需要修改该视频帧

 @param ref 即将渲染的视频帧数据
 @param stream 用户需要渲染的视频帧数据
 */
-(void)willRenderCVPixelBufferRef:(CVPixelBufferRef)ref stream:(RongRTCAVInputStream *)stream;

@end