human: 如何处理七牛云的实时音视频迁移指南

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Web >迁移指南

#  迁移指南

最近更新时间: 2022-07-14 15:47:07

QNRTC Web SDK 4.x 是一个全量重构版本，简化了接口调用逻辑，提高了接口的易用性，提供了更友好的事件监听机制。

# 概览

在 4.x 版本 SDK 中，我们提供了
[QNRTC](https://developer.qiniu.com/rtc/api/9070/WebQNRTC) 和
[QNRTCClient](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient)
两个类来管理房间和音视频流的采集、发布、订阅等操作。

  * [QNRTC](https://developer.qiniu.com/rtc/api/9070/WebQNRTC) 主要负责处理 SDK 全局配置以及本地音视频 track 的创建采集等房间无关的操作。
  * [QNRTCClient](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient) 主要负责处理房间的加入、离开，音视频 track 的发布、订阅等房间交互相关的操作。

上述管理方式的改动将影响到 SDK 的主要交互流程，若您需要升级，可以参考 [RTC 4.x
使用指南](https://developer.qiniu.com/rtc/9386/user-guidance-web) 的使用姿势分模块进行更新。

# 设备管理

v4.x 统一在 [QNRTC](https://developer.qiniu.com/rtc/api/9070/WebQNRTC) 对象上实现设备管理。

可以通过下面几个方法来分别获取摄像头、麦克风和音频播放设备：

  * [getCameras](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#getCameras)
  * [getMicrophones](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#getMicrophones)
  * [getPlaybackDevices](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#getPlaybackDevices)
  * [getDevices](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#getDevices)

可以通过配置下面三个回调函数，来实时监听当前媒体设备的变化：

  * [onCameraChanged](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#onCameraChanged)
  * [onMicrophoneChanged](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#onMicrophoneChanged)
  * [onPlaybackDeviceChanged](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#onPlaybackDeviceChanged)

# track 的定义及使用方式

在 4.x 版本 SDK 中，我们细化了音视频 track 的分类，基于不同类型的 track 提供了不同的控制接口，新版本的 track 对本地
track 和远端 track 做了区分，继承结构定义如下：

  * [QNTrack](https://developer.qiniu.com/rtc/api/9076/WebQNTrack)
    * [QNLocalTrack](https://developer.qiniu.com/rtc/api/9085/WebQNLocalTrack)
      * [QNLocalAudioTrack](https://developer.qiniu.com/rtc/api/9089/WebQNLocalAudioTrack)
        * [QNMicrophoneAudioTrack](https://developer.qiniu.com/rtc/api/9064/WebQNMicrophoneAudioTrack)
        * [QNBufferSourceAudioTrack](https://developer.qiniu.com/rtc/api/9069/WebQNBufferSourceAudioTrack)
        * [QNCustomAudioTrack](https://developer.qiniu.com/rtc/api/9091/WebQNCustomAudioTrack)
      * [QNLocalVideoTrack](https://developer.qiniu.com/rtc/api/9061/WebQNLocalVideoTrack)
        * [QNCameraVideoTrack](https://developer.qiniu.com/rtc/api/9068/WebQNCameraVideoTrack)
        * [QNScreenVideoTrack](https://developer.qiniu.com/rtc/api/9092/WebQNScreenVideoTrack)
        * [QNCustomVideoTrack](https://developer.qiniu.com/rtc/api/9088/WebQNCustomVideoTrack)
    * [QNRemoteTrack](https://developer.qiniu.com/rtc/api/9082/WebQNRemoteTrack)
      * [QNRemoteAudioTrack](https://developer.qiniu.com/rtc/api/9087/WebQNRemoteAudioTrack)
      * [QNRemoteVideoTrack](https://developer.qiniu.com/rtc/api/9060/WebQNRemoteVideoTrack)

v4.x 版本除了对音视频 track 的结构进行了调整，还将部分 track 的操作接口从 `deviceManager` 移到了 track 上。

对从本地采集的角度来说，在 [QNRTC](https://developer.qiniu.com/rtc/api/9070/WebQNRTC)
对象中提供了采集本地 track 的方法：

  * [createCameraVideoTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createCameraVideoTrack)
  * [createMicrophoneAudioTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createMicrophoneAudioTrack)
  * [createMicrophoneAndCameraTracks](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createMicrophoneAndCameraTracks)
  * [createBufferSourceAudioTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createBufferSourceAudioTrack)
  * [createScreenVideoTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createScreenVideoTrack)
  * [createCustomAudioTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createCustomAudioTrack)
  * [createCustomVideoTrack](https://developer.qiniu.com/rtc/api/9070/WebQNRTC#createCustomVideoTrack)

对订阅远端的媒体流来来说，当远端发布时，本地可以通过监听
[QNRTCClient](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient) 上的
`user-published` 事件来获取远端媒体流
[QNRemoteTrack](https://developer.qiniu.com/rtc/api/9082/WebQNRemoteTrack)
对象。当订阅成功之后，可以获得对应的
[QNRemoteAudioTrack](https://developer.qiniu.com/rtc/api/9087/WebQNRemoteAudioTrack)
和
[QNRemoteVideoTrack](https://developer.qiniu.com/rtc/api/9060/WebQNRemoteVideoTrack)
对象。

# 房间管理

在 4.x 版本中，创建房间对象需要调用
[QNRTC](https://developer.qiniu.com/rtc/api/9070/WebQNRTC) 类的静态方法
`createClient` 来创建
[QNRTCClient](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient)
房间对象。下面来看如下使用该对象来管理房间。

首先是加入和离开房间。可以通过
[join](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#join) 和
[leave](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#leave)
方法来加入/离开房间，可以通过监听 [user-
joined](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#user-joined) 和
[user-left](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#user-left)
事件来判断远端用户是否加入/离开房间。

然后是发布和取消发布 Track。可以通过
[publish](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#publish) 和
[unpublish](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#unpublish)
方法来发布和取消发布 Track，可以通过监听 [user-
published](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#user-
published) 和 [user-
unpublished](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#user-
unpublished) 事件来获取远端用户的发布/取消发布信息。

最后是订阅远端的 Track。可以通过
[subscribe](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#subscribe)
和
[unsubscribe](https://developer.qiniu.com/rtc/api/9090/WebQNRTCClient#unsubscribe)
方法来实现订阅/取消订阅远端用户发布的 Track。

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