Qt SDK #

  • 共同接口不在说明,可参照其他平台

uprtc_qt_sdk_global.h #

// 媒体种类
#define UPRTC_KIND_VIDEO "video"
#define UPRTC_KIND_AUDIO "audio"

// 媒体设备
#define UPRTC_DEVICE_CAMERA "camera"
#define UPRTC_DEVICE_MIC "mic"
#define UPRTC_DEVICE_DESKTOP "desktop"
#define UPRTC_DEVICE_FILE "file"

// 桌面分享类型
#define UPRTC_SHARE_SCREEN 1
#define UPRTC_SHARE_WINDOW 2

// 视频渲染缩放类型
typedef enum  {
    USCALE_ASPECT_FIT,
    USCALE_ASPECT_FILL
} UScaleType;

uprtc_client.h #

class UPRTCClient : public QObject
{
    Q_OBJECT
public:
    explicit UPRTCClient();
    virtual ~UPRTCClient();

    /**
     * @brief 初始化
     * @param packageName 包名
     * @param appId       项目唯一标示
     * @param appKey      应用唯一标示
     */
    static void init(QString packageName, QString appId, QString appKey);

    /**
     * @brief 清理释放
     */
    static void cleanup();

    /**
     * @brief 日志开关
     * @param enable
     */
    static void logEnable(bool enable);

    /**
      * @brief 取得本地编码能力(加入房间后调用有效)
      * @return JSON数组
      */
    QJsonArray getCodecCapability();

    /**
     * @brief 加入房间
     * @param serverUrl  房间URL
     * @param roomId     房间ID
     * @param peerId     用户ID
     */
    void joinRoom(QString serverUrl, QString roomId, QString peerId);

    /**
     * @brief 打开摄像头
     * @param camera        参照qcamera_source.h
     * @param codec         参照 getCodecCapability可在其返回中选择任意video编码器,可选,不指定默认第一个
     * @param codecOptions  参照共同 CodecOptions,可选
     * @param encodings     rtp编码参数,可选参照qurtp_encoding_parameters.h
     * @return 媒体Track 参照qurtc_peer_track.h
     */
    UPRTCPeerTrack* openCamera(const QCameraSource& camera, QJsonObject* codec = nullptr, QJsonObject* codecOptions = nullptr,
                               QList<QRtpEncodingParameters>* encodings = nullptr);
    /**
     * @brief 切换摄像头
     * @param camera    指定摄像头,参照qcamera_source.h
     * @return 媒体Track 参照uprtc_peer_track.h
     */
    UPRTCPeerTrack* switchCamera(const QCameraSource& camera);
    /**
     * @brief 关闭摄像机
     */
    void closeCamera();

    /**
     * @brief 打开麦克风
     * @param deviceName   麦克风设备名,为空取默认麦克风,参照Qt类QAudioDeviceInfo::deviceName
     * @param options      参照 qaudio_option.h
     * @param codec        参照 getCodecCapability可在其返回中选择任意audio编码器,可选,不指定默认第一个
     * @param codecOptions 参照共同 CodecOptions,可选
     * @return 媒体Track 参照qurtc_peer_track.h
     */
    UPRTCPeerTrack* openMic(QString deviceName = "", const QAudioOptions& options = QAudioOptions(), QJsonObject* codec = nullptr, QJsonObject* codecOptions = nullptr);
    
    /**
     * @brief 切换麦克风
     * @param deviceName 麦克风设备名
     * @return 媒体Track 参照qurtc_peer_track.h
     */
    UPRTCPeerTrack* switchMic(QString deviceName);

    /**
     * @brief 关闭麦克风
     */
    void closeMic();

    /**
     * @brief 切换扬声器,无论是否加入房间都能使用
     * @param deviceName 扬声器设备名,参照Qt类QAudioDeviceInfo::deviceName
     */
    void switchLoudspeaker(QString deviceName);

    /**
     * @brief 取得可被采集的桌面屏幕和窗口
     * @param type 0 屏幕和窗口,1 屏幕,2 窗口
     * @return 参照qdesktop_capturer_source.h
     */
    QList<QDesktopCapturerSource> getDesktopSources(int type = 0);

    /**
     * @brief 分享指定桌面
     * @param options        桌面参数,参照qdesktop_share_options.h
     * @param encodings      以下三个参数参照openCamera
     * @param codecOptions
     * @param codec
     * @return 媒体Track 参照uprtc_peer_track.h
     */
    UPRTCPeerTrack* shareDesktop(const QDesktopShareOptions& options, QList<QURtpEncodingParameters>* encodings = nullptr,
                                 QJsonObject* codecOptions = nullptr, QJsonObject* codec = nullptr);

    /**
     * @brief 切换桌面
     * @param options  桌面参数,参照qdesktop_share_options.h
     * @return 媒体Track 参照uprtc_peer_track.h
     */
    UPRTCPeerTrack* switchDesktop(const QDesktopShareOptions& options);

    /**
     * @brief 停止分享桌面
     */
    void stopShareDesktop();

    /**
     * @brief 开始录制
     * @param path    录像存放路径(包含文件名),或者录制URL由服务端生成
     * @param config  录制配置,参照qroom_record_config.h
     * @param scope   范围,可选
     */
    void startRecord(QString path, const QRoomRecordConfig& config, QWidget* scope = nullptr);

    /**
     * @brief 停止录制
     */
    void stopRecord();

    /**
     * @brief 是否正在录制
     * @return
     */
    bool isRecording();

    /**
     * @brief 设置发送的最大比特率
     * @param bitrate
     */
    void setMaxBitrate(int bitrate);

    /**
     * @brief 发送房间广播消息
     * @param data 自定义json格式数据
     */
    void sendMessage(const QJsonObject& data);

    /**
     * @brief 离开房间
     */
    void exitRoom();

    /**
     * @brief 是否加入房间
     * @return
     */
    bool isJoined();

    /**
     * @brief 是否具有生产媒体的能力,例如主播有,观众没有
     * @return
     */
    bool mediaEnable();

signals: // 相关事件信号
    /**
     * @brief 加入房间信号
     * @param code 0 成功,其他失败
     */
    void onRoomJoined(int code);

    /**
     * @brief 收到房间内消息
     * @param msg
     */
    void onMessage(QString msg);

    /**
     * @brief 用户加入房间
     * @param peerId 用户ID
     */
    void onPeerJoined(QString peerId);

    /**
     * @brief 用户离开房间
     * @param peerId 用户ID
     */
    void onPeerExited(QString peerId);

    /**
     * @brief 用户Track加入房间
     * @param peerTrack 参照uprtc_peer_track.h
     */
    void onPeerMediaJoined(UPRTCPeerTrack* peerTrack);

    /**
     * @brief 用户Track离开房间
     * @param peerTrack 参照uprtc_peer_track.h
     */
    void onPeerMediaExited(UPRTCPeerTrack* peerTrack);

    /**
     * @brief 可以生产媒体
     * @param kind   可以生产"audio"或"video"的Track, 非强制约束
     */
    void onMediaEnable(QString kind);

    /**
     * @brief 不能生产媒体
     */
    void onMediaDisable();

    /**
     * @brief 直播人数,直播房间有效
     * @param num
     */
    void onPeerTotalNum(int num);

    /**
     * @brief 离开房间信号
     */
    void onRoomExited();

};

uprtc_peer_track.h #

UPRTCPeerTrack对象由SDK创建,开发者无需自行创建,但需要负责释放

class UPRTCPeerTrack : public QObject
{
    Q_OBJECT
public:
    virtual ~UPRTCPeerTrack();

    /**
     * @brief Track 唯一标识
     * @return
     */
    QString getId();
    /**
     * @brief Peer唯一标识
     * @return
     */
    QString getPeerId();

    /**
     * @brief Track种类 "audio"或"video"
     * @return
     */
    QString getKind();

    /**
     * @brief 设备名称
     * @return
     */
    QString getDeviceName();

    /**
     * @brief 设备唯一标识
     * @return
     */
    QString getDeviceId();

    /**
     * @brief 设备类型,"camera","mic","screen"
     * @return
     */
    QString getDeviceType();

    /**
     * @brief 取得视频分辨率
     * @return
     */
    QSize getResolution();

    /**
     * @brief 取得网络分数
     * @return
     */
    int getScore();

    /**
     * @brief 是否是自己的媒体Track,也可理解为是否是本地媒体Track
     * @return
     */
    bool isMe();

    /**
     * @brief Track是否已经关闭
     * @return
     */
    bool isClosed();

    /**
     * @brief Track是否被暂停
     * @return
     */
    bool isPaused();

    /**
     * @brief Track是否在播放
     * @return
     */

    bool isPlaying();

    /**
     * @brief 开始播放Track
     * @param view 当Track是video设置此参数,视频会渲染在view中,为保证渲染效果内部调用GPU进行渲染,
     *             开发者把view放置好,视频会在view内进行渲染
     * @param type 缩放类型
     * @param mirror 镜像显示
     */
    void startPlay(QWidget* view = nullptr, UScaleType type = USCALE_ASPECT_FIT, bool mirror = false);

    /**
     * @brief 停止Track
     */
    void stop();

    /**
     * @brief 暂停
     */
    void pause();

    /**
     * @brief 恢复
     */
    void resume();

    // 以下视频独有
    /**
     * @brief 设置缩放类型,播放后也可设置
     * @param type
     */
    void setScaleType(UScaleType type);

    /**
     * @brief 取得缩放类型
     * @return
     */
    UScaleType getScaleType();

    /**
     * @brief 设置镜像显示,播放后也可设置
     * @param mirror
     */
    void setMirror(bool mirror);

    /**
     * @brief 是否是镜像显示
     * @return
     */
    bool isMirror();

    /**
     * @brief 设置视频时间和空间层,视频独有,不理解可以不设置
     * @param spatialLayer    空间层
     * @param temporalLayer   时间层
     */
    void setPlayPreferredLayers(int spatialLayer, int temporalLayer);

    /**
     * @brief 取得最大空间层
     * @return
     */
    int getMaxSpatialLayer();

    /**
     * @brief 取得最大时间层
     * @return
     */
    int getMaxTemporalLayer();
}

qcamera_source.h #

class QCameraSource
{
public:
    /**
     * 构造函数
     * @param cameraInfo QCameraInfo参照Qt文档,可通过QCameraInfo::availableCameras()取得
     */
    QCameraSource(const QCameraInfo& cameraInfo);
    QCameraSource(const QCameraSource& cameraSource);
    QCameraSource& operator=(const QCameraSource&);
    virtual ~QCameraSource();

    QCameraInfo getCameraInfo() const;

    /**
     * @brief 设置采集参数
     * @param settings  采集设置,从supportedViewfinderSettings返回中取得即可
     */
    void setCapturerSettings(const QCameraViewfinderSettings& settings);

    /**
     * @brief 取得采集参数(已设置的)
     * @return QCameraViewfinderSettings是Qt的类,请参照Qt文档
     */
    QCameraViewfinderSettings getCapturerSettings() const;

    /**
     * @brief 取得支持的所有采集设置项
     * @return
     */
    QList<QCameraViewfinderSettings> supportedViewfinderSettings() const;

};

qaudio_options.h #

回声消除,自动增益,降噪等,建议使用默认即可,无需特殊设置

class QAudioOptions
{
public:
    QAudioOptions();
    QAudioOptions(const QAudioOptions& options);
    QAudioOptions& operator=(const QAudioOptions&);

    void setEchoCancellation(bool b);
    QVariant getEchoCancellation() const;

    void setAutoGainControl(bool b);
    QVariant getAutoGainControl() const;

    void setNoiseSuppression(bool b);
    QVariant getNoiseSuppression() const;

    void setHighpassFilter(bool b);
    QVariant getHighpassFilter() const;

    void setStereoSwapping(bool b);
    QVariant getStereoSwapping() const;

    void setAudioJitterBufferMaxPackets(int packets);
    QVariant getAudioJitterBufferMaxPackets() const;

    void setAudioJitterBufferFastAccelerate(bool b);
    QVariant getAudioJitterBufferFastAccelerate() const;

    void setAudioJitterBufferMinDelayMs(bool b);
    QVariant getAudioJitterBufferMinDelayMs() const;

    void setAudioJitterBufferEnableRtxHandling(bool b);
    QVariant getAudioJitterBufferEnableRtxHandling() const;

    void setTypingDetection(bool b);
    QVariant getTypingDetection() const;

    void setExperimentalAgc(bool b);
    QVariant getExperimentalAgc() const;

    void setExperimentalNs(bool b);
    QVariant getExperimentalNs() const;

    void setResidualEchoDetector(bool b);
    QVariant getResidualEchoDetector() const;

    void setTxAgcTargetDbov(uint16_t db);
    QVariant getTxAgcTargetDbov() const;

    void setTxAgcDigitalCompressionGain(uint16_t db);
    QVariant getTxAgcDigitalCompressionGain() const;

    void setTxAgcLimiter(bool b);
    QVariant getTxAgcLimiter() const;

    void setCombinedAudioVideoBwe(bool b);
    QVariant getCombinedAudioVideoBwe() const;

    void setAudioNetworkAdaptor(bool b);
    QVariant getAudioNetworkAdaptor() const;

    void setAudioNetworkAdaptorConfig(QString config);
    QVariant getAudioNetworkAdaptorConfig() const;
}    

qdesktop_capturer_source.h #

class QDesktopCapturerSource
{
public:
    QDesktopCapturerSource(const int type, const intptr_t id, const QString& label);
    QDesktopCapturerSource(const QDesktopCapturerSource& source);
    QDesktopCapturerSource& operator=(const QDesktopCapturerSource&);

    virtual ~QDesktopCapturerSource();

    /**
     * @brief 1 屏幕,2 窗口
     * @return
     */
    int getType() const;

    /**
     * @brief 屏幕或窗口的句柄
     * @return
     */
    intptr_t getId() const;

    /**
     * @brief 标题
     * @return
     */
    QString getLabel() const;

    /**
     * @brief 被分享应用的图标(窗口时有效)
     * @return
     */
    QImage getAppIcon() const;

    /**
     * @brief 被分享内容缩略图
     * @return
     */
    QImage getThumbnail() const;
};

qdesktop_share_options.h #

class QDesktopShareOptions
{
public:
    /**
     * @brief 构造函数
     * @param type        类型,1 屏幕,2 窗口
     * @param id          句柄
     * @param maxFps      采集最大帧率
     * @param maxWidth    采集最大宽
     * @param maxHeight   采集最大高
     */
    QDesktopShareOptions(int type, intptr_t id, int maxFps = 30, int maxWidth = 0, int maxHeight = 0);
    virtual ~QDesktopShareOptions();
    QDesktopShareOptions(const QDesktopShareOptions& options);
    QDesktopShareOptions& operator=(const QDesktopShareOptions&);

    /**
     * @brief 取得类型,1 屏幕,2 窗口
     * @return
     */
    int getType() const;

    /**
     * @brief 取得句柄
     * @return
     */
    intptr_t getId() const;

    /**
     * @brief 取得最大宽
     * @return
     */
    int getMaxWidth() const;

    /**
     * @brief 取得最大高
     * @return
     */
    int getMaxHeight() const;

    /**
     * @brief 取得最大帧率
     * @return
     */
    int getMaxFps() const;

};

qrtp_encoding_parameters.h #

参照

class QRtpEncodingParameters
{
public:
    QRtpEncodingParameters();
    QRtpEncodingParameters(const QURtpEncodingParameters& param);
    QRtpEncodingParameters& operator=(const QURtpEncodingParameters&);


    void setActive(bool active);
    bool getActive() const;

    void setMaxBitrateBps(int maxBitrateBps);
    QVariant getMaxBitrateBps() const;

    void setMinBitrateBps(int minBitrateBps);
    QVariant getMinBitrateBps() const;

    void setMaxFramerate(int maxFramerate);
    QVariant getMaxFramerate() const;

    void setNumTemporalLayers(int numTemporalLayers);
    QVariant getNumTemporalLayers() const;

    void setScaleResolutionDownBy(int scaleResolutionDownBy);
    QVariant getScaleResolutionDownBy() const;
};

qroom_record_config.h #

class QRoomRecordConfig
{
public:
    QRoomRecordConfig(int maxFrameRate = 30, int width = 1920, int height = 1080);
    virtual ~QRoomRecordConfig();

    QRoomRecordConfig(const QRoomRecordConfig& options);
    QRoomRecordConfig& operator=(const QRoomRecordConfig&);

    // video
    /**
     * @brief 录制视频最大帧,大于30时将开启强制高帧录制,如果硬件性能不佳可能造成卡顿
     */
    int maxFrameRate;
    /**
     * @brief 视频宽
     */
    int width;
    /**
     * @brief 视频高
     */
    int height;

    //cover,除了imgPath都是可选的
    /**
     * @brief 封面图片路径
     */
    QString imgPath;
    /**
     * @brief 主标题
     */
    QString title;
    /**
     * @brief 主标题颜色,例如 #606266
     */
    QString titleColor;
    /**
     * @brief 副标题
     */
    QString subTitle;
    /**
     * @brief 副标题颜色
     */
    QString subTitleColor;
    /**
     * @brief 标题坐标left/x
     */
    int startX;
    /**
     * @brief 标题坐标top/y
     */
    int startY;
};
上次更新: 12/6/2023, 3:31:18 PM