数据导入
音频
当用户需要使用外部音频数据源进行通话,而非使用 SDK 内置的麦克风采集时,那么请使用接口 EnableAudioFakeInput(true)
关闭内置音频采集,并激活外部音频数据导入功能,然后按照固定频率导入音频 PCM 数据格式即可,接口为 InputAudioFrame
,目前支持的 PCM 格式如下:
- 采样率:支持各种采样率
- 位深:16bits per sample
- 声道数:单、双声道
- 数据存储格式:packet 交叉存储
注意事项:
- 当前 SDK 内部传输格式为单声道,外部导入双声道数据后,SDK 内部会自动转换为单声道然后进行后续处理;
- 使用音频数据导入功能时,时间戳将根据实时导入的 PCM 数据进行累加计算,无需外部传入,外部务必保证数据导入频率均匀切稳定,比如:每次导入 20ms 的 PCM 数据,那么一秒钟内需导入 50 帧左右,否则可能会出现声音的卡顿等异常;
导入外部音频数据涉及 QNRTCAudio
中以下三个接口,分别如下:
// 开启或关闭外部音频导入的功能,需在 Publish 之前进行调用
// @param enable_flag_ true:开启;false:关闭
// @return 是否开启成功,如果失败则返回非 0 值
virtual int EnableAudioFakeInput(bool enable_flag_) = 0;
// 导入外部音频 PCM 数据,目前仅支持 signed 16bit per sample, mono 和 stereo 声道数;
// 导入外部音频数据需要均匀控制频率,过高或过低均会导致连麦语音质量的下降
// @param audio_data_ PCM 数据指针
// @param data_size_ 数据大小
// @param bits_per_sample_ 位深,目前仅支持 16bit
// @param sample_rate_ 输入音频数据的采样率
// @param number_of_channels_ 输入音频的声道数
// @param number_of_frames_ audio_data_ 数据中包含的采样点数(每声道)
virtual int InputAudioFrame(
const void* audio_data_,
unsigned int data_size_,
unsigned int bits_per_sample_,
unsigned int sample_rate_,
unsigned int number_of_channels_,
unsigned int number_of_frames_
) = 0;
// 判断是否激活了导入外部音频数据的功能
virtual bool IsEnableAudioFakeInput() = 0;
视频
SDK 提供此接口供用户导入自己的视频数据,同时关闭 SDK 内部的视频采集模块;
注意事项:
- 目前支持导入的原始视频数据格式包括:kI420、kYUY2 和 kRGB24;
- 目前 SDK 内部支持的最大分辨率为 4K * 2K;
- 导入视频数据时时间戳单位为
微妙
,如果用户导入数据时间戳不均匀的话,将会导致画面卡顿; - 如果用户发现音画不同步的现象,可以通过调整视频导入的时间戳进行校正;
导入外部视频数据涉及 QNRTCVideo
中以下三个接口,分别如下:
// 开启或关闭外部视频导入的功能,需在 Publish 之前进行调用
// @param enable_flag_ true:开启;false:关闭
// @return 是否开启成功,如果失败则返回非 0 值
virtual int EnableVideoFakeCamera(bool enable_flag_) = 0;
// 实时导入外部视频原始数据,目前支持 kI420 kYUY2 kRGB24 格式
// @param data_ 原始视频数据指针
// @param data_size_ 原始视频数据大小
// @param width_ 导入视频的宽度
// @param height_ 导入视频的高度
// @param timestamp_us_ 视频时间戳,单位:微妙
// @param raw_type_ 导入视频的数据格式,目前支持的格式为:kI420 kYUY2 kRGB24
// @param rotation_ 导入后视频旋转角度,默认不旋转
// @param mirror_flag_ 导入后是否镜像(水平旋转)
virtual int InputVideoFrame(
const unsigned char* data_,
const unsigned int& data_size_,
const unsigned int& width_,
const unsigned int& height_,
const unsigned long long& timestamp_us_,
qiniu::VideoCaptureType raw_type_,
qiniu::VideoRotation rotation_ = kVideoRotation_0,
bool mirror_flag_ = false
) = 0;
// 判断是否激活了导入外部视频数据的功能
virtual bool IsEnableVideoFakeCamera() = 0;
注意:
使用外部数据导入功能,需要在调用 QNRTCRoom::Publish
接口前分别调用 EnableAudioFakeInput
和 EnableVideoFakeCamera
激活相应的数据导入模块;