IM 即时通讯 (438)
Android (207)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (15)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (33)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (166)
- SDK 导入 (8)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (25)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (3)
- 音视频 (4)
- 其他 (23)
Web (36)
Server (29)
音视频获取原始数据(自定义美颜)
如何通过 Callkit 和 Calllib 获取音视频的原始数据;
发布时间: 2017-10-16 18:30
回答:
1 注册观察者:RCCall.mm 中单列初始化方法s haredRCCall 已经实现注册功能(默认代码是注释掉的)
agoraRegisterVideoFrameObserver(RCDVideoFrameObserver::sharedObserver(), true, true); agoraRegisterAudioFrameObserver(RCDAudioFrameObserver::sharedObserver());
在注册视频观察者时,注意对参数对理解; 参数解释参考 IVideoFrameObserver.h 文件,也可参考 2.1.1 中的解释;
源码中 RCCall 中是在 sharedRCCall 方法中注册的 observer。实际使用的时候在这里注册不会生效,请在发起视频通话 (startSingleCall/startMultiCall) 和接收通话 (didReceiveCall) 的时候注册。
2 在回调中操作音视频的原始数据
2.1 视频,RCDVideoFrameObserver:
2.1.1获取原始视频:
bool RCDVideoFrameObserver::onCaptureVideoFrame(agora::media::IVideoFrameObserver::VideoFrame& videoFrame);
对于注册观察者的api:
int agoraRegisterVideoFrameObserver(agora::media::IVideoFrameObserver *observer, bool useExternalResource = false, bool localPreview = true);
如果使用外部视频源,useExternalResource 设置为 true,在此回调中将你的视频源传入即可;
如果需要获取设备摄像头数据,useExternalResource 设置为 false,在此回调中获取到每帧的数据做处理(美颜);
Callkit 默认在此回调里绘制一个十字架,具体参考 Callki t的源码;
2.1.2 在 VoIP 中获取其他用户的视频数据:
bool RCDVideoFrameObserver::onRenderVideoFrame(unsigned int uid, agora::media::IVideoFrameObserver::VideoFrame& videoFrame);
2.1.3 设置图像格式(可忽略):
void RCDVideoFrameObserver::setYUV(unsigned char *yBuffer, unsigned char *uBuffer, unsigned char *vBuffer, int width, int height);
2.2 音频,RCDAudioFrameObserver:
2.2.1 获得录制的声音:
bool RCDAudioFrameObserver::onRecordAudioFrame(agora::media::IAudioFrameObserver::AudioFrame& audioFrame):
2.2.2 获得播放的声音:
bool RCDAudioFrameObserver::onPlaybackAudioFrame(agora::media::IAudioFrameObserver::AudioFrame& audioFrame)
2.2.3 获取录制和播放语音混音后的数据:
bool RCDAudioFrameObserver::onMixedAudioFrame(agora::media::IAudioFrameObserver::AudioFrame &audioFrame)
2.2.4 获得单个用户播放的声音:
bool RCDAudioFrameObserver::onPlaybackAudioFrameBeforeMixing(unsigned int uid, agora::media::IAudioFrameObserver::AudioFrame& audioFrame)