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;
};