音视频采集
音视频交互的基本单位,本部分介绍音视频 track 的创建及采集等功能的使用。
摄像头视频 Track
QNCameraVideoTrack 为摄像头采集的本地 track,其创建方式如下:
QNCameraVideoTrackConfig video_track_config;
video_track_config.id = camera_device_id;
video_track_config.capture_config = {width, height, fps};
video_track_config.encoder_config = {width, height, fps, bitrate};
QNCameraVideoTrack video_track = QNRTC::CreateCameraVideoTrack(video_track_config);
其中:
QNCameraVideoTrackConfig 用来配置摄像头采集参数和编码参数。
在创建好 QNCameraVideoTrack 之后,就可以通过调用 SDK 提供的相关方法进行摄像头的相关操作:
开启/关闭镜像
virtual void SetMirror(bool mirror) = 0;
外部导入视频 track
SDK 外部导入视频连麦仅支持导入 kI420 数据 格式的数据,使用方式如下:
I420 track
创建 I420 track
QNCustomVideoTrack 为外部数据导入视频 track,创建方式如下:
QNCustomVideoTrackConfig video_track_config;
video_track_config.encoder_config = {width, height, fps, bitrate};
QNCustomVideoTrack video_track = QNRTC::CreateCustomVideoTrack(video_track_config);
其中,QNCustomVideoTrackConfig 用来配置视频的编码参数,包括分辨率、帧率和码率(kbps)等。
导入 I420 数据
SDK 支持导入 I420 的数据,在创建好 QNCustomVideoTrack 之后,可通过如下方式推送数据:
/**
* 推送自定义视频帧
*
* @param data 视频数据
* @param data_size 数据长度
* @param width 图像宽度
* @param height 图像高度
* @param timestamp_us 时间戳,注意单位为:微妙
* @param video_frame_type 视频原始格式,目前支持:kI420, kH264Raw
* @param rotation 导入后旋转角度,如果不需要旋转则使用默认值 kVideoRotation0, H264 不支持这个属性
* 即可
* @param mirror 导入后是否镜像, H264 不支持这个属性
*/
virtual int32_t PushVideoFrame(const uint8_t* data, const uint32_t data_size,
const int32_t width, const int32_t height,
const int64_t timestamp_us,
QNVideoFrameType video_frame_type,
QNVideoRotation rotation,
bool mirror = false) = 0;
H264 track
创建 H264 track
QNCustomVideoTrack 为外部数据导入视频 track,创建方式如下:
// 注意: 初始化时, QNRTCSetting.encoder_type 需要设置为 kExternal
QNCustomVideoTrackConfig video_track_config;
// H264 编码配置
video_track_config.encoder_config = {width, height, fps, bitrate};
// 必须添加以下这句
video_track_config.frame_type = QNVideoFrameType::kH264Raw;
QNCustomVideoTrack video_track = QNRTC::CreateCustomVideoTrack(video_track_config);
导入 H264 数据
SDK 支持导入 H264 的数据,在创建好 QNCustomVideoTrack 之后,可通过如下方式推送数据:
/**
* 推送自定义视频帧
*
* @param data 视频数据,必须为完整的一帧 h264 数据
* @param data_size 数据长度
* @param width 图像宽度
* @param height 图像高度
* @param timestamp_us 时间戳,注意单位为:微妙
* @param video_frame_type 视频原始格式,目前支持:kI420, kH264Raw
* @param rotation 导入后旋转角度,如果不需要旋转则使用默认值 kVideoRotation0, H264 不支持这个属性
* 即可
* @param mirror 导入后是否镜像, H264 不支持这个属性
*/
virtual int32_t PushVideoFrame(const uint8_t* data, const uint32_t data_size,
const int32_t width, const int32_t height,
const int64_t timestamp_us,
QNVideoFrameType video_frame_type,
QNVideoRotation rotation,
bool mirror = false) = 0;
麦克风音频 Track
QNMicrophoneAudioTrack 为麦克风采集的音频 track,如需以麦克风采集数据作为音频源,仅需创建一个 QNMicrophoneAudioTrack 并发布即可,其创建方式如下:
QNMicrophoneAudioTrackConfig audio_track_config;
audio_track_config.audio_quality = {sample_rate, channels, bits_per_sample, bitrate};
QNMicrophoneAudioTrack audio_track = QNRTC::CreateMicrophoneAudioTrack(audio_track_config);
其中,QNMicrophoneAudioTrackConfig 包括音频的码率等,这里麦克风的采样率、声道数等由系统录制设备控制
注意:SDK 当前仅支持一路音频 Track,因此,在创建了 QNMicrophoneAudioTrack 之后,将无法再创建 QNCustomAudioTrack 实例
外部导入音频 Track
QNCustomAudioTrack 为外部导入音频 track,如需导入音频数据作为音频源,仅需创建一个 QNCustomAudioTrack 即可,然后通过调用 QNCustomAudioTrack.PushAudioFrame
进行外部音频数据的导入。
支持的音频数据格式为:PCM 格式。
使用方式可参考如下示例:
/**
* 推送自定义音频帧
*
* @param data 音频数据
* @param data_size 数据长度
* @param bits_per_sample 位宽,即每个采样点占用位数
* @param sample_rate 采样率
* @param channels 声道数
*/
virtual int32_t PushAudioFrame(const uint8_t* data, uint32_t data_size,
uint32_t bits_per_sample, uint32_t sample_rate,
uint32_t channels) = 0;
注意:SDK 当前仅支持一路音频 Track,因此,在创建了 QNCustomAudioTrack 之后,将无法再创建 QNMicrophoneAudioTrack 实例