音视频外部采集
简介
Pano SDK 支持由开发者进行音视频外部采集(也称自定义采集),支持自行处理音频播放和视频数据渲染。
对于音频,一个简化的音频处理流程如下:
采集* --> 3A前处理* --> 编码 --> 发送 --> 接收 --> Jitter Buffer --> 解码 --> 播放*
* 3A前处理是指:AEC (Acoustic Echo Cancellation 回声消除)、AGC (Automatic Gain Control 自动增益控制)、ANS (Automatic Noise Suppression 自动降噪)
Pano SDK 支持由开发者自行处理采集和播放环节。
各端 SDK 相关接口,请查看下列介绍:
Windows (C++)
音频外部采集与外部播放
通过 RtcEngine
对象的 getAudioDeviceManager
方法获取音频设备管理器(AudioDeviceManager
)。
- 通过
AudioDeviceManager
对象的getExternalRecorder
方法获取外接音频录制设备(RtcExternalAudioRecorder
)。- 通过
RtcExternalAudioRecorder
对象的setEnableStatus
方法设置外接音频录制设备的启用状态,pushData
方法推送外部采集的音频数据给 Pano SDK。
- 通过
- 通过
AudioDeviceManager
对象的getExternalPlayer
方法获取外接音频播放设备(RtcExternalAudioPlayer
)。- 通过
RtcExternalAudioPlayer
对象的setEnableStatus
方法设置外接音频播放设备的启用状态,pullData
方法从 Pano SDK 拉取音频数据。
- 通过
- 启用外接音频录制设备后,SDK 将不再采集音频,而使用外部采集的音频数据;
- 启用外接音频播放设备后,SDK 将不再播放音频,而交由外部处理播放音频数据;
- 可以同时启用外接音频录制设备和外接音频播放设备;
- 还可以同时结合 音视频数据回调 功能实现更灵活的高级处理。
视频外部采集
通过 RtcEngine
对象的 getVideoDeviceManager
方法获取视频设备管理器(VideoDeviceManager
)。
- 通过
VideoDeviceManager
对象的createExternalCapturer
方法创建外接视频采集设备(RtcExternalVideoCapturer
)。- 通过
RtcExternalVideoCapturer
对象的getDeviceID
方法获取外接视频采集设备 ID,putData
方法输入外部采集的视频数据给 Pano SDK。
- 通过
- 通过
VideoDeviceManager
对象的setDevice
方法设置使用视频采集设备,startPreview
方法进行预览。
视频外部渲染
以下接口均支持设置外部数据接收漕(RtcRenderSink
),来接收渲染数据地址(buffer
),以便开发者自行渲染:
VideoDeviceManager::startPreview
开启本地预览RtcEngine::startVideo
发送本地视频RtcEngine::subscribeVideo
订阅其他用户的视频
Android (Java)
音频外部采集与外部播放
- 通过
RtcEngine
对象的getExternalAudioRecorder
方法获取外接音频录制设备接口(RtcExternalAudioRecorder
)。- 通过
RtcExternalAudioRecorder
对象的setEnableStatus
方法设置外接音频录制设备的启用状态,pushData
方法推送外部采集的音频数据给 Pano SDK。
pushData
方法的参数RtcAudioDataFormat format
中,type
设置为0
表示数据类型为 PCM。 - 通过
- 通过
RtcEngine
对象的getExternalAudioPlayer
方法获取外接音频播放设备接口(RtcExternalAudioPlayer
)。- 通过
RtcExternalAudioPlayer
对象的setEnableStatus
方法设置外接音频播放设备的启用状态,pullData
方法从 Pano SDK 拉取音频数据。
- 通过
- 启用外接音频录制设备后,SDK 将不再采集音频,而使用外部采集的音频数据;
- 启用外接音频播放设备后,SDK 将不再播放音频,而交由外部处理播放音频数据;
- 可以同时启用外接音频录制设备和外接音频播放设备;
- 还可以同时结合 音视频数据回调 功能实现更灵活的高级处理。
视频外部采集
暂不支持。
视频外部渲染
以下接口的 IVideoRender render
参数支持由开发者自行实现其 onFrame(VideoFrame videoFrame)
方法来处理数据。
RtcEngine.setLocalVideoRender(IVideoRender render)
设置本地用户的视频画布RtcEngine.setRemoteVideoRender(long userId, IVideoRender render)
设置远端用户的视频画布
示例代码:
public class MyRtcView implements IVideoRender {
...
@Override
public void onFrame(VideoFrame videoFrame) {
// 由开发者自行处理 VideoFrame
}
}
iOS/macOS (Objective-C)
音频外部采集与外部播放
- 通过
PanoRtcEngineKit
对象的- externalAudioRecorder
方法获取外接音频录制设备(PanoRtcExternalAudioRecorder
)。- 通过
PanoRtcExternalAudioRecorder
对象的- setEnableStatus:withSampleRate:channels:
方法设置外接音频录制设备的启用状态,- pushData:withLength:format:timestamp:
方法推送外部采集的音频数据给 Pano SDK。
- 通过
- 通过
PanoRtcEngineKit
对象的- externalAudioPlayer
方法获取外接音频播放设备接口(PanoRtcExternalAudioPlayer
)。- 通过
PanoRtcExternalAudioPlayer
对象的- setEnableStatus:withSampleRate:channels:
方法设置外接音频播放设备的启用状态,- pullData:withLength:format:timestamp:
方法从 Pano SDK 拉取音频数据。
- 通过
- 启用外接音频录制设备后,SDK 将不再采集音频,而使用外部采集的音频数据;
- 启用外接音频播放设备后,SDK 将不再播放音频,而交由外部处理播放音频数据;
- 可以同时启用外接音频录制设备和外接音频播放设备;
- 还可以同时结合 音视频数据回调 功能实现更灵活的高级处理。
视频外部采集
暂不支持。
视频外部渲染
PanoRtcEngineKit
类以下接口的 delegate
参数支持由开发者自行实现 PanoRtcRenderDelegate
的 - onRenderVideoData:withLength:format:timestamp:
方法来处理数据。
- startPreviewWithDelegate:profile:
开启本地预览- startVideoWithDelegate:profile:
发送本地视频- subscribeVideo:withDelegate:profile:
订阅其他用户的视频