human: 如何处理七牛云的实时音视频音视频采集

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Linux >音视频采集

#  音视频采集

最近更新时间: 2022-05-24 22:25:56

音视频交互的基本单位，本部分介绍音视频 track 的创建及采集等功能的使用。

## 摄像头视频 Track

[QNCameraVideoTrack](https://developer.qiniu.com/rtc/api/11198/QNCameraVideoTrack-
Linux) 为摄像头采集的本地 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](https://developer.qiniu.com/rtc/api/11201/QNCameraVideoTrackConfig-
Linux) 用来配置摄像头采集参数和编码参数。

在创建好
[QNCameraVideoTrack](https://developer.qiniu.com/rtc/api/11198/QNCameraVideoTrack-
Linux) 之后，就可以通过调用 SDK 提供的相关方法进行摄像头的相关操作：

### 开启/关闭镜像

    
    
    virtual void SetMirror(bool mirror) = 0;
    

## 外部导入视频 track

SDK 外部导入视频连麦仅支持导入 **kI420 数据** 格式的数据，使用方式如下：

### I420 track

#### 创建 I420 track

[QNCustomVideoTrack](https://developer.qiniu.com/rtc/api/11205/QNCustomVideoTrack-
Linux) 为外部数据导入视频 track，创建方式如下：

    
    
    QNCustomVideoTrackConfig video_track_config;
    video_track_config.encoder_config = {width, height, fps, bitrate};
    QNCustomVideoTrack video_track = QNRTC::CreateCustomVideoTrack(video_track_config);
    

其中，[QNCustomVideoTrackConfig](https://developer.qiniu.com/rtc/api/11206/QNCustomVideoTrackConfig-
Linux) 用来配置视频的编码参数，包括分辨率、帧率和码率（kbps）等。

#### 导入 I420 数据

SDK 支持导入 I420 的数据，在创建好
[QNCustomVideoTrack](https://developer.qiniu.com/rtc/api/11205/QNCustomVideoTrack-
Linux) 之后，可通过如下方式推送数据：

    
    
      /**
       * 推送自定义视频帧
       *
       * @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](https://developer.qiniu.com/rtc/api/11205/QNCustomVideoTrack-
Linux) 为外部数据导入视频 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](https://developer.qiniu.com/rtc/api/11205/QNCustomVideoTrack-
Linux) 之后，可通过如下方式推送数据：

    
    
      /**
       * 推送自定义视频帧
       *
       * @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](https://developer.qiniu.com/rtc/api/11210/QNMicrophoneAudioTrack-
Linux) 为麦克风采集的音频 track，如需以麦克风采集数据作为音频源，仅需创建一个
[QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/api/11210/QNMicrophoneAudioTrack-
Linux) 并发布即可，其创建方式如下：

    
    
    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](https://developer.qiniu.com/rtc/api/11211/QNMicrophoneAudioTrackConfig-
Linux) 包括音频的码率等，这里麦克风的采样率、声道数等由系统录制设备控制

> **注意：SDK 当前仅支持一路音频
> Track，因此，在创建了[QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/api/11210/QNMicrophoneAudioTrack-
> Linux) 之后，将无法再创建
> [QNCustomAudioTrack](https://developer.qiniu.com/rtc/api/11203/QNCustomAudioTrack-
> Linux) 实例**

## 外部导入音频 Track

[QNCustomAudioTrack](https://developer.qiniu.com/rtc/api/11203/QNCustomAudioTrack-
Linux) 为外部导入音频 track，如需导入音频数据作为音频源，仅需创建一个
[QNCustomAudioTrack](https://developer.qiniu.com/rtc/api/11203/QNCustomAudioTrack-
Linux) 即可，然后通过调用 `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](https://developer.qiniu.com/rtc/api/11203/QNCustomAudioTrack-
> Linux) 之后，将无法再创建
> [QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/api/11210/QNMicrophoneAudioTrack-
> Linux) 实例**

以上内容是否对您有帮助？