liumingming

3.1.2.09230958

Showing 27 changed files with 3785 additions and 219 deletions

Too many changes to show.

To preserve performance only 27 of 27+ files are displayed.

Pod::Spec.new do |s|
s.name = "HHVDoctorSDK"
s.version = "3.1.4.092212"
s.version = "3.1.2.09230958"
s.summary = "和缓视频医生 SDK"
s.description = <<-DESC
... ...
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
... ... @@ -17,6 +17,7 @@ typedef NSView TXView;
typedef NSImage TXImage;
typedef NSEdgeInsets TXEdgeInsets;
#endif
#import "TXDeviceManager.h"
///@defgroup TRTCCloudDef_ios 关键类型定义
///腾讯云视频通话功能的关键类型定义
... ... @@ -35,31 +36,30 @@ typedef NSEdgeInsets TXEdgeInsets;
*/
typedef NS_ENUM(NSInteger, TRTCVideoResolution) {
// 宽高比1:1
TRTCVideoResolution_120_120 = 1, ///< [C] 建议码率80kbps
TRTCVideoResolution_160_160 = 3, ///< [C] 建议码率100kbps
TRTCVideoResolution_270_270 = 5, ///< [C] 建议码率200kbps
TRTCVideoResolution_480_480 = 7, ///< [C] 建议码率350kbps
TRTCVideoResolution_120_120 = 1, ///< [C] 建议码率 VideoCall:80kbps LIVE:120kbps
TRTCVideoResolution_160_160 = 3, ///< [C] 建议码率 VideoCall:100kbps LIVE:150kbps
TRTCVideoResolution_270_270 = 5, ///< [C] 建议码率 VideoCall:200kbps LIVE:120kbps
TRTCVideoResolution_480_480 = 7, ///< [C] 建议码率 VideoCall:350kbps LIVE:120kbps
// 宽高比4:3
TRTCVideoResolution_160_120 = 50, ///< [C] 建议码率100kbps
TRTCVideoResolution_240_180 = 52, ///< [C] 建议码率150kbps
TRTCVideoResolution_280_210 = 54, ///< [C] 建议码率200kbps
TRTCVideoResolution_320_240 = 56, ///< [C] 建议码率250kbps
TRTCVideoResolution_400_300 = 58, ///< [C] 建议码率300kbps
TRTCVideoResolution_480_360 = 60, ///< [C] 建议码率400kbps
TRTCVideoResolution_640_480 = 62, ///< [C] 建议码率600kbps
TRTCVideoResolution_960_720 = 64, ///< [C] 建议码率1000kbps
TRTCVideoResolution_160_120 = 50, ///< [C] 建议码率 VideoCall:100kbps LIVE:150kbps
TRTCVideoResolution_240_180 = 52, ///< [C] 建议码率 VideoCall:150kbps LIVE:225kbps
TRTCVideoResolution_280_210 = 54, ///< [C] 建议码率 VideoCall:200kbps LIVE:300kbps
TRTCVideoResolution_320_240 = 56, ///< [C] 建议码率 VideoCall:250kbps LIVE:375kbps
TRTCVideoResolution_400_300 = 58, ///< [C] 建议码率 VideoCall:300kbps LIVE:450kbps
TRTCVideoResolution_480_360 = 60, ///< [C] 建议码率 VideoCall:400kbps LIVE:600kbps
TRTCVideoResolution_640_480 = 62, ///< [C] 建议码率 VideoCall:600kbps LIVE:900kbps
TRTCVideoResolution_960_720 = 64, ///< [C] 建议码率 VideoCall:1000kbps LIVE:1500kbps
// 宽高比16:9
TRTCVideoResolution_160_90 = 100, ///< [C] 建议码率100kbps
TRTCVideoResolution_256_144 = 102, ///< [C] 建议码率150kbps
TRTCVideoResolution_320_180 = 104, ///< [C] 建议码率250kbps
TRTCVideoResolution_480_270 = 106, ///< [C] 建议码率350kbps
TRTCVideoResolution_640_360 = 108, ///< [C] 建议码率550kbps
TRTCVideoResolution_960_540 = 110, ///< [C] 建议码率850kbps
TRTCVideoResolution_1280_720 = 112, ///< [C] 摄像头采集 - 建议码率1200kbps
///< [S] 屏幕分享 - 建议码率:低清:1000kbps 高清:1600kbps
TRTCVideoResolution_1920_1080 = 114, ///< [S] 屏幕分享 - 建议码率2000kbps
TRTCVideoResolution_160_90 = 100, ///< [C] 建议码率 VideoCall:150kbps LIVE:250kbps
TRTCVideoResolution_256_144 = 102, ///< [C] 建议码率 VideoCall:200kbps LIVE:300kbps
TRTCVideoResolution_320_180 = 104, ///< [C] 建议码率 VideoCall:250kbps LIVE:400kbps
TRTCVideoResolution_480_270 = 106, ///< [C] 建议码率 VideoCall:350kbps LIVE:550kbps
TRTCVideoResolution_640_360 = 108, ///< [C] 建议码率 VideoCall:550kbps LIVE:900kbps
TRTCVideoResolution_960_540 = 110, ///< [C] 建议码率 VideoCall:850kbps LIVE:1300kbps
TRTCVideoResolution_1280_720 = 112, ///< [C] 建议码率 VideoCall:1200kbps LIVE:1800kbps
TRTCVideoResolution_1920_1080 = 114, ///< [S] 建议码率 VideoCall:2000kbps LIVE:3000kbps
};
/**
... ... @@ -94,22 +94,7 @@ typedef NS_ENUM(NSInteger, TRTCVideoStreamType) {
};
/**
* 1.4 画质级别
*
* TRTC SDK 对画质定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。
*/
typedef NS_ENUM(NSInteger, TRTCQuality) {
TRTCQuality_Unknown = 0, ///< 未定义
TRTCQuality_Excellent = 1, ///< 最好
TRTCQuality_Good = 2, ///< 好
TRTCQuality_Poor = 3, ///< 一般
TRTCQuality_Bad = 4, ///< 差
TRTCQuality_Vbad = 5, ///< 很差
TRTCQuality_Down = 6, ///< 不可用
};
/**
* 1.5 视频画面填充模式
* 1.4 视频画面填充模式
*
* 如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式:
* - TRTCVideoFillMode_Fill,图像铺满屏幕,超出显示视窗的视频部分将被裁剪,画面显示可能不完整。
... ... @@ -121,7 +106,7 @@ typedef NS_ENUM(NSInteger, TRTCVideoFillMode) {
};
/**
* 1.6 视频画面旋转方向
* 1.5 视频画面旋转方向
*
* TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。
*/
... ... @@ -133,17 +118,18 @@ typedef NS_ENUM(NSInteger, TRTCVideoRotation) {
};
/**
* 1.7 美颜(磨皮)算法
* 1.6 美颜(磨皮)算法
*
* TRTC SDK 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。
*/
typedef NS_ENUM(NSInteger, TRTCBeautyStyle) {
TRTCBeautyStyleSmooth = 0, ///< 光滑,适用于美女秀场,效果比较明显。
TRTCBeautyStyleNature = 1, ///< 自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
TRTCBeautyStylePitu = 2, ///< 由上海优图实验室提供的美颜算法,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高。
};
/**
* 1.8 视频像素格式
* 1.7 视频像素格式
*
* TRTC SDK 提供针对视频的自定义采集和自定义渲染功能,在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。
* 在自定义渲染功能中,您可以指定您期望 SDK 回调的视频像素格式。
... ... @@ -153,11 +139,11 @@ typedef NS_ENUM(NSInteger, TRTCVideoPixelFormat) {
TRTCVideoPixelFormat_I420 = 1, ///< YUV420P I420
TRTCVideoPixelFormat_NV12 = 5, ///< YUV420SP NV12
TRTCVideoPixelFormat_32BGRA = 6, ///< BGRA8888
TRTCVideoPixelFormat_Texture_2D = 7, ///< Texture
};
/**
* 1.9 视频数据包装格式
* 1.8 视频数据包装格式
*
* 在自定义采集和自定义渲染功能,您需要用到下列枚举值来指定您希望以什么类型的容器来包装视频数据。
* - PixelBuffer:直接使用效率最高,iOS 系统提供了众多 API 获取或处理 PixelBuffer。
... ... @@ -167,19 +153,46 @@ typedef NS_ENUM(NSInteger, TRTCVideoBufferType) {
TRTCVideoBufferType_Unknown = 0, ///< 未知
TRTCVideoBufferType_PixelBuffer = 1, ///< 直接使用效率最高,iOS 系统提供了众多 API 获取或处理 PixelBuffer。
TRTCVideoBufferType_NSData = 2, ///< 仅用于自定义渲染,SDK 帮您做了一次 PixelBuffer 到 NSData 的内存拷贝工作,会有一定的性能消耗。
TRTCVideoBufferType_Texture = 3, ///< 用于自定义渲染的 texture
};
/**
* 1.10 本地视频预览镜像类型
* 1.9 本地视频预览镜像类型
*
* iOS 的本地画面提供下列设置模式
*/
typedef NS_ENUM(NSUInteger, TRTCLocalVideoMirrorType) {
TRTCLocalVideoMirrorType_Auto = 0, ///< 前置摄像头镜像,后置摄像头不镜像
TRTCLocalVideoMirrorType_Enable = 1, ///< 前后置摄像头画面均镜像
TRTCLocalVideoMirrorType_Disable = 2, ///< 前后置摄像头画面均不镜像
typedef NS_ENUM(NSUInteger, TRTCVideoMirrorType) {
TRTCVideoMirrorTypeAuto = 0, ///< 前置摄像头镜像,后置摄像头不镜像
TRTCVideoMirrorTypeEnable = 1, ///< 前后置摄像头画面均镜像
TRTCVideoMirrorTypeDisable = 2, ///< 前后置摄像头画面均不镜像
};
/**
* 1.10 视频截图来源
*/
typedef NS_ENUM(NSUInteger, TRTCSnapshotSourceType) {
TRTCSnapshotSourceTypeStream = 0, ///< 从视频流上截取视频画面
TRTCSnapshotSourceTypeView = 1, ///< 从渲染 View 上截取视频画面
};
/**
* 1.11 视频渲染设置
*/
@interface TRTCRenderParams : NSObject
/// 【字段含义】画面朝向
/// 【推荐取值】支持90、180以及270旋转角度,默认值:TRTCVideoRotation_0
@property (nonatomic) TRTCVideoRotation rotation;
/// 【字段含义】画面填充模式
/// 【推荐取值】填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode_Fill
@property (nonatomic) TRTCVideoFillMode fillMode;
/// 【字段含义】画面镜像模式
/// 【推荐取值】默认值:TRTCVideoMirrorType_Auto
@property (nonatomic) TRTCVideoMirrorType mirrorType;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 【(二)网络相关枚举值定义】
... ... @@ -247,15 +260,30 @@ typedef NS_ENUM(NSInteger, TRTCQosControlMode)
/**
* 2.4 画质偏好
*
* 指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”
* 指当 TRTC SDK 在遇到弱网络环境时,您期望“保清晰”或“保流畅”,两种模式均会优先保障声音数据的传输。
*
* - Smooth:弱网下保流畅,即在遭遇弱网环境时首先确保声音的流畅和优先发送,画面会变得模糊且会有较多马赛克,但可以保持流畅不卡顿。
* - Clear:弱网下保清晰,即在遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。
* - Smooth:弱网下优先流畅性,当用户网络较差的时候画面也会比较模糊。
* - Clear:默认值,弱网下优先清晰度,当用户网络较差的时候会出现卡顿,但画面清晰度不会大幅缩水。
*/
typedef NS_ENUM(NSInteger, TRTCVideoQosPreference)
{
TRTCVideoQosPreferenceSmooth = 1, ///< 弱网下保流畅
TRTCVideoQosPreferenceClear = 2, ///< 弱网下保清晰
TRTCVideoQosPreferenceClear = 2, ///< 弱网下保清晰,默认值
};
/**
* 2.5 网络质量
*
* TRTC SDK 对网络质量定义了六种不同的级别,Excellent 表示最好,Down 表示不可用。
*/
typedef NS_ENUM(NSInteger, TRTCQuality) {
TRTCQuality_Unknown = 0, ///< 未定义
TRTCQuality_Excellent = 1, ///< 最好
TRTCQuality_Good = 2, ///< 好
TRTCQuality_Poor = 3, ///< 一般
TRTCQuality_Bad = 4, ///< 差
TRTCQuality_Vbad = 5, ///< 很差
TRTCQuality_Down = 6, ///< 不可用
};
/////////////////////////////////////////////////////////////////////////////////
... ... @@ -277,7 +305,21 @@ typedef NS_ENUM(NSInteger, TRTCAudioSampleRate) {
};
/**
* 3.2 声音播放模式(音频路由)
* 3.2 声音音质
*
* 音频音质用来衡量声音的保真程度,TRTCAudioQualitySpeech 适用于通话场景,TRTCAudioQualityMusic 适用于高音质音乐场景。
*/
typedef NS_ENUM(NSInteger, TRTCAudioQuality) {
/// 流畅音质:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。
TRTCAudioQualitySpeech = 1,
/// 默认音质:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。
TRTCAudioQualityDefault = 2,
/// 高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如K歌、音乐直播等。
TRTCAudioQualityMusic = 3,
};
/**
* 3.3 声音播放模式(音频路由)
*
* 微信和手机 QQ 里的视频通话功能,都有一个免提模式,开启后就不用把手机贴在耳朵上,这个功能就是基于音频路由实现的。
* 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来:
... ... @@ -290,7 +332,7 @@ typedef NS_ENUM(NSInteger, TRTCAudioRoute) {
};
/**
* 3.3 声音混响模式
* 3.4 声音混响模式
*
* 该枚举值应用于直播场景中的混响模式,主要用于秀场直播中。
*/
... ... @@ -306,7 +348,7 @@ typedef NS_ENUM(NSInteger, TRTCReverbType) {
};
/**
* 3.4 变声模式
* 3.5 变声模式
*
* 该枚举值应用于直播场景中的变声模式,主要用于秀场直播中。
*/
... ... @@ -326,7 +368,7 @@ typedef NS_ENUM(NSInteger, TRTCVoiceChangerType) {
};
/**
* 3.5 系统音量类型
* 3.6 系统音量类型
*
* 智能手机一般具备两种系统音量类型,即通话音量类型和媒体音量类型。
* - 通话音量:手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差,
... ... @@ -385,41 +427,22 @@ typedef NS_ENUM(NSInteger, TRTCLogLevel) {
/**
* 4.2 重力感应开关
*
* 此配置仅适用于 iOS 和 iPad 等移动设备,并且需要配合您当前 UI 的布局模式一起使用:
* - Disable,表示视频画面不会跟随重力感应方向而调整。
* - UIAutoLayout,表示 SDK 不会自动调整 LocalVideoView 的旋转方向,而是交给系统进行处理。适用于您的 App 界面已适配重力感应的场景。
* - UIFixLayout,表示 SDK 自动调整 LocalVideoView 的旋转方向,适用于您的 App 界面暂未适配重力感应的场景。
* 此配置仅适用于 iOS 和 iPad 等移动设备:
* - Disable:Mac 平台的默认值,视频上行的画面(也就是房间里的其它用户看到的当前用户的画面)不会跟随重力感应方向而自动调整。
* - UIAutoLayout:iPhone 和 iPad 平台的默认值,视频上行的画面(也就是房间里的其它用户看到的当前用户的画面)会跟随当前界面的状态栏方向而自动调整。
* - UIFixLayout:待废弃,效果等同于 UIAutoLayout。
*/
typedef NS_ENUM(NSInteger, TRTCGSensorMode) {
TRTCGSensorMode_Disable = 0, ///< 关闭重力感应
TRTCGSensorMode_UIAutoLayout = 1, ///< 开启重力感应,需要您的 App 界面已适配重力感应。
TRTCGSensorMode_UIFixLayout = 2 ///< 开启重力感应,适用于您的 App 界面暂未适配重力感应的场景。
TRTCGSensorMode_Disable = 0, ///< 关闭重力感应,Mac 平台的默认值。
TRTCGSensorMode_UIAutoLayout = 1, ///< 开启重力感应,iPhone 和 iPad 平台的默认值。
TRTCGSensorMode_UIFixLayout = 2 ///< 待废弃,效果等同于 UIAutoLayout。
};
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#pragma mark -
/**
* 4.3 设备类型(仅 Mac)
*
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
typedef NS_ENUM(NSInteger, TRTCMediaDeviceType) {
TRTCMediaDeviceTypeUnknown = -1, ///< 未定义
TRTCMediaDeviceTypeAudioInput = 0, ///< 麦克风
TRTCMediaDeviceTypeAudioOutput = 1, ///< 扬声器或听筒
TRTCMediaDeviceTypeVideoCamera = 2, ///< 摄像头
TRTCMediaDeviceTypeVideoWindow = 3, ///< 某个窗口(用于屏幕分享)
TRTCMediaDeviceTypeVideoScreen = 4, ///< 整个屏幕(用于屏幕分享)
};
#endif
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#pragma mark -
/**
* 4.4 屏幕分享目标类型(仅 Mac)
* 4.3 屏幕分享目标类型(仅 Mac)
*
* 该枚举值主要用于 SDK 区分屏幕分享的目标(某一个窗口或整个屏幕)。
*/
... ... @@ -433,7 +456,7 @@ typedef NS_ENUM(NSInteger, TRTCScreenCaptureSourceType) {
#pragma mark -
/**
* 4.5 混流参数配置模式
* 4.4 混流参数配置模式
*
*/
typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
... ... @@ -463,6 +486,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
/// SDK 会先根据您(通过 videoWidth 和 videoHeight 参数)设置的目标分辨率构建一张画布,
/// 当老师未开启屏幕分享时,SDK 会将摄像头画面等比例拉伸绘制到该画布上;当老师开启屏幕分享之后,SDK 会将屏幕分享画面绘制到同样的画布上。
/// 这样操作的目的是为了确保混流模块的输出分辨率一致,避免课程回放和网页观看的花屏问题(网页播放器不支持可变分辨率)。
/// 同时,连麦学生的声音会被默认混合到老师的音视频流中。
///
/// 由于教学模式下的视频内容以屏幕分享为主,因此同时传输摄像头画面和屏幕分享画面是非常浪费带宽的。
/// 推荐的做法是直接将摄像头画面通过 setLocalVideoRenderCallback 接口自定义绘制到当前屏幕上。
... ... @@ -485,7 +509,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
/**
* 5.1 进房相关参数
*
* 只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。
* 只有该参数填写正确,才能顺利调用 enterRoom 进入 roomId 或者 strRoomId 所指定的音视频房间。
*/
@interface TRTCParams : NSObject
... ... @@ -494,39 +518,62 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
@property (nonatomic, assign) UInt32 sdkAppId;
///【字段含义】用户标识 [必填],当前用户的 userId,相当于登录用户名。
///【推荐取值】如果一个用户在您的账号系统中的 ID 为“abc”,则 userId 即可设置为“abc”。
@property (nonatomic, strong, nonnull) NSString* userId;
///【推荐取值】限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
@property (nonatomic, copy, nonnull) NSString* userId;
///【字段含义】用户签名 [必填],当前 userId 对应的验证签名,相当于登录密码。
///【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。
@property (nonatomic, strong, nonnull) NSString* userSig;
@property (nonatomic, copy, nonnull) NSString* userSig;
///【字段含义】房间号码 [必填],在同一个房间内的用户可以看到彼此并进行视频通话。
///【推荐取值】可以自定义设置该参数值,但不可重复。如果您的用户帐号 ID (userId)为数字类型,可直接使用创建者的用户 ID 作为 roomId。
///【字段含义】数字房间号码,在同一个房间里的用户(userId)可以彼此看到对方并进行视频通话
///【推荐取值】取值范围:1 - 4294967294。
///【特别说明】roomId 与 strRoomId 必填一个,若您选用 strRoomId,则 roomId 需要填写为0。若两者都填,将优先选用 roomId。
/// 请注意,同一个 sdkAppId 互通时,请务必选用同一种房间号码类型,避免影响互通。
@property (nonatomic, assign) UInt32 roomId;
///【字段含义】字符串房间号码,在同一个房间里的用户(userId)可以彼此看到对方并进行视频通话。
///【推荐取值】限制长度为64字节。以下为支持的字符集范围(共 89 个字符):
/// -大小写英文字母(a-zA-Z);
/// -数字(0-9);
/// -空格、"!"、"#"、"$"、"%"、"&"、"("、")"、"+"、"-"、":"、";"、"<"、"="、"."、">"、"?"、"@"、"["、"]"、"^"、"_"、" {"、"}"、"|"、"~"、","。
///【特别说明】roomId 与 strRoomId 必填一个,若您选用 strRoomId,则 roomId 需要填写为0。若两者都填,将优先选用 roomId。
/// 请注意,同一个 sdkAppId 互通时,请务必选用同一种房间号码类型,避免影响互通。
@property (nonatomic, copy, nonnull) NSString* strRoomId;
///【字段含义】直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom),通话场景下指定无效。
///【推荐取值】默认值:主播(TRTCRoleAnchor)
@property (nonatomic, assign) TRTCRoleType role;
///【字段含义】绑定腾讯云直播 CDN 流 ID[非必填],设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV或HLS)播放该用户的音视频流。
///【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这样比较好辨认且不会在您的多个应用中发生冲突。
///【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启动自动旁路直播”开关。
///【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启用旁路推流”开关。
///【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。
@property (nonatomic, strong, nullable) NSString* streamId;
///【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。
@property (nonatomic, copy, nullable) NSString* streamId;
///【字段含义】云端录制开关,用于指定是否要在云端将该用户的音视频流录制成指定格式的文件。
/// 方案一:手动录制
/// - 需要在“[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 云端录制配置”中开启云端录制。
/// - 设置“录制形式”为“手动录制”。
/// - 设置手动录制后,在一个 TRTC 房间中只有设置了 userDefineRecordId 参数的用户才会在云端录制出视频文件,不指定该参数的用户不会产生录制行为。
/// - 文件会以 “userDefineRecordId_起始时间_结束时间” 的格式命名。
///
/// 方案二:自动录制
/// - 需要在“[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 云端录制配置”中开启云端录制。
/// - 设置“录制形式”为“自动录制”。
/// - 设置自动录制后,在一个 TRTC 房间中的任何一个有音视频上行的用户,均会在云端录制出视频文件。
/// - 文件会以 “userDefineRecordId_起始时间_结束时间” 的格式命名,如果不指定 userDefineRecordId,则文件会以 streamid 命名。
///
///【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
///【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。
@property (nonatomic, strong, nullable) NSString* userDefineRecordId;
@property (nonatomic, copy, nullable) NSString* userDefineRecordId;
///【字段含义】房间签名 [非必填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。
///【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。
@property (nonatomic, strong, nullable) NSString* privateMapKey;
@property (nonatomic, copy, nullable) NSString* privateMapKey;
///【字段含义】业务数据 [非必填],部分高级特性才需要用到此字段。
///【推荐取值】不建议使用
@property (nonatomic, strong, nullable) NSString* bussInfo;
@property (nonatomic, copy, nullable) NSString* bussInfo;
@end
#pragma mark -
... ... @@ -557,11 +604,26 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
///【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。
@property (nonatomic, assign) int videoFps;
///【字段含义】视频上行码率
///【推荐取值】推荐设置请参考本 TRTCVideoResolution 定义处的注释说明
///【特别说明】码率太低会导致视频中出现大量马赛克
///【字段含义】目标视频码率,SDK 会按照目标码率进行编码,只有在网络不佳的情况下才会主动降低视频码率。
///【推荐取值】请参考本 TRTCVideoResolution 在各档位注释的最佳码率,也可以在此基础上适当调高。
/// 比如 TRTCVideoResolution_1280_720 对应 1200kbps 的目标码率,您也可以设置为 1500kbps 用来获得更好的清晰度观感。
///【特别说明】SDK 会努力按照 videoBitrate 指定的码率进行编码,只有在网络不佳的情况下才会主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。
/// 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%;
/// 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps;
/// 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力。
@property (nonatomic, assign) int videoBitrate;
///【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率,最低会降至 minVideoBitrate 所设定的数值。
///【推荐取值】
/// - 如果您追求“允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%;
/// - 如果您追求“允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为 200kbps;
/// - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 的自适应调节能力;
/// - 默认值:0,此时最低码率由 SDK 根据分辨率情况,自动设置合适的数值。
///【特别说明】
/// - 当您把分辨率设置的比较高时,minVideoBitrate 不适合设置的太低,否则会出现画面模糊和大范围的马赛克宏块。
/// 比如把分辨率设置为 720p,把码率设置为 200kbps,那么编码出的画面将会出现大范围区域性马赛克。
@property (nonatomic, assign) int minVideoBitrate;
///【字段含义】是否允许 SDK 动态调整分辨率,开启后会对云端录制产生影响。
///【推荐取值】
/// - 需要开启云端录制的场景建议设置为 NO,中途视频分辨率发生变化后,云端录制出的 MP4 在一般的播放器上都无法正常播放。
... ... @@ -597,14 +659,14 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
#pragma mark -
/**
* 5.4 视频质量
* 5.4 网络质量
*
* 表示视频质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量
* 表示网络质量的好坏,通过这个数值,您可以在 UI 界面上用图标表征 userId 的通话线路质量
*/
@interface TRTCQualityInfo : NSObject
/// 用户 ID
@property (nonatomic, copy, nullable) NSString* userId;
/// 视频质量
/// 网络质量
@property (nonatomic, assign) TRTCQuality quality;
@end
... ... @@ -626,25 +688,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
#pragma mark -
/**
* 5.6 媒体设备描述
*
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
@interface TRTCMediaDeviceInfo : NSObject
/// 设备类型
@property (assign, nonatomic) TRTCMediaDeviceType type;
/// 设备ID
@property (copy, nonatomic, nullable) NSString * deviceId;
/// 设备名称
@property (copy, nonatomic, nullable) NSString * deviceName;
@end
#endif
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#pragma mark -
/**
* 5.7 屏幕分享目标信息(仅 Mac)
* 5.6 屏幕分享目标信息(仅 Mac)
*
* 如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,用户才可以选择希望分享的窗口。
* TRTCScreenCaptureSourceInfo 主要用于定义分享窗口的 ID、类型、窗口名称以及缩略图。
... ... @@ -668,7 +712,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
#pragma mark -
/**
* 5.8 网络测速结果
* 5.7 网络测速结果
*
* 您可以在用户进入房间前通过 TRTCCloud 的 startSpeedTest 接口进行测速 (注意:请不要在通话中调用),
* 测速结果会每2 - 3秒钟返回一次,每次返回一个 IP 地址的测试结果。
... ... @@ -698,10 +742,10 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
#pragma mark -
/**
* 5.9 视频帧信息
/**
* 5.8 视频帧信息
*
* TRTCVideoFrame 用来描述一帧视频画面的裸数据,它可以是一帧编码前的画面,也可以是一帧解码后的画面。
* TRTCVideoFrame 用来描述一帧视频画面的裸数据,它可以是一帧编码前的画面,也可以是一帧解码后的画面。
*/
@interface TRTCVideoFrame : NSObject
... ... @@ -733,11 +777,14 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
///【字段含义】视频像素的顺时针旋转角度
@property (nonatomic, assign) TRTCVideoRotation rotation;
@end
///【字段含义】视频纹理ID
@property (nonatomic, assign) GLuint textureId;
@end
/**
* 5.10 音频帧数据
* 5.9 音频帧数据
*/
#pragma mark -
/// 音频帧数据
... ... @@ -752,12 +799,11 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
@property (nonatomic, assign) uint64_t timestamp;
@end
/**
* 5.11 云端混流中每一路子画面的位置信息
*
* TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置
*/
* 5.10 云端混流中每一路子画面的位置信息
*
* TRTCMixUser 用于指定每一路(即每一个 userId)视频画面的具体摆放位置
*/
@interface TRTCMixUser : NSObject
/// 参与混流的 userId
@property(nonatomic, copy, nonnull) NSString * userId;
... ... @@ -773,13 +819,12 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
@property (nonatomic, assign) BOOL pureAudio;
@end
/**
* 5.12 云端混流(转码)配置
*
* 包括最终编码质量和各路画面的摆放位置
*/
/**
* 5.11 云端混流(转码)配置
*
* 包括最终编码质量和各路画面的摆放位置
*/
@interface TRTCTranscodingConfig : NSObject
///【字段含义】转码config模式
... ... @@ -817,6 +862,13 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
///【推荐取值】默认值:0x000000,黑色
@property(nonatomic, assign) int backgroundColor;
///【字段含义】混合后画面的背景图。
///【推荐取值】默认值:nil,即不设置背景图
///【特别说明】背景图需要您事先在 “[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 功能配置 => 素材管理” 中上传,
/// 上传成功后可以获得对应的“图片ID”,然后将“图片ID”转换成字符串类型并设置到 backgroundImage 里即可。
/// 例如:假设“图片ID” 为 63,可以设置 backgroundImage = @"63";
@property(nonatomic, copy, nullable) NSString *backgroundImage;
///【字段含义】最终转码后的音频采样率。
///【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。
@property(nonatomic, assign) int audioSampleRate;
... ... @@ -831,12 +883,19 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
///【字段含义】每一路子画面的位置信息
@property(nonatomic, copy, nonnull) NSArray<TRTCMixUser *> * mixUsers;
///【字段含义】输出到 CDN 上的直播流 ID
/// 如不设置该参数,SDK 会执行默认逻辑,即房间里的多路流会混合到该接口调用者的视频流上,也就是 A+B =>A;
/// 如果设置该参数,SDK 会将房间里的多路流混合到您指定的直播流 ID 上,也就是 A+B =>C。
///【推荐取值】默认值:nil,即房间里的多路流会混合到该接口调用者的视频流上。
@property(nonatomic, copy, nullable) NSString *streamId;
@end
#pragma mark -
/**
* 5.13 CDN 旁路推流参数
* 5.12 CDN 旁路推流参数
*/
@interface TRTCPublishCDNParam : NSObject
/// 腾讯云 AppID,请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用,单击【帐号信息】,在“直播信息”中获取
... ... @@ -850,7 +909,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
@end
/**
* 5.14 录音参数
* 5.13 录音参数
*
* 请正确填写参数,确保录音文件顺利生成。
*/
... ... @@ -864,7 +923,7 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
@end
/**
* 5.15 音效
* 5.14 音效
*
*/
@interface TRTCAudioEffectParam : NSObject
... ... @@ -893,4 +952,67 @@ typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
- (_Nonnull instancetype)initWith:(int)effectId path:(NSString * _Nonnull)path;
@end
#pragma mark -
/**
* 5.15 切换房间
*/
@interface TRTCSwitchRoomConfig : NSObject
///【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。
///【推荐取值】取值范围:1 - 4294967294。
///【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。
@property (nonatomic, assign) UInt32 roomId;
///【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话。
///【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。
@property (nonatomic, copy, nullable) NSString *strRoomId;
///【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。不填时,SDK 会继续使用旧的 userSig,
/// 但用户必须保证旧的 userSig 仍在有效期内,否则会造成进房失败等后果。
///【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。
@property (nonatomic, copy, nullable) NSString *userSig;
///【字段含义】房间签名 [选填],当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。
///【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。
@property (nonatomic, copy, nullable) NSString *privateMapKey;
@end
typedef NS_ENUM(NSUInteger, TRTCLocalVideoMirrorType) {
TRTCLocalVideoMirrorType_Auto = TRTCVideoMirrorTypeAuto,
TRTCLocalVideoMirrorType_Enable = TRTCVideoMirrorTypeEnable,
TRTCLocalVideoMirrorType_Disable = TRTCVideoMirrorTypeDisable,
} __attribute__((deprecated("use TRTCVideoMirrorType instead")));
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#pragma mark -
/**
* 设备类型(仅 Mac)
*
* @deprecated
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
typedef NS_ENUM(NSInteger, TRTCMediaDeviceType) {
TRTCMediaDeviceTypeUnknown = -1, ///< 未定义
TRTCMediaDeviceTypeAudioInput = 0, ///< 麦克风
TRTCMediaDeviceTypeAudioOutput = 1, ///< 扬声器或听筒
TRTCMediaDeviceTypeVideoCamera = 2, ///< 摄像头
TRTCMediaDeviceTypeVideoWindow = 3, ///< 某个窗口(用于屏幕分享)
TRTCMediaDeviceTypeVideoScreen = 4, ///< 整个屏幕(用于屏幕分享)
} __attribute__((deprecated("use TXMediaDeviceType instead")));
/**
* 媒体设备描述
*
* @deprecated
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
typedef TXMediaDeviceInfo TRTCMediaDeviceInfo __attribute__((deprecated("use TXMediaDeviceInfo instead")));
#endif
/// @}
... ...
/*
* Module: TRTCCloudDelegate @ TXLiteAVSDK
*
*
* Function: 腾讯云视频通话功能的事件回调接口
*
*/
... ... @@ -29,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @name 错误事件和警告事件
/// @{
/**
* 1.1 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。
* 1.1 错误回调,表示 SDK 不可恢复的错误,一定要监听并分情况给用户适当的界面提示。
*
* @param errCode 错误码
* @param errMsg 错误信息
... ... @@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary*)extInfo;
/**
* 1.2 警告回调用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。
* 1.2 警告回调用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。
*
* @param warningCode 警告码
* @param warningMsg 警告信息
... ... @@ -59,7 +59,7 @@ NS_ASSUME_NONNULL_BEGIN
* 2.1 已加入房间的回调
*
* 调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 SDK 的 onEnterRoom(result) 回调:
*
*
* - 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。
* - 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。
* 进房失败的错误码含义请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
... ... @@ -113,6 +113,11 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
/**
* 2.6 切换房间 (switchRoom) 的结果回调
*/
- (void)onSwitchRoom:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
/// @}
/////////////////////////////////////////////////////////////////////////////////
... ... @@ -150,7 +155,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onRemoteUserLeaveRoom:(NSString *)userId reason:(NSInteger)reason;
/**
* 3.3 用户是否开启摄像头视频
* 3.3 远端用户是否存在可播放的主路画面(一般用于摄像头)
*
* 当您收到 onUserVideoAvailable(userid, YES) 通知时,表示该路画面已经有可用的视频数据帧到达。
* 此时,您需要调用 startRemoteView(userid) 接口加载该用户的远程画面。
... ... @@ -165,8 +170,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available;
/**
* 3.4 用户是否开启屏幕分享
*
* 3.4 远端用户是否存在可播放的辅路画面(一般用于屏幕分享)
*
* @note 显示辅路画面使用的函数是 startRemoteSubStreamView() 而非 startRemoteView()。
* @param userId 用户标识
* @param available 屏幕分享是否开启
... ... @@ -174,7 +179,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onUserSubStreamAvailable:(NSString *)userId available:(BOOL)available;
/**
* 3.5 用户是否开启音频上行
* 3.5 远端用户是否存在可播放的音频数据
*
* @param userId 用户标识
* @param available 声音是否开启
... ... @@ -183,17 +188,17 @@ NS_ASSUME_NONNULL_BEGIN
/**
* 3.6 开始渲染本地或远程用户的首帧画面
*
*
* 如果 userId == nil,代表开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。
* 如果 userId != nil,代表开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。
*
*
* @note 只有当您调用 startLocalPreivew()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。
*
*
* @param userId 本地或远程用户 ID,如果 userId == nil 代表本地,userId != nil 代表远程。
* @param streamType 视频流类型:摄像头或屏幕分享。
* @param width 画面宽度
* @param height 画面高度
*/
*/
- (void)onFirstVideoFrame:(NSString*)userId streamType:(TRTCVideoStreamType)streamType width:(int)width height:(int)height;
/**
... ... @@ -210,7 +215,7 @@ NS_ASSUME_NONNULL_BEGIN
* 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。
*
* @param streamType 视频流类型,主画面、小画面或辅流画面(屏幕分享)
*/
*/
- (void)onSendFirstLocalVideoFrame: (TRTCVideoStreamType)streamType;
/**
... ... @@ -233,9 +238,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onUserEnter:(NSString *)userId DEPRECATED_ATTRIBUTE;
/**
* 3.11 废弃接口: 有主播离开当前房间
* 3.11 废弃接口:有主播离开当前房间
*
* 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。
* 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserLeaveRoom 进行替代。
*
* @note 该接口已被废弃,不推荐使用
*
... ... @@ -256,7 +261,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @{
/**
* 4.1 网络质量该回调每2秒触发一次,统计当前网络的上行和下行质量
* 4.1 网络质量该回调每2秒触发一次,统计当前网络的上行和下行质量
*
* @note userId == nil 代表自己当前的视频质量
*
... ... @@ -325,7 +330,7 @@ NS_ASSUME_NONNULL_BEGIN
#if TARGET_OS_IPHONE
/**
* 6.3 音频路由发生变化(仅 iOS),音频路由即声音由哪里输出(扬声器听筒)
* 6.3 音频路由发生变化(仅 iOS),音频路由即声音由哪里输出(扬声器听筒)
*
* @param route 当前音频路由
* @param fromRoute 变更前的音频路由
... ... @@ -334,7 +339,7 @@ NS_ASSUME_NONNULL_BEGIN
#endif
/**
* 6.4 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量
* 6.4 用于提示音量大小的回调包括每个 userId 的音量和远端总音量
*
* 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。
* 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调;
... ... @@ -357,6 +362,27 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)onDevice:(NSString *)deviceId type:(TRTCMediaDeviceType)deviceType stateChanged:(NSInteger)state;
/**
* 6.6 当前音频采集设备音量变化回调
*
* @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭
*
* @param volume 音量 取值范围0-100
* @param muted 当前采集音频设备是否被静音:YES 被静音了,NO 未被静音
*/
- (void)onAudioDeviceCaptureVolumeChanged:(NSInteger)volume muted:(BOOL)muted;
/**
* 6.7 当前音频播放设备音量变化回调
*
* @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭
*
* @param volume 音量 取值范围0-100
* @param muted 当前音频播放设备是否被静音:YES 被静音了,NO 未被静音
*/
- (void)onAudioDevicePlayoutVolumeChanged:(NSInteger)volume muted:(BOOL)muted;
#endif
/// @}
... ... @@ -365,7 +391,7 @@ NS_ASSUME_NONNULL_BEGIN
/////////////////////////////////////////////////////////////////////////////////
//
// (七)自定义消息的接收回调
//
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 自定义消息的接收回调
... ... @@ -388,7 +414,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* 实时音视频使用 UDP 通道,即使设置了可靠传输(reliable),也无法确保100@%不丢失,只是丢消息概率极低,能满足常规可靠性要求。
* 在发送端设置了可靠运输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。
*
*
* @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调
* @param userId 用户标识
* @param cmdID 命令 ID
... ... @@ -416,7 +442,7 @@ NS_ASSUME_NONNULL_BEGIN
/////////////////////////////////////////////////////////////////////////////////
/// @name CDN 旁路转推回调
/// @{
/**
* 8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口
*
... ... @@ -439,7 +465,7 @@ NS_ASSUME_NONNULL_BEGIN
* 对应于 TRTCCloud 中的 startPublishCDNStream() 接口
*
* @note Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。
*/
*/
- (void)onStartPublishCDNStream:(int)err errMsg:(NSString *)errMsg;
/**
... ... @@ -472,8 +498,9 @@ NS_ASSUME_NONNULL_BEGIN
*
* @param effectId 音效 ID
* @param code 0表示播放正常结束;其他表示异常结束
* @note 该接口已不再维护,推荐使用 TXAudioEffectManager.startPlayMusic 及相关回调
*/
- (void)onAudioEffectFinished:(int) effectId code:(int) code;
- (void)onAudioEffectFinished:(int) effectId code:(int) code DEPRECATED_ATTRIBUTE;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
... ... @@ -538,7 +565,55 @@ NS_ASSUME_NONNULL_BEGIN
/////////////////////////////////////////////////////////////////////////////////
//
// (十二)音频数据回调
// (十二)第三方美颜回调
//
/////////////////////////////////////////////////////////////////////////////////
@protocol TRTCVideoFrameDelegate <NSObject>
@optional
/**
* 第三方美颜的视频数据回调,需要使用 TRTCCloud 中的 setLocalVideoProcessDelegete 接口进行设置
*
* @param srcFrame 用于承载 TRTC 采集到的摄像头画面
* @param dstFrame 用于接收第三方美颜处理过的视频画面
* @note 目前仅支持 OpenGL 纹理方案
*
* 【使用相芯】
* 由于相芯的美颜模块会在处理图像的过程中产生一个全新的纹理,因此需要您在回调函数中将 dstFrame.textureId 设置为相芯处理后的新纹理。
* <pre>
* uint32_t onProcessVideoFrame(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame
* {
* uint32_t dstTextureId = renderItemWithTexture(srcFrame.textureId, srcFrame.width, srcFrame.height);
* dstFrame.textureId = dstTextureId;
* return 0;
* }
* </pre>
*
* 【其他方案】
* 如果您使用的第三方美颜模块并不生成新的纹理,而是需要您设置给该模块一个输入纹理和一个输出纹理,则可以考虑如下方案:
* <pre>
* uint32_t onProcessVideoFrame(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame
* {
* thirdparty_process(srcFrame.textureId, srcFrame.width, srcFrame.height, dstFrame.textureId);
* return 0;
* }
* </pre>
*
**/
- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame;
/**
* SDK 内部的 OpenGL 环境的销毁通知
*/
- (void)onGLContextDestory;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (十三)音频数据回调
//
/////////////////////////////////////////////////////////////////////////////////
/**
... ... @@ -546,28 +621,38 @@ NS_ASSUME_NONNULL_BEGIN
*/
@protocol TRTCAudioFrameDelegate <NSObject>
@optional
/**
* 本地麦克风采集到的原始音频数据回调
*
* @param frame 音频数据
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据 **不包含** 背景音、音效、混响等前处理效果,延迟极低。
* - 此接口回调出的音频数据支持修改。
*/
- (void) onCapturedRawAudioFrame:(TRTCAudioFrame *)frame;
/**
* 本地麦克风采集到的音频数据回调
*
* 本地采集并经过音频模块前处理后的音频数据回调
*
* @param frame 音频数据
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果,延迟较高。
* @note - 此接口回调出的音频数据支持修改。
* @note - 此接口回调出的音频时间帧长固定为0.02s。
由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
* @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。
*/
- (void) onCapturedAudioFrame:(TRTCAudioFrame *)frame;
- (void) onLocalProcessedAudioFrame:(TRTCAudioFrame *)frame;
/**
* 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据)
* 混音前的每一路远程用户的音频数据,即混音前的各路原始数据。例如,对某一路音频进行文字转换时,您必须使用该路音频的原始数据
*
* @param frame 音频数据
* @param userId 用户标识
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据是只读的,不支持修改。
*/
- (void) onPlayAudioFrame:(TRTCAudioFrame *)frame userId:(NSString *)userId;
- (void) onRemoteUserAudioFrame:(TRTCAudioFrame *)frame userId:(NSString *)userId;
/**
* 各路音频数据混合后的音频数据
... ... @@ -582,17 +667,30 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void) onMixedPlayAudioFrame:(TRTCAudioFrame *)frame;
/**
* SDK所有音频数据混合后的数据回调(包括采集音频数据和所有播放音频数据)
*
* @param frame 音频数据
* @note - 此接口回调出的音频数据不支持修改。
* @note - 此接口回调出的音频时间帧长固定为0.02s。音频格式固定为48000采样率、单声道、16采样点位宽。
由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
因此回调的字节帧长固定为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
* @note - 此接口回调出的是SDK所有音频数据的混合数据,包括:经过特效(包括混响、变声等)处理后的本地麦克风采集数据,
所有远程用户的数据,所有背景音和音效数据。不包括耳返数据。
*/
- (void) onMixedAllAudioFrame:(TRTCAudioFrame *)frame;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (十)Log 信息回调
// (十)Log 信息回调
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 日志相关回调
*
* 建议在一个比较早初始化的类中设置回调委托对象,例如 AppDelegate
* 建议在比较早初始化的类中设置回调委托对象,例如 AppDelegate
*/
@protocol TRTCLogDelegate <NSObject>
/**
... ...
... ... @@ -66,8 +66,24 @@
///音频码率(Kbps)
@property (nonatomic, assign) uint32_t audioBitrate;
///播放时延(ms)
@property (nonatomic, assign) uint32_t jitterBufferDelay;
/// 音频播放卡顿累计时长(ms)
@property (nonatomic, assign) uint32_t audioTotalBlockTime;
/// 音频播放卡顿率,音频卡顿的累计时长占音频总播放时长的百分比 (%)
@property (nonatomic, assign) uint32_t audioBlockRate;
/// 视频播放卡顿累计时长(ms)
@property (nonatomic, assign) uint32_t videoTotalBlockTime;
/// 音频播放卡顿率,视频卡顿累计时长占视频总播放时长的百分比(%)
@property (nonatomic, assign) uint32_t videoBlockRate;
///流类型(大画面 | 小画面 | 辅路画面)
@property (nonatomic, assign) TRTCVideoStreamType streamType;
@end
... ...
/*
* Module: TXAudioEffectManager 音乐和人声设置类
*
* Function: 用于音乐、短音效和人声效果功能的使用
*
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef void (^TXAudioMusicStartBlock)(NSInteger errCode);
typedef void (^TXAudioMusicProgressBlock)(NSInteger progressMs, NSInteger durationMs);
typedef void (^TXAudioMusicCompleteBlock)(NSInteger errCode);
@class TXAudioMusicParam;
typedef NS_ENUM(NSInteger, TXVoiceChangeType);
typedef NS_ENUM(NSInteger, TXVoiceReverbType);
@interface TXAudioEffectManager : NSObject
/// TXAudioEffectManager对象不可直接创建
/// 要通过 `TRTCCloud` 或 `TXLivePush` 的 `getAudioEffectManager` 接口获取
- (instancetype)init NS_UNAVAILABLE;
/////////////////////////////////////////////////////////////////////////////////
//
// (一)人声相关特效函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 人声相关特效函数
/// @{
/**
* 1.1 开启耳返
*
* 开启后会在耳机里听到自己的声音。
*
* @note 仅在戴耳机时有效,暂时仅支持部分采集延迟较低的机型
* @param enable true:开启;false:关闭
*/
- (void)enableVoiceEarMonitor:(BOOL)enable;
/**
* 1.2 设置耳返音量
*
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
- (void)setVoiceEarMonitorVolume:(NSInteger)volume;
/**
* 1.3 设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...)
*
* @note 设置的效果在退房后会失效,如果下次进房还需要对应特效,需要调用此接口再次设置。
*/
- (void)setVoiceReverbType:(TXVoiceReverbType)reverbType;
/**
* 1.4 设置人声的变声特效(萝莉、大叔、重金属、外国人...)
*
* @note 设置的效果在退房后会失效,如果下次进房还需要对应特效,需要调用此接口再次设置。
*/
- (void)setVoiceChangerType:(TXVoiceChangeType)changerType;
/**
* 1.5 设置麦克风采集人声的音量
*
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
- (void)setVoiceVolume:(NSInteger)volume;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)背景音乐特效函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 人声相关特效函数
/// @{
/**
* 2.1 开始播放背景音乐
*
* 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。
*
* @note 若您想同时播放多个音乐,请分配不同的 ID 进行播放。
* 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。
* @param musicParam 音乐参数
* @param startBlock 播放开始回调
* @param progressBlock 播放进度回调
* @param completeBlock 播放结束回调
*/
- (void)startPlayMusic:(TXAudioMusicParam *)musicParam
onStart:(TXAudioMusicStartBlock _Nullable)startBlock
onProgress:(TXAudioMusicProgressBlock _Nullable)progressBlock
onComplete:(TXAudioMusicCompleteBlock _Nullable)completeBlock;
/**
* 2.2 停止播放背景音乐
*
* @param id 音乐 ID
*/
- (void)stopPlayMusic:(int32_t)id;
/**
* 2.3 暂停播放背景音乐
*
* @param id 音乐 ID
*/
- (void)pausePlayMusic:(int32_t)id;
/**
* 2.4 恢复播放背景音乐
*
* @param id 音乐 ID
*/
- (void)resumePlayMusic:(int32_t)id;
/**
* 2.5 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。
*
* @param id 音乐 ID
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
- (void)setMusicPublishVolume:(int32_t)id volume:(NSInteger)volume;
/**
* 2.6 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。
*
* @param id 音乐 ID
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
- (void)setMusicPlayoutVolume:(int32_t)id volume:(NSInteger)volume;
/**
* 2.7 设置全局背景音乐的本地和远端音量的大小
*
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
- (void)setAllMusicVolume:(NSInteger)volume;
/**
* 2.8 调整背景音乐的音调高低
*
* @param id 音乐 ID
* @param pitch 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数;
*/
- (void)setMusicPitch:(int32_t)id pitch:(double)pitch;
/**
* 2.9 调整背景音乐的变速效果
*
* @param id 音乐 ID
* @param speedRate 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数;
*/
- (void)setMusicSpeedRate:(int32_t)id speedRate:(double)speedRate;
/**
* 2.10 获取背景音乐当前的播放进度(单位:毫秒)
*
* @param id 音乐 ID
* @return 成功返回当前播放时间,单位:毫秒,失败返回-1
*/
- (NSInteger)getMusicCurrentPosInMS:(int32_t)id;
/**
* 2.11 设置背景音乐的播放进度(单位:毫秒)
*
* @note 请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。
* 当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。
*
* @param id 音乐 ID
* @param pts 单位: 毫秒
*/
- (void)seekMusicToPosInMS:(int32_t)id pts:(NSInteger)pts;
/**
* 2.12 获取景音乐文件的总时长(单位:毫秒)
*
* @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。
* @return 成功返回时长,失败返回-1
*/
- (NSInteger)getMusicDurationInMS:(NSString *)path;
/// @}
@end
@interface TXAudioMusicParam : NSObject
/// 【字段含义】音乐 ID
/// 【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等
@property (nonatomic) int32_t ID;
/// 【字段含义】音乐文件的绝对路径
@property (nonatomic, copy) NSString *path;
/// 【字段含义】音乐循环播放的次数
/// 【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推
@property (nonatomic) NSInteger loopCount;
/// 【字段含义】是否将音乐传到远端
/// 【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO
@property (nonatomic) BOOL publish;
/// 【字段含义】播放的是否为短音乐文件
/// 【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO
@property (nonatomic) BOOL isShortFile;
/// 【字段含义】音乐开始播放时间点,单位毫秒
@property (nonatomic) NSInteger startTimeMS;
/// 【字段含义】音乐结束播放时间点,单位毫秒,0或者-1表示播放至文件结尾。
@property (nonatomic) NSInteger endTimeMS;
@end
typedef NS_ENUM(NSInteger, TXVoiceReverbType) {
TXVoiceReverbType_0 = 0, ///< 关闭混响
TXVoiceReverbType_1 = 1, ///< KTV
TXVoiceReverbType_2 = 2, ///< 小房间
TXVoiceReverbType_3 = 3, ///< 大会堂
TXVoiceReverbType_4 = 4, ///< 低沉
TXVoiceReverbType_5 = 5, ///< 洪亮
TXVoiceReverbType_6 = 6, ///< 金属声
TXVoiceReverbType_7 = 7, ///< 磁性
};
typedef NS_ENUM(NSInteger, TXVoiceChangeType) {
TXVoiceChangeType_0 = 0, ///< 关闭变声
TXVoiceChangeType_1 = 1, ///< 熊孩子
TXVoiceChangeType_2 = 2, ///< 萝莉
TXVoiceChangeType_3 = 3, ///< 大叔
TXVoiceChangeType_4 = 4, ///< 重金属
TXVoiceChangeType_5 = 5, ///< 感冒
TXVoiceChangeType_6 = 6, ///< 外国人
TXVoiceChangeType_7 = 7, ///< 困兽
TXVoiceChangeType_8 = 8, ///< 死肥仔
TXVoiceChangeType_9 = 9, ///< 强电流
TXVoiceChangeType_10 = 10, ///< 重机械
TXVoiceChangeType_11 = 11, ///< 空灵
};
NS_ASSUME_NONNULL_END
... ...
//
// TXBeautyManager.h
// TXLiteAVSDK
//
// Created by cui on 2019/10/24.
// Copyright © 2019 Tencent. All rights reserved.
//
/*
* Module: 美颜与图像处理参数设置类
*
* Function: 修改美颜、滤镜、绿幕等参数
*
*/
#import <Foundation/Foundation.h>
#import <TargetConditionals.h>
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
typedef UIImage TXImage;
#else
#import <AppKit/AppKit.h>
typedef NSImage TXImage;
#endif
NS_ASSUME_NONNULL_BEGIN
... ... @@ -21,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, TXBeautyStyle) {
TXBeautyStyleSmooth = 0, ///< 光滑,适用于美女秀场,效果比较明显。
TXBeautyStyleNature = 1, ///< 自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
TXBeautyStylePitu = 2 ///< 企业版美颜算法(企业版有效,其它版本设置此参数无效)
TXBeautyStylePitu = 2 ///< 由上海优图实验室提供的美颜算法,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高。
};
/// 美颜及动效参数管理
... ... @@ -51,144 +58,176 @@ typedef NS_ENUM(NSInteger, TXBeautyStyle) {
- (void)setWhitenessLevel:(float)level;
/**
* 开启清晰度增强
*
* @param enable YES:开启清晰度增强;NO:关闭清晰度增强。默认值:YES
*/
- (void)enableSharpnessEnhancement:(BOOL)enable;
/**
* 设置红润级别
*
* @param level 红润级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setRuddyLevel:(float)level;
/**
* 设置指定素材滤镜特效
*
* @param image 指定素材,即颜色查找表图片。**必须使用 png 格式**
*/
- (void)setFilter:(nullable TXImage *)image;
/**
* 设置滤镜浓度
*
* 在美女秀场等应用场景里,滤镜浓度的要求会比较高,以便更加突显主播的差异。
* 我们默认的滤镜浓度是0.5,如果您觉得滤镜效果不明显,可以使用下面的接口进行调节。
*
* @param strength 从0到1,越大滤镜效果越明显,默认值为0.5。
*/
- (void)setFilterStrength:(float)strength;
/**
* 设置绿幕背景视频,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* 此处的绿幕功能并非智能抠背,需要被拍摄者的背后有一块绿色的幕布来辅助产生特效
*
* @param file 视频文件路径。支持 MP4; nil 表示关闭特效。
*/
- (void)setGreenScreenFile:(nullable NSString *)file;
#if TARGET_OS_IPHONE
/**
* 设置大眼级别(企业版有效,其它版本设置此参数无效)
* 设置大眼级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 大眼级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setEyeScaleLevel:(float)level;
/**
* 设置瘦脸级别(企业版有效,其它版本设置此参数无效)
* 设置瘦脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 瘦脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setFaceSlimLevel:(float)level;
/**
* 设置V脸级别(企业版有效,其它版本设置此参数无效)
*设置 V 脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level V脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setFaceVLevel:(float)level;
/**
* 设置下巴拉伸或收缩(企业版有效,其它版本设置此参数无效)
* 设置下巴拉伸或收缩,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 下巴拉伸或收缩级别,取值范围-9 - 9;0 表示关闭,小于0表示收缩,大于0表示拉伸。
*/
- (void)setChinLevel:(float)level;
/**
* 设置短脸级别(企业版有效,其它版本设置此参数无效)
* 设置短脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 短脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setFaceShortLevel:(float)level;
/**
* 设置瘦鼻级别(企业版有效,其它版本设置此参数无效)
* 设置瘦鼻级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 瘦鼻级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setNoseSlimLevel:(float)level;
/**
* 设置亮眼 (企业版有效,其它版本设置此参数无效)
* 设置亮眼 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 亮眼级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setEyeLightenLevel:(float)level;
/**
* 设置白牙 (企业版有效,其它版本设置此参数无效)
* 设置白牙 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 白牙级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setToothWhitenLevel:(float)level;
/**
* 设置祛皱 (企业版有效,其它版本设置此参数无效)
* 设置祛皱 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 祛皱级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setWrinkleRemoveLevel:(float)level;
/**
* 设置祛眼袋 (企业版有效,其它版本设置此参数无效)
* 设置祛眼袋 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 祛眼袋级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setPounchRemoveLevel:(float)level;
/**
* 设置法令纹 (企业版有效,其它版本设置此参数无效)
* 设置法令纹 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 法令纹级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setSmileLinesRemoveLevel:(float)level;
/**
* 设置发际线 (企业版有效,其它版本设置此参数无效)
* 设置发际线 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 发际线级别,取值范围-9 - 9;0表示关闭,小于0表示抬高,大于0表示降低。
*/
- (void)setForeheadLevel:(float)level;
/**
* 设置眼距 (企业版有效,其它版本设置此参数无效)
* 设置眼距 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 眼距级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
*/
- (void)setEyeDistanceLevel:(float)level;
/**
* 设置眼角 (企业版有效,其它版本设置此参数无效)
* 设置眼角 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 眼角级别,取值范围-9 - 9;0表示关闭,小于0表示降低,大于0表示抬高。
*/
- (void)setEyeAngleLevel:(float)level;
/**
* 设置嘴型 (企业版有效,其它版本设置此参数无效)
* 设置嘴型 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 嘴型级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
*/
- (void)setMouthShapeLevel:(float)level;
/**
* 设置鼻翼 (企业版有效,其它版本设置此参数无效)
* 设置鼻翼 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param level 鼻翼级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
*/
- (void)setNoseWingLevel:(float)level;
/**
* 设置鼻子位置 (企业版有效,其它版本设置此参数无效)
* 设置鼻子位置 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
* @param level 鼻子位置级别,取值范围-9 - 9;0表示关闭,小于0表示抬高,大于0表示降低。
*/
- (void)setNosePositionLevel:(float)level;
/**
* 设置嘴唇厚度 (企业版有效,其它版本设置此参数无效)
* 设置嘴唇厚度 ,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
* @param level 嘴唇厚度级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
*/
- (void)setLipsThicknessLevel:(float)level;
/**
* 设置脸型(企业版有效,其它版本设置此参数无效)
* 设置脸型,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
* @param level 美型级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
*/
- (void)setFaceBeautyLevel:(float)level;
/**
* 选择 AI 动效挂件(企业版有效,其它版本设置此参数无效)
* 选择 AI 动效挂件,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* @param tmplName 动效名称
* @param tmplDir 动效所在目录
... ... @@ -196,7 +235,7 @@ typedef NS_ENUM(NSInteger, TXBeautyStyle) {
- (void)setMotionTmpl:(nullable NSString *)tmplName inDir:(nullable NSString *)tmplDir;
/**
* 设置动效静音(企业版有效,其它版本设置此参数无效)
* 设置动效静音,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
*
* 有些挂件本身会有声音特效,通过此 API 可以关闭这些特效播放时所带的声音效果。
*
... ...
/*
* Module: TXDeviceManager 设备管理类
*
* Function: 用于管理 iOS / Mac 的硬件设备
*
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
#if TARGET_OS_IPHONE
/// 系统音量类型
typedef NS_ENUM(NSInteger, TXSystemVolumeType);
/// 声音播放模式(音频路由)
typedef NS_ENUM(NSInteger, TXAudioRoute);
#elif TARGET_OS_MAC
/// 设备类型
typedef NS_ENUM(NSInteger, TXMediaDeviceType);
/// 设备描述
@class TXMediaDeviceInfo;
#endif
@interface TXDeviceManager : NSObject
- (instancetype)init NS_UNAVAILABLE;
#if TARGET_OS_IPHONE
/**
* 判断当前是否为前置摄像头
*/
- (BOOL)isFrontCamera;
/**
* 切换摄像头
*/
- (NSInteger)switchCamera:(BOOL)frontCamera;
/**
* 查询当前摄像头是否支持缩放
*/
- (BOOL)isCameraZoomSupported;
/**
* 查询当前摄像头支持的最大缩放比例
*/
- (CGFloat)getCameraZoomMaxRatio;
/**
* 设置当前摄像头的缩放比例
*
* @param zoomRatio 取值范围1 - 5,取值为1表示最远视角(正常镜头),取值为5表示最近视角(放大镜头)。
* 最大值推荐为5,若超过5,视频数据会变得模糊不清。默认值为1。
*/
- (NSInteger)setCameraZoomRatio:(CGFloat)zoomRatio;
/**
* 查询是否支持自动识别人脸位置
*/
- (BOOL)isAutoFocusEnabled;
/**
* 设置人脸自动识别
*
* @param enabled YES: 开启;NO:关闭,默认值:YES
*/
- (NSInteger)enableCameraAutoFocus:(BOOL)enabled;
/**
* 设置摄像头焦点
*
* @param position 对焦位置
*/
- (NSInteger)setCameraFocusPosition:(CGPoint)position;
/**
* 查询是否支持开关闪光灯(手电筒模式)
*/
- (BOOL)isCameraTorchSupported;
/**
* 开关闪光灯
*
* enabled YES:开启;NO:关闭,默认值:NO
*/
- (NSInteger)enableCameraTorch:(BOOL)enabled;
/**
* 设置通话时使用的系统音量类型
*
* @note
* 1. 需要在调用 startLocalAudio() 之前调用该接口。
* 2. 如无特殊需求,不推荐您自行设置,您只需通过 enterRoom 设置好适合您的场景,SDK 内部会自动选择相匹配的音量类型。
*
* @param type 系统音量类型,参见 TXSystemVolumeType 说明。如无特殊需求,不推荐您自行设置。
*/
- (NSInteger)setSystemVolumeType:(TXSystemVolumeType)type;
/**
* 设置音频路由
*
* 微信和手机 QQ 视频通话功能的免提模式就是基于音频路由实现的。
* 一般手机都有两个扬声器,一个是位于顶部的听筒扬声器,声音偏小;一个是位于底部的立体声扬声器,声音偏大。
* 设置音频路由的作用就是决定声音使用哪个扬声器播放。
*
* @param route 音频路由,即声音由哪里输出(扬声器、听筒),默认值:TXAudioRouteSpeakerphone
*/
- (NSInteger)setAudioRoute:(TXAudioRoute)route;
#elif TARGET_OS_MAC
/**
* 获取设备列表
*
* @param type 设备类型
*/
- (NSArray<TXMediaDeviceInfo *> * _Nullable)getDevicesList:(TXMediaDeviceType)type;
/**
* 设置要使用的设备
*
* @param type 设备类型
* @param deviceId 从 getDevicesList 中得到的设备 ID
*/
- (NSInteger)setCurrentDevice:(TXMediaDeviceType)type deviceId:(NSString *)deviceId;
/**
* 获取当前的设备信息
*
* @param type 设备类型
*/
- (TXMediaDeviceInfo * _Nullable)getCurrentDevice:(TXMediaDeviceType)type;
/**
* 设置当前设备的音量
*
* @param volume 音量值,范围0 - 100
* @param type 设备类型,仅支持 AudioInput 和 AudioOutput 类型。
*/
- (NSInteger)setCurrentDeviceVolume:(NSInteger)volume deviceType:(TXMediaDeviceType)type;
/**
* 获取当前设备的音量
*
* @param type 设备类型,仅支持 AudioInput 和 AudioOutput 类型。
*/
- (NSInteger)getCurrentDeviceVolume:(TXMediaDeviceType)type;
/**
* 设置当前设备的静音状态
*
* @param mute 设置为 YES 时,麦克风设备静音
* @param type 设备类型,仅支持 AudioInput 和 AudioOutput 类型。
*/
- (NSInteger)setCurrentDeviceMute:(BOOL)mute deviceType:(TXMediaDeviceType)type;
/**
* 获取当前设备的静音状态
*
* @param type 设备类型,仅支持 AudioInput 和 AudioOutput 类型。
*/
- (BOOL)getCurrentDeviceMute:(TXMediaDeviceType)type;
/**
* 开始摄像头测试
*
* @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。
* @param view 预览画面所在的父控件
*/
- (NSInteger)startCameraDeviceTest:(NSView *)view;
/**
* 结束摄像头测试
*/
- (NSInteger)stopCameraDeviceTest;
/**
* 开始麦克风测试
*
* 该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。
*/
- (NSInteger)startMicDeviceTest:(NSInteger)interval testEcho:(void (^)(NSInteger volume))testEcho;
/**
* 结束麦克风测试
*/
- (NSInteger)stopMicDeviceTest;
/**
* 开始扬声器测试
*
* 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。
*/
- (NSInteger)startSpeakerDeviceTest:(NSString *)audioFilePath onVolumeChanged:(void (^)(NSInteger volume, BOOL isLastFrame))volumeBlock;
/**
* 结束扬声器测试
*/
- (NSInteger)stopSpeakerDeviceTest;
#endif
@end
#if TARGET_OS_IPHONE
/**
* 系统音量类型
*
* 智能手机一般具备两种系统音量类型,即通话音量类型和媒体音量类型。
* - 通话音量:手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差,
* 无法通过音量按键将音量调成零,但是支持蓝牙耳机上的麦克风。
*
* - 媒体音量:手机专门为音乐场景设计的音量类型,音质相比于通话音量类型要好,通过通过音量按键可以将音量调成零。
* 使用媒体音量类型时,如果要开启回声抵消(AEC)功能,SDK 会开启内置的声学处理算法对声音进行二次处理。
* 在媒体音量模式下,蓝牙耳机无法使用自带的麦克风采集声音,只能使用手机上的麦克风进行声音采集。
*
* SDK 目前提供了三种系统音量类型的控制模式,分别为:
* - Auto:“麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。
* 如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动选择该模式。
*
* - VOIP:全程使用通话音量,适合多人会议场景。
* 如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall,SDK 会自动选择该模式。
*
* - Media:通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。
*
*/
typedef NS_ENUM(NSInteger, TXSystemVolumeType) {
TXSystemVolumeTypeAuto = 0,
TXSystemVolumeTypeMedia = 1,
TXSystemVolumeTypeVOIP = 2,
};
/**
* 声音播放模式(音频路由)
*
* 微信和手机 QQ 里的视频通话功能,都有一个免提模式,开启后就不用把手机贴在耳朵上,这个功能就是基于音频路由实现的。
* 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来:
* - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。
* - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。
*/
typedef NS_ENUM(NSInteger, TXAudioRoute) {
TXAudioRouteSpeakerphone = 0, ///< 扬声器
TXAudioRouteEarpiece = 1, ///< 听筒
};
#elif TARGET_OS_MAC
/**
* 设备类型(仅 Mac)
*
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
typedef NS_ENUM(NSInteger, TXMediaDeviceType) {
TXMediaDeviceTypeUnknown = -1, ///< 未定义
TXMediaDeviceTypeAudioInput = 0, ///< 麦克风
TXMediaDeviceTypeAudioOutput = 1, ///< 扬声器或听筒
TXMediaDeviceTypeVideoCamera = 2, ///< 摄像头
};
/**
* 设备描述
*
* 在 Mac 上,每一种类型的设备都可能有多个,TRTC SDK 的 Mac 版本提供了一系列函数用来操作这些设备。
*/
@interface TXMediaDeviceInfo : NSObject
/// 设备类型
@property (assign, nonatomic) TXMediaDeviceType type;
/// 设备ID
@property (copy, nonatomic, nullable) NSString *deviceId;
/// 设备名称
@property (copy, nonatomic, nullable) NSString *deviceName;
@end
#endif
NS_ASSUME_NONNULL_END
... ...
#ifndef TXLiteAVBuffer_h
#define TXLiteAVBuffer_h
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
namespace liteav {
/**
* Buffer 数据类型
*/
class TXLiteAVBuffer {
public:
virtual ~TXLiteAVBuffer() {}
/**
* 获取 buffer 的内存地址
*/
virtual uint8_t * data() = 0;
/**
* 获取 buffer 的内存地址
*/
virtual const uint8_t * cdata() const = 0;
/**
* 获取 buffer 的内存size
*/
virtual size_t size() const = 0;
/**
* 设置 buffe 的有效数据 size
* 如果此 size 超过当前 capacity,会造成重新分配内存,并复制数据
*/
virtual void SetSize(size_t size) = 0;
/**
* 确保 buffer 分配的内存空间足够,不用多次分配拷贝内存。此方法会引起内存分配,data / cdata 方法获取的指针失效
* @param capacity buffer 预分配的内存size
*/
virtual void EnsureCapacity(size_t capacity) = 0;
};
}
#endif /* TXLiteAVBuffer_h */
... ...
... ... @@ -45,6 +45,7 @@ typedef enum TXLiteAVError
//
// 设备(摄像头、麦克风、扬声器)相关错误码
// NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
// 区段:-6000 ~ -6999
//
/////////////////////////////////////////////////////////////////////////////////
ERR_CAMERA_START_FAIL = -1301, ///< 打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
... ... @@ -60,7 +61,6 @@ typedef enum TXLiteAVError
ERR_SPEAKER_SET_PARAM_FAIL = -1322, ///< 扬声器设置参数失败
ERR_SPEAKER_STOP_FAIL = -1323, ///< 停止扬声器失败
/////////////////////////////////////////////////////////////////////////////////
//
// 屏幕分享相关错误码
... ... @@ -68,11 +68,11 @@ typedef enum TXLiteAVError
//
/////////////////////////////////////////////////////////////////////////////////
ERR_SCREEN_CAPTURE_START_FAIL = -1308, ///< 开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了,如果在 Windows 或 Mac 系统的设备出现,请检查录屏接口的参数是否符合要求
ERR_SCREEN_CAPTURE_UNSURPORT = -1309, ///< 录屏失败,在 Android 平台,需要5.0以上的系统
ERR_SCREEN_CAPTURE_UNSURPORT = -1309, ///< 录屏失败,在 Android 平台,需要5.0以上的系统,在 iOS 平台,需要11.0以上的系统
ERR_SERVER_CENTER_NO_PRIVILEDGE_PUSH_SUB_VIDEO = -102015, ///< 没有权限上行辅路
ERR_SERVER_CENTER_ANOTHER_USER_PUSH_SUB_VIDEO = -102016, ///< 其他用户正在上行辅路
ERR_SCREEN_CAPTURE_STOPPED = -7001, ///< 录屏被系统中止
/////////////////////////////////////////////////////////////////////////////////
//
// 编解码相关错误码
... ... @@ -83,7 +83,6 @@ typedef enum TXLiteAVError
ERR_UNSUPPORTED_RESOLUTION = -1305, ///< 不支持的视频分辨率
ERR_AUDIO_ENCODE_FAIL = -1304, ///< 音频帧编码失败,例如传入自定义音频数据,SDK 无法处理
ERR_UNSUPPORTED_SAMPLERATE = -1306, ///< 不支持的音频采样率
/////////////////////////////////////////////////////////////////////////////////
//
... ... @@ -242,11 +241,11 @@ typedef enum TXLiteAVError
ERR_SERVER_CENTER_I_FRAME_RPS_INVALID_PARAMETER = -102028, ///< 请求 I 帧参数错误
ERR_SERVER_CENTER_INVALID_ROOM_ID = -102029, ///< 房间号非法
ERR_SERVER_CENTER_ROOM_ID_TOO_LONG = -102030, ///< 房间号超过限制
ERR_SERVER_CENTER_ROOM_FULL = -102052, ///< 房间满员
ERR_SERVER_CENTER_DECODE_JSON_FAIL = -102053, ///< JSON 串解析失败
ERR_SERVER_CENTER_UNKNOWN_SUB_CMD = -102054, ///< 未定义命令字
ERR_SERVER_CENTER_INVALID_ROLE = -102055, ///< 未定义角色
ERR_SERVER_CENTER_REACH_PROXY_MAX = -102056, ///< 代理机超出限制
ERR_SERVER_CENTER_ROOM_FULL = -102052, ///< 房间满员
ERR_SERVER_CENTER_DECODE_JSON_FAIL = -102053, ///< JSON 串解析失败
ERR_SERVER_CENTER_UNKNOWN_SUB_CMD = -102054, ///< 未定义命令字
ERR_SERVER_CENTER_INVALID_ROLE = -102055, ///< 未定义角色
ERR_SERVER_CENTER_REACH_PROXY_MAX = -102056, ///< 代理机超出限制
ERR_SERVER_CENTER_RECORDID_STORE = -102057, ///< 无法保存用户自定义 recordId
ERR_SERVER_CENTER_PB_SERIALIZE = -102058, ///< Protobuf 序列化错误
... ... @@ -274,6 +273,13 @@ typedef enum TXLiteAVError
ERR_SERVER_SSO_TICKET_EXPIRED = -70347, ///< 票据因过期原因校验失败
ERR_SERVER_SSO_ACCOUNT_EXCEED_PURCHASES = -70398, ///< 创建账号数量超过已购买预付费数量限制
ERR_SERVER_SSO_INTERNAL_ERROR = -70500, ///< 服务器内部错误,请重试
//秒级监控上报错误码
ERR_REQUEST_QUERY_CONFIG_TIMEOUT = -4001, ///< 请求通用配置超时
ERR_CUSTOM_STREAM_INVALID = -4002, ///< 自定义流id错误
ERR_USER_DEFINE_RECORD_ID_INVALID = -4003, ///< userDefineRecordId错误
ERR_MIX_PARAM_INVALID = -4004, ///< 混流参数校验失败
ERR_REQUEST_ACC_BY_HOST_IP = -4005, ///< 通过域名进行0x1请求
// - /Remove From Head
} TXLiteAVError;
... ... @@ -292,6 +298,13 @@ typedef enum TXLiteAVWarning
WARNING_INSUFFICIENT_CAPTURE_FPS = 1108, ///< 摄像头采集帧率不足,部分自带美颜算法的 Android 手机上会出现
WARNING_SW_ENCODER_START_FAIL = 1109, ///< 软编码启动失败
WARNING_REDUCE_CAPTURE_RESOLUTION = 1110, ///< 摄像头采集分辨率被降低,以满足当前帧率和性能最优解。
WARNING_CAMERA_DEVICE_EMPTY = 1111, ///< 没有检测到可用的摄像头设备
WARNING_CAMERA_NOT_AUTHORIZED = 1112, ///< 用户未授权当前应用使用摄像头
WARNING_MICROPHONE_DEVICE_EMPTY = 1201, ///< 没有检测到可用的麦克风设备
WARNING_SPEAKER_DEVICE_EMPTY = 1202, ///< 没有检测到可用的扬声器设备
WARNING_MICROPHONE_NOT_AUTHORIZED = 1203, ///< 用户未授权当前应用使用麦克风
WARNING_MICROPHONE_DEVICE_ABNORMAL = 1204, ///< 音频采集设备不可用(例如被占用或者PC判定无效设备)
WARNING_SPEAKER_DEVICE_ABNORMAL = 1205, ///< 音频播放设备不可用(例如被占用或者PC判定无效设备)
WARNING_VIDEO_FRAME_DECODE_FAIL = 2101, ///< 当前视频帧解码失败
WARNING_AUDIO_FRAME_DECODE_FAIL = 2102, ///< 当前音频帧解码失败
WARNING_VIDEO_PLAY_LAG = 2105, ///< 当前视频播放出现卡顿
... ... @@ -299,6 +312,7 @@ typedef enum TXLiteAVWarning
WARNING_VIDEO_DECODER_HW_TO_SW = 2108, ///< 当前流硬解第一个 I 帧失败,SDK 自动切软解
WARNING_SW_DECODER_START_FAIL = 2109, ///< 软解码器启动失败
WARNING_VIDEO_RENDER_FAIL = 2110, ///< 视频渲染失败
WARNING_START_CAPTURE_IGNORED = 4000, ///< 已经在采集,启动采集被忽略
WARNING_AUDIO_RECORDING_WRITE_FAIL = 7001, ///< 音频录制写入文件失败
WARNING_ROOM_DISCONNECT = 5101, ///< 网络断开连接
WARNING_IGNORE_UPSTREAM_FOR_AUDIENCE = 6001, ///< 当前是观众角色,忽略上行音视频数据
... ... @@ -379,6 +393,8 @@ typedef enum TXLiteAVEvent
EVT_MIC_START_SUCC = 2027, ///< 麦克风启动成功
EVT_PLAY_GET_METADATA = 2028, ///< 视频流MetaData事件
EVT_MIC_RELEASE_SUCC = 2029, ///< 释放麦克风占用
EVT_AUDIO_DEVICE_ROUTE_CHANGED = 2030, ///< 音频设备的route发生改变,即当前的输入输出设备发生改变,比如耳机被拔出
EVT_PLAY_GET_FLVSESSIONKEY = 2031, ///< TXLivePlayer 接收到http响应头中的 flvSessionKey 信息
EVT_ROOM_ENTER = 1018, ///< 进入房间成功
EVT_ROOM_EXIT = 1019, ///< 退出房间
... ...
/*
* Module: live 编码数据回调
*
* Function: 回调推流端编码完,和 播放端解码前的数据
*
*/
#ifndef TXLiteAVEncodedDataProcessingListener_h
#define TXLiteAVEncodedDataProcessingListener_h
#include <stdio.h>
#include "TXLiteAVBuffer.h"
namespace liteav {
struct TXLiteAVEncodedData {
const char * userId; // didEncodeVideo 和 didEncodeAudio 回调时,此字段为null;
int streamType; // 视频流类型,参考 TRTCVideoStreamType,audio时,此字段为0
const liteav::TXLiteAVBuffer * originData; // 原始数据
liteav::TXLiteAVBuffer * processedData; // 写回处理后的数据
};
class ITXLiteAVEncodedDataProcessingListener {
public:
virtual ~ITXLiteAVEncodedDataProcessingListener() {}
/**
* 回调编码完的视频数据。
* @note videoData.userId = nullptr
*/
virtual bool didEncodeVideo(TXLiteAVEncodedData & videoData) { return false; }
/**
* 回调解码前的视频数据。
* @note videoData.userId 表示对应的user,当userId 为 nullptr时,表示此时先接收到数据了,对应的userId还未完成同步。获取到userId之后会回调正确的userId
*/
virtual bool willDecodeVideo(TXLiteAVEncodedData & videoData) { return false; }
/**
* 回调编码完的音频数据。
* @note audioData.userId = nullptr
*/
virtual bool didEncodeAudio(TXLiteAVEncodedData & audioData) { return false; }
/**
* 回调解码前的音频数据。
* @note audioData.userId 表示对应的user,当userId 为 nullptr时,表示此时先接收到数据了,对应的userId还未完成同步。获取到userId之后会回调正确的userId
*/
virtual bool willDecodeAudio(TXLiteAVEncodedData & audioData) { return false; }
};
}
#endif /* TXLiteAVEncodedDataProcessingListener_h */
... ...
... ... @@ -13,8 +13,10 @@
#import <TXLiteAVSDK_TRTC/TRTCCloudDelegate.h>
#import <TXLiteAVSDK_TRTC/TRTCStatistics.h>
#import <TXLiteAVSDK_TRTC/TXAudioCustomProcessDelegate.h>
#import <TXLiteAVSDK_TRTC/TXAudioEffectManager.h>
#import <TXLiteAVSDK_TRTC/TXAudioRawDataDelegate.h>
#import <TXLiteAVSDK_TRTC/TXBeautyManager.h>
#import <TXLiteAVSDK_TRTC/TXDeviceManager.h>
#import <TXLiteAVSDK_TRTC/TXLiteAVCode.h>
#import <TXLiteAVSDK_TRTC/TXLiveAudioSessionDelegate.h>
#import <TXLiteAVSDK_TRTC/TXLiveBase.h>
... ...
... ... @@ -10,6 +10,9 @@
- (BOOL)setActive:(BOOL)active error:(NSError **)outError;
@optional
- (BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError **)outError;
@optional
- (BOOL)setMode:(NSString *)mode error:(NSError **)outError;
@optional
... ... @@ -27,7 +30,11 @@
- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError **)outError;
@optional
- (BOOL)setPreferredOutputNumberOfChannels:(NSInteger)count error:(NSError **)outError;
@optional
- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError **)outError;
#endif
@end
#endif /* TXLiveAudioSessionDelegate_h */
... ...
... ... @@ -67,6 +67,9 @@ typedef NS_ENUM(NSInteger, TX_Enum_Type_LogLevel) {
/// 设置sdk的licence下载url和key
+ (void)setLicenceURL:(NSString *)url key:(NSString *)key;
/// 设置userId,用于数据上报
+ (void)setUserId:(NSString *)userId;
/// 获取 Licence 信息
+ (NSString *)getLicenceInfo;
@end
... ...
... ... @@ -65,6 +65,16 @@
///【特别说明】每条音视频流中只能设置一个 MetaData 数据头,除非断网重连,否则 TXLivePlayer 的 EVT_PLAY_GET_METADATA 消息也只会收到一次。
@property(nonatomic, assign) BOOL enableMetaData;
///【字段含义】是否开启 HTTP 头信息回调,默认值为 @“”
/// HTTP 响应头中除了“content-length”、“content-type”等标准字段,不同云服务商还可能会添加一些非标准字段。
/// 比如腾讯云会在直播 CDN 的 HTTP-FLV 格式的直播流中增加 “X-Tlive-SpanId” 响应头,并在其中设置一个随机字符串,用来唯一标识一次直播。
///
/// 如果您在使用腾讯云的直播 CDN,可以设置 flvSessionKey 为 @“X-Tlive-SpanId”,SDK 会在 HTTP 响应头里解析这个字段,
/// 并通过 TXLivePlayListener 中的 onPlayEvent(EVT_PLAY_GET_FLVSESSIONKEY) 事件通知给您的 App。
///
///【特别说明】每条音视频流中只能解析一个 flvSessionKey,除非断网重连,否则 EVT_PLAY_GET_FLVSESSIONKEY 只会抛送一次。
@property(nonatomic, copy) NSString* flvSessionKey;
///【字段含义】视频渲染对象回调的视频格式,默认值:kCVPixelFormatType_420YpCbCr8Planar
///【特别说明】支持:kCVPixelFormatType_420YpCbCr8Planar 和 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
@property(nonatomic, assign) OSType playerPixelFormatType;
... ...
... ... @@ -100,7 +100,8 @@ typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
/**
* 1.7 startPlay 后是否立即播放,默认 YES,只有点播有效
*/
@property BOOL isAutoPlay;
@property (nonatomic) BOOL isAutoPlay;
#endif
/// @}
... ... @@ -197,14 +198,12 @@ typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
*/
- (void)setRenderMode:(TX_Enum_Type_RenderMode)renderMode;
#if TARGET_OS_IPHONE
/**
* 3.3 截屏
*
* @param snapshotCompletionBlock 通过回调返回当前图像
*/
- (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
#endif
/// @}
... ... @@ -370,4 +369,4 @@ typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
/// @}
@end
/// @}
\ No newline at end of file
/// @}
... ...
... ... @@ -71,7 +71,7 @@ enum EventID
PLAY_EVT_VOD_LOADING_END = EVT_VOD_PLAY_LOADING_END, ///< 点播,loading结束
PLAY_EVT_STREAM_SWITCH_SUCC = EVT_PLAY_LIVE_STREAM_SWITCH_SUCC, ///< 直播,切流成功(切流可以播放不同画面大小的视频)
PLAY_EVT_GET_METADATA = EVT_PLAY_GET_METADATA, ///< TXLivePlayer 接收到视频流中的 metadata 头信息(一条视频流仅触发一次)
PLAY_EVT_GET_FLVSESSIONKEY = EVT_PLAY_GET_FLVSESSIONKEY, ///< TXLivePlayer 接收到http响应头中的 flvSessionKey 信息
PLAY_ERR_NET_DISCONNECT = ERR_PLAY_LIVE_STREAM_NET_DISCONNECT, ///< 直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放
... ...
... ... @@ -130,7 +130,7 @@ typedef NS_ENUM(NSInteger, TX_Enum_Type_RenderMode) {
typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyStyle) {
BEAUTY_STYLE_SMOOTH = 0, ///< 光滑,磨皮程度较高,更适合秀场直播类场景下使用。
BEAUTY_STYLE_NATURE = 1, ///< 自然,磨皮算法会最大限度保留皮肤细节。
BEAUTY_STYLE_PITU = 2, ///< 天天P图版美颜, 需要企业版 SDK 才能支持,普通版本设置此选项无效
BEAUTY_STYLE_PITU = 2, ///< 由上海优图实验室提供的美颜算法,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高
};
/**
... ... @@ -339,6 +339,8 @@ typedef NS_ENUM(NSInteger, TXCaptureVideoInputSource) {
*/
#define EVT_MSG @"EVT_MSG" ///> 事件ID
#define EVT_TIME @"EVT_TIME" ///> 事件发生的UTC毫秒时间戳
#define EVT_UTC_TIME @"EVT_UTC_TIME" ///> 事件发生的UTC毫秒时间戳(兼容性)
#define EVT_BLOCK_DURATION @"EVT_BLOCK_DURATION" ///> 卡顿时间(毫秒)
#define EVT_PARAM1 @"EVT_PARAM1" ///> 事件参数1
#define EVT_PARAM2 @"EVT_PARAM2" ///> 事件参数2
#define EVT_GET_MSG @"EVT_GET_MSG" ///> 消息内容,收到PLAY_EVT_GET_MESSAGE事件时,通过该字段获取消息内容
... ...
#ifndef __ITRTCCLOUD_H__
#define __ITRTCCLOUD_H__
/*
* Module: ITRTCCloud @ TXLiteAVSDK
*
* SDK VERSION 8.2.9808
*
* Function: 腾讯云视频通话功能的主要接口类
*
* 创建/使用/销毁 ITRTCCloud 对象的示例代码:
* <pre>
* ITRTCCloud *trtcCloud = getTRTCShareInstance();
* if(trtcCloud) {
* std::string version(trtcCloud->getSDKVersion());
* }
* //
* //
* destroyTRTCShareInstance();
* trtcCloud = nullptr;
* </pre>
*/
#include "TRTCCloudCallback.h"
#include "TRTCTypeDef.h"
#include "ITXAudioEffectManager.h"
#include "ITXDeviceManager.h"
#ifdef _WIN32
#include "IDeprecatedTRTCCloud.h"
#endif // _WIN32
namespace trtc {
class ITRTCCloud;
}
/// @defgroup ITRTCCloud_cplusplus ITRTCCloud
/// 腾讯云视频通话功能的主要接口类
/// @{
extern "C" {
/// @name 创建与销毁 ITRTCCloud 单例
/// @{
#ifdef __ANDROID__
/**
* @brief 用于动态加载 dll 时,获取 ITRTCCloud 对象指针。
*
* @return 返回 ITRTCCloud 单例对象的指针,注意:delete ITRTCCloud*会编译错误,需要调用
* destroyTRTCCloud 释放单例指针对象。
* @param context Android 上下文,内部会转为 ApplicationContext 用于系统 API 调用
* @note 本接口仅适用于Android平台
*/
TRTC_API trtc::ITRTCCloud* getTRTCShareInstance(void *context);
#else
/**
* @brief 用于动态加载 dll 时,获取 ITRTCCloud 对象指针。
*
* @return 返回 ITRTCCloud 单例对象的指针,注意:delete ITRTCCloud*会编译错误,需要调用
* destroyTRTCCloud 释放单例指针对象。
* @note 本接口适用于Windows、Mac、iOS平台
*/
TRTC_API trtc::ITRTCCloud* getTRTCShareInstance();
#endif
/**
* @brief 释放 ITRTCCloud 单例对象。
*/
TRTC_API void destroyTRTCShareInstance();
/// @}
}
namespace trtc {
class ITRTCCloud
#ifdef _WIN32
: public IDeprecatedTRTCCloud
#endif // _WIN32
{
protected:
virtual ~ITRTCCloud(){};
public:
/////////////////////////////////////////////////////////////////////////////////
//
// 设置 TRTCCloudCallback 回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 设置 ITRTCCloudCallback 回调
/// @{
/**
* 设置回调接口 ITRTCCloudCallback
*
* 您可以通过 ITRTCCloudCallback 获得来自 SDK 的各种状态通知,详见 ITRTCCloudCallback.h 中的定义
*
* @param callback 事件回调指针
*/
virtual void addCallback(ITRTCCloudCallback* callback) = 0;
/**
* 移除事件回调
*
* @param callback 事件回调指针
*/
virtual void removeCallback(ITRTCCloudCallback* callback) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (一)房间相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 房间相关接口函数
/// @{
/**
* 1.1 进入房间
*
* 调用接口后,您会收到来自 ITRTCCloudCallback 中的 onEnterRoom(result) 回调:
* - 如果加入成功,result 会是一个正数(result > 0),表示加入房间的时间消耗,单位是毫秒(ms)。
* - 如果加入失败,result 会是一个负数(result < 0),表示进房失败的错误码。
*
* 进房失败的错误码含义请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
*
* - {@link TRTCAppSceneVideoCall}:<br>
* 视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
* 适合:[1对1视频通话]、[300人视频会议]、[在线问诊]、[远程面试]等。<br>
* - {@link TRTCAppSceneAudioCall}:<br>
* 语音通话场景,支持 48kHz,支持双声道。单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
* 适合:[1对1语音通话]、[300人语音会议]、[在线狼人杀]、[语音聊天室]等。<br>
* - {@link TRTCAppSceneLIVE}:<br>
* 视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
* 适合:[在线互动课堂]、[互动直播]、[视频相亲]、[远程培训]、[超大型会议]等。<br>
* - {@link TRTCAppSceneVoiceChatRoom}:<br>
* 语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
* 适合:[语聊房]、[K 歌房]、[FM 电台]等。<br>
*
* @param param 进房参数,请参考 trtc::TRTCParams
* @param scene 应用场景,目前支持视频通话(VideoCall)、在线直播(Live)、语音通话(AudioCall)、语音聊天室(VoiceChatRoom)四种场景。
*
* @note
* 1. 当 scene 选择为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom 时,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。<br>
* 2. 不管进房是否成功,enterRoom 都必须与 exitRoom 配对使用,在调用 exitRoom 前再次调用 enterRoom 函数会导致不可预期的错误问题。
*/
virtual void enterRoom(const TRTCParams& params, TRTCAppScene scene) = 0;
/**
* 1.2 离开房间
*
* 调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。
* 待资源释放完毕,SDK 会通过 ITRTCCloudCallback 中的 onExitRoom() 回调通知您。
*
* 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。
* 否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。
*/
virtual void exitRoom() = 0;
/**
* 1.3 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom)
*
* 在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。
* 您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。
*
* @param role 目标角色,默认为主播:
* - {@link TRTCRoleAnchor} 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。
* - {@link TRTCRoleAudience} 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。
*/
virtual void switchRole(TRTCRoleType role) = 0;
/**
* 1.4 请求跨房通话(主播 PK)
*
* TRTC 中两个不同音视频房间中的主播,可以通过“跨房通话”功能拉通连麦通话功能。使用此功能时,
* 两个主播无需退出各自原来的直播间即可进行“连麦 PK”。
*
* 例如:当房间“001”中的主播 A 通过 connectOtherRoom() 跟房间“002”中的主播 B 拉通跨房通话后,
* 房间“001”中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B,true) 回调。
* 房间“002”中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A,true) 回调。
*
* 简言之,跨房通话的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。
*
* <pre>
* 房间 001 房间 002
* ------------- ------------
* 跨房通话前:| 主播 A | | 主播 B |
* | 观众 U V W | | 观众 X Y Z |
* ------------- ------------
*
* 房间 001 房间 002
* ------------- ------------
* 跨房通话后:| 主播 A B | | 主播 B A |
* | 观众 U V W | | 观众 X Y Z |
* ------------- ------------
* </pre>
*
* 跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,要求至少包含两个字段:
* - roomId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为“002”。
* - userId:房间“001”中的主播 A 要跟房间“002”中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。
*
* 跨房通话的请求结果会通过 ITRTCCloudCallback 中的 onConnectOtherRoom() 回调通知给您。
*
* <pre>
* //此处用到 jsoncpp 库来格式化 JSON 字符串
* Json::Value jsonObj;
* jsonObj["roomId"] = 002;
* jsonObj["userId"] = "userB";
* Json::FastWriter writer;
* std::string params = writer.write(jsonObj);
* trtc.ConnectOtherRoom(params.c_str());
* </pre>
*
* @param params JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。
*
*/
virtual void connectOtherRoom(const char* params) = 0;
/**
* 1.5 关闭跨房连麦
*
* 跨房通话的退出结果会通过 ITRTCCloudCallback 中的 onDisconnectOtherRoom() 回调通知给您。
*/
virtual void disconnectOtherRoom() = 0;
/**
* 1.6 设置音视频数据接收模式,需要在进房前设置才能生效
*
* 为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。
* 若您没有调用 startRemoteView,视频数据将自动超时取消。
* 若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。
*
* @param autoRecvAudio true:自动接收音频数据;false:需要调用 muteRemoteAudio 进行请求或取消。默认值:true
* @param autoRecvVideo true:自动接收视频数据;false:需要调用 startRemoteView/stopRemoteView 进行请求或取消。默认值:true
*
* @note 需要在进房前设置才能生效。
*/
virtual void setDefaultStreamRecvMode(bool autoRecvAudio, bool autoRecvVideo) = 0;
#if _WIN32||__APPLE__
/**
* 1.7 创建子 TRTCCloud 实例
*
* 子 TRTCCloud 实例用于进入其他房间,观看其他房间主播的音视频流,还可以在不同的房间之间切换推送音视频流。
*
* 此接口主要应用于类似超级小班课这种需要进入多个房间推拉流的场景。
*
* <pre>
* ITRTCCloud *mainCloud = getTRTCShareInstance();
* // 1、mainCloud 进房并开始推送音视频流。
* // 2、创建子 TRTCCloud 实例并进入其他房间。
* ITRTCCloud *subCloud = mainCloud->createSubCloud();
* subCloud->enterRoom(params, scene);
*
* // 3、切换房间推送音视频流。
* // 3.1、mainCloud 停止推送音视频流。
* mainCloud->switchRole(TRTCRoleAudience);
* mainCloud->muteLocalVideo(true);
* mainCloud->muteLocalAudio(true);
* // 3.2、subCLoud 推送音视频流。
* subCloud->switchRole(TRTCRoleAnchor);
* subCloud->muteLocalVideo(false);
* subCloud->muteLocalAudio(false);
*
* // 4、subCLoud 退房。
* subCloud->exitRoom();
*
* // 5、销毁 subCLoud。
* mainCloud->destroySubCloud(subCloud);
* </pre>
*
* @return 子 TRTCCloud 实例
* @note
* - 此方法目前仅支持Windows、iOS、Mac平台
* - 同一个用户,可以使用同一个 userId 进入多个不同 roomId 的房间。
* - 两台手机不可以同时使用同一个 userId 进入同一个 roomId 的房间。
* - 通过 createSubCloud 接口创建出来的子房间 TRTCCloud 实例有一个能力限制:不能调用子实例中与本地音视频
* 相关的接口(除了 switchRole、muteLocalVideo 和 muteLocalAudio 之外), 设置美颜等接口请使用
* 原 TRTCCloud 实例对象。
* - 同一个用户,同时只能在一个 TRTCCloud 实例中推流,在不同房间同时推流会引发云端的状态混乱,导致各种 bug。
*/
virtual ITRTCCloud* createSubCloud() = 0;
/**
* 1.8 销毁子 TRTCCloud 实例
*
* @note 此方法目前仅支持Windows、iOS、Mac平台
*/
virtual void destroySubCloud(ITRTCCloud *cloud) = 0;
#endif
/**
* 1.9 切换房间
*
* 调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomConfig 中指定的新房间:
* 相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom
* 不会停止主播端视频的采集和预览。
* 接口调用结果会通过 ITRTCCloudCallback 中的 onSwitchRoom(errCode, errMsg) 回调通知给您。
*
* @param config 房间切换参数,请参考 {@link TRTCSwitchRoomConfig}
*/
virtual void switchRoom(const TRTCSwitchRoomConfig& config) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)CDN 相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name CDN 相关接口函数
/// @{
/**
* 2.1 开始向腾讯云的直播 CDN 推流
*
* 该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。
*
* 例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为:
* “http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名,
* 您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。
*
* <pre>
* ITRTCCloud *trtcCloud = getTRTCShareInstance();
* trtcCloud->enterRoom(params, TRTCAppSceneLIVE);
* trtcCloud->startLocalPreview(TXView);
* trtcCloud->startLocalAudio(TRTCAudioQuality);
* trtcCloud->startPublishing("user_stream_001", TRTCVideoStreamTypeBig);
* </pre>
*
* 您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。
*
* @param streamId 自定义流 ID。
* @param type 仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。
* @note 您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启“启用旁路推流”才能生效。
* - 若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。
* - 若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。
*/
virtual void startPublishing(const char* streamId, TRTCVideoStreamType type) = 0;
/**
* 2.2 停止向腾讯云的直播 CDN 推流
*/
virtual void stopPublishing() = 0;
/**
* 2.3 开始向友商云的直播 CDN 转推
*
* 该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。
* @param param CDN 转推参数,请参考 TRTCTypeDef.h 中关于 TRTCPublishCDNParam 的介绍。
* @note 使用 startPublishing() 绑定腾讯云直播 CDN 不收取额外的费用,但使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用。
*/
virtual void startPublishCDNStream(const TRTCPublishCDNParam& param) = 0;
/**
* 2.4 停止向非腾讯云地址转推
*/
virtual void stopPublishCDNStream() = 0;
/**
* 2.5 设置云端的混流转码参数
*
* 如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了“启动自动旁路直播”功能,
* 房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。
*
* 一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流,
* 所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。
*
* 当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路,
* 您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。
*
* <pre>
* 【画面1】=> 解码 ====> \
* \
* 【画面2】=> 解码 => 画面混合 => 编码 => 【混合后的画面】
* /
* 【画面3】=> 解码 ====> /
*
* 【声音1】=> 解码 ====> \
* \
* 【声音2】=> 解码 => 声音混合 => 编码 => 【混合后的声音】
* /
* 【声音3】=> 解码 ====> /
* </pre>
*
* 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。
*
* @param config 请参考 TRTCTypeDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 nullptr 则取消云端混流转码。
* @note 关于云端混流的注意事项:
* - 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。
* - 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上。
* - 请注意,若您还在房间中且不再需要混流,请务必传入 nullptr 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失。
* - 请放心,您退房时会自动取消混流状态。
*/
virtual void setMixTranscodingConfig(TRTCTranscodingConfig* config) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)视频相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 视频相关接口函数
/// @{
#if TARGET_PLATFORM_DESKTOP
/**
* 3.1 开启本地视频的预览画面(Windows、 Mac版本)
*
* 这个接口会启动默认的摄像头,可以通过 ITXDeviceManager::setCurrentDevice 接口选用其他摄像头
* 当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(nullptr) 回调。
*
* @param rendView 承载预览画面的控件
*/
virtual void startLocalPreview(TXView rendView) = 0;
#elif TARGET_PLATFORM_PHONE
/**
* 3.2 开启本地视频的预览画面 (iOS、 Android版本)
* 在 enterRoom 之前调用此函数,SDK 只会开启摄像头,并一直等到您调用 enterRoom 之后才开始推流。
* 在 enterRoom 之后调用此函数,SDK 会开启摄像头并自动开始视频推流。
* 当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onFirstVideoFrame(null) 回调。
*
* @note 如果希望开播前预览摄像头画面并调节美颜参数,您可以:
* - 方案一:在调用 enterRoom 之前调用 startLocalPreview
* - 方案二:在调用 enterRoom 之后调用 startLocalPreview + muteLocalVideo(true)
* @param frontCamera YES:前置摄像头;NO:后置摄像头。
* @param rendView 承载视频画面的控件
*/
virtual void startLocalPreview(bool frontCamera, TXView rendView) = 0;
#endif
/**
* 3.3 更新本地视频预览画面的窗口
*
* @param rendView 承载预览画面的控件
*/
virtual void updateLocalView(TXView rendView) = 0;
/**
* 3.4 停止本地视频采集及预览
*/
virtual void stopLocalPreview() = 0;
/**
* 3.5 暂停/恢复推送本地的视频数据
*
* 当暂停推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, false) 回调通知
* 当恢复推送本地视频后,房间里的其它成员将会收到 onUserVideoAvailable(userId, true) 回调通知
*
* @param mute true:暂停;false:恢复
*/
virtual void muteLocalVideo(bool mute) = 0;
/**
* 3.6 开始拉取并显示指定用户的远端画面
*
* 该函数会拉取指定 userid 的视频流显示在您指定的 view 控件上,您可以通过 setRemoteRenderParams 设置显示模式。
* - 如果您提前知道房间中某个 userid 正在推流,可以直接调用 startRemoteView 显示该用户的远端画面。
* - 如果您不知道房间中有哪些用户开启了视频,可以在 enterRoom 后等待来自 SDK 的 onUserVideoAvailable(userId, true) 回调通知。
* 调用 startRemoteView 只是启动拉取,此时画面还需要加载,当加载完毕后 ITRTCCloudCallback 会通过 onFirstVideoFrame(userId) 通知您。
*
* @param userId 指定远端用户的 userId
* @param streamType 指定要观看 userId 的视频流类型:
* - 高清大画面:({@link TRTCVideoStreamTypeBig})
* - 低清大画面:({@link TRTCVideoStreamTypeSmall})
* - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub})
* @param rendView 承载视频画面的控件
*
* @note 注意几点规则需要您关注:
* 1. SDK 支持同时观看某 userid 的大画面和辅路,或者小画面和辅路,但不支持同时观看大画面和小画面。
* 2. 只有当指定的 userid 通过 enableEncSmallVideoStream 开启双路编码后,才能观看该用户的小画面。
* 3. 如果该用户的小画面不存在,则默认切换到大画面。
*/
virtual void startRemoteView(const char* userId, TRTCVideoStreamType streamType, TXView rendView) = 0;
/**
* 3.7 更新远端视频渲染的窗口
*
* @param userId 对方的用户标识
* @param streamType 要设置预览窗口的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub)
* @param rendView 承载预览画面的控件
*/
virtual void updateRemoteView(const char* userId, TRTCVideoStreamType streamType, TXView rendView) = 0;
/**
* 3.8 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流
*
* 调用此接口后,SDK 会停止接收该用户的远程视频流,同时会清理相关的视频显示资源。
*
* @param userId 指定远端用户的 userId
* @param streamType 指定要停止观看的 userId 的视频流类型:
* - 高清大画面:({@link TRTCVideoStreamTypeBig})
* - 低清大画面:({@link TRTCVideoStreamTypeSmall})
* - 辅流(屏幕分享):({@link TRTCVideoStreamTypeSub})
*/
virtual void stopRemoteView(const char* userId, TRTCVideoStreamType streamType) = 0;
/**
* 3.9 停止显示所有远端视频画面,同时不再拉取远端用户的视频数据流
*
* @note 如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭。
*/
virtual void stopAllRemoteView() = 0;
/**
* 3.10 暂停/恢复接收指定的远端视频流
*
* 该接口仅暂停/恢复接收指定的远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。
*
* @param userId 对方的用户标识
* @param mute 是否暂停接收
* @note 您在 enterRoom 之前或之后调用此 API 均能生效,在您调用 exitRoom 之后会被重置为 false。
*/
virtual void muteRemoteVideoStream(const char* userId, bool mute) = 0;
/**
* 3.11 暂停/恢复接收所有远端视频流
*
* 该接口仅暂停/恢复接收所有远端用户的视频流,但并不释放显示资源,所以如果暂停,视频画面会冻屏在 mute 前的最后一帧。
*
* @param mute 是否暂停接收
* @note 您在 enterRoom 之前或之后调用此 API 均能生效,在您调用 exitRoom 之后会被重置为 false。
*/
virtual void muteAllRemoteVideoStreams(bool mute) = 0;
/**
* 3.12 设置视频编码器相关参数
*
* 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)
*
* @param params 视频编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义
*/
virtual void setVideoEncoderParam(const TRTCVideoEncParam& params) = 0;
/**
* 3.13 设置网络流控相关参数
*
* 该设置决定了 SDK 在各种网络环境下的调控策略(例如弱网下是“保清晰”还是“保流畅”)
*
* @param params 网络流控参数,详情请参考 TRTCTypeDef.h 中的 TRTCNetworkQosParam 定义
*/
virtual void setNetworkQosParam(const TRTCNetworkQosParam& params) = 0;
/**
* 3.14 设置本地图像(主流)的渲染参数
*
* @param params 本地图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义
*/
virtual void setLocalRenderParams(const TRTCRenderParams &params) = 0;
/**
* 3.15 设置视频编码输出的画面方向,即设置远端用户观看到的和服务器录制的画面方向
*
* @param rotation 目前支持 TRTCVideoRotation0 和 TRTCVideoRotation180 旋转角度,默认值:TRTCVideoRotation0
*/
virtual void setVideoEncoderRotation(TRTCVideoRotation rotation) = 0;
/**
* 3.16 设置编码器输出的画面镜像模式
*
* 该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制的)画面效果。
*
* @param mirror 是否开启远端镜像, true:远端画面镜像;false:远端画面非镜像。默认值:false
*/
virtual void setVideoEncoderMirror(bool mirror) = 0;
/**
* 3.17 设置远端图像的渲染模式
*
* @param userId 对应的远端视频流用户ID
* @param streamType 远端图像的视频流类型,详见 TRTCVideoStreamType 定义
* @param param 远端图像的参数,详情请参考 TRTCTypeDef.h 中的 TRTCRenderParams 定义
*/
virtual void setRemoteRenderParams(const char* userId, TRTCVideoStreamType streamType, const TRTCRenderParams &params) = 0;
/**
* 3.18 开启大小画面双路编码模式
*
* 如果当前用户是房间中的主要角色(例如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。
* 开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。
* 对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。
*
* 对于同一房间的远程观众而言:
* - 如果用户的下行网络很好,可以选择观看【高清】画面
* - 如果用户的下行网络较差,可以选择观看【低清】画面
*
* @param enable 是否开启小画面编码,默认值:false
* @param smallVideoParam 小流的视频参数
*/
virtual void enableSmallVideoStream(bool enable, const TRTCVideoEncParam& smallVideoParam) = 0;
/**
* 3.19 选定观看指定 userId 的大画面还是小画面
*
* 此功能需要该 userId 通过 enableEncSmallVideoStream 提前开启双路编码模式。
* 如果该 userId 没有开启双路编码模式,则此操作无效。
*
* @param userId 用户 ID
* @param type 视频流类型,即选择看大画面还是小画面,默认为 TRTCVideoStreamTypeBig
*/
virtual void setRemoteVideoStreamType(const char* userId, TRTCVideoStreamType type) = 0;
#if _WIN32 || __APPLE__
/**
* 3.20 视频画面截图
*
* 截取本地主路、本地辅路、远程主路和远端辅流的视频画面,并通过 ITRTCCloudCallback 的 onSnapshotComplete 回调返回截图画面的数据给您。
*
* @param userId 用户 ID,空字符串表示截取本地画面
* @param streamType 视频流类型,支持摄像头画面({@link TRTCVideoStreamTypeBig})和屏幕分享画面({@link TRTCVideoStreamTypeSub})
* @param sourceType 视频截图来源类型,Windows 端只支持 {@link TRTCSnapshotSourceTypeStream}
*/
virtual void snapshotVideo(const char* userId, TRTCVideoStreamType streamType, TRTCSnapshotSourceType sourceType) = 0;
#endif
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (四)音频相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 音频相关接口函数
/// @{
/**
* 4.1 开启本地音频的采集和上行
*
* 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。
* SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。
* @param quality 声音质量,参见 TRTCAudioQuality
* @note TRTC SDK 并不会默认打开本地的麦克风采集。
*/
virtual void startLocalAudio(TRTCAudioQuality quality) = 0;
/**
* 4.2 关闭本地音频的采集和上行
*
* 当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。
*/
virtual void stopLocalAudio() = 0;
/**
* 4.3 静音/取消静音本地的音频
*
* 当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, false) 回调通知。
* 当取消静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(userId, true) 回调通知。
*
* 与 stopLocalAudio 不同之处在于,muteLocalAudio(true) 并不会停止发送音视频数据,而是继续发送码率极低的静音包。
* 由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopLocalAudio 会导致录制出的 MP4 不易播放。
* 因此在对录制质量要求很高的场景中,建议选择 muteLocalAudio,从而录制出兼容性更好的 MP4 文件。
*
* @param mute true:静音;false:取消静音
*/
virtual void muteLocalAudio(bool mute) = 0;
/**
* 4.4 静音/取消静音指定的远端用户的声音
*
* @param userId 用户 ID
* @param mute true:静音;false:取消静音
*
* @note
* - 静音时会停止接收该用户的远端音频流并停止播放,取消静音时会自动拉取该用户的远端音频流并进行播放。
* - 您在 enterRoom 之前或之后调用此 API 均能生效,在您调用 exitRoom 之后会被重置为 false。
*/
virtual void muteRemoteAudio(const char* userId, bool mute) = 0;
/**
* 4.5 静音/取消静音所有用户的声音
*
* @param mute true:静音;false:取消静音
*
* @note
* - 静音时会停止接收所有用户的远端音频流并停止播放,取消静音时会自动拉取所有用户的远端音频流并进行播放。
* - 您在 enterRoom 之前或之后调用此 API 均能生效,在您调用 exitRoom 之后会被重置为 false。
*/
virtual void muteAllRemoteAudio(bool mute) = 0;
/**
* 4.6 设置某个远程用户的播放音量
*
* @param userId 远程用户 ID
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setRemoteAudioVolume(const char *userId, int volume) = 0;
/**
* 4.7 设置 SDK 采集音量。
*
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setAudioCaptureVolume(int volume) = 0;
/**
* 4.8 获取 SDK 采集音量
*/
virtual int getAudioCaptureVolume() = 0;
/**
* 4.9 设置 SDK 播放音量。
*
* @param volume 音量大小,100为原始音量,范围是:[0 ~ 150],默认值为100
*
* @note
* 1. 该函数会控制最终交给系统播放的声音音量,会影响录制本地音频文件的音量大小,但不会影响耳返的音量。<br>
* 2. 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setAudioPlayoutVolume(int volume) = 0;
/**
* 4.10 获取 SDK 播放音量
*/
virtual int getAudioPlayoutVolume() = 0;
/**
* 4.11 启用或关闭音量大小提示
*
* 开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。
* 我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。
* 如希望打开此功能,请在 startLocalAudio() 之前调用。
*
* @param interval 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms
*/
virtual void enableAudioVolumeEvaluation(uint32_t interval) = 0;
/**
* 4.12 开始录音
*
* 该方法调用后, SDK 会将通话过程中的所有音频(包括本地音频,远端音频,BGM等)录制到一个文件里。
* 无论是否进房,调用该接口都生效。
* 如果调用 exitRoom 时还在录音,录音会自动停止。
*
* @param audioRecordingParams 录音参数,请参考 TRTCAudioRecordingParams
* @return 0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持
*/
virtual int startAudioRecording(const TRTCAudioRecordingParams& audioRecordingParams) = 0;
/**
* 4.13 停止录音
*
* 如果调用 exitRoom 时还在录音,录音会自动停止。
*/
virtual void stopAudioRecording() = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (五)设备相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 设备相关接口函数
/// @{
/**
* 5.1 获取设备管理模块
*
* @return ITXDeviceManager 设备管理类
*/
virtual ITXDeviceManager *getDeviceManager() = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (六)美颜特效和图像水印
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 美颜特效和图像水印
/// @{
/**
* 6.1 设置美颜、美白、红润效果级别
*
* SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。
* 另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
*
* @param style 美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。
* @param beautyLevel 美颜级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显
* @param whitenessLevel 美白级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显
* @param ruddinessLevel 红润级别,取值范围0 - 9,0表示关闭,1 - 9值越大,效果越明显,该参数暂未生效
*/
virtual void setBeautyStyle(TRTCBeautyStyle style, uint32_t beautyLevel, uint32_t whitenessLevel, uint32_t ruddinessLevel) = 0;
/**
* 6.2 设置水印
*
* 水印的位置是通过 xOffset, yOffset, fWidthRatio 来指定的。
* - xOffset:水印的坐标,取值范围为0 - 1的浮点数。
* - yOffset:水印的坐标,取值范围为0 - 1的浮点数。
* - fWidthRatio:水印的大小比例,取值范围为0 - 1的浮点数。
*
* @param streamType 要设置水印的流类型(TRTCVideoStreamTypeBig、TRTCVideoStreamTypeSub)
* @param srcData 水印图片源数据(传 nullptr 表示去掉水印)
* @param srcType 水印图片源数据类型
* @param nWidth 水印图片像素宽度(源数据为文件路径时忽略该参数)
* @param nHeight 水印图片像素高度(源数据为文件路径时忽略该参数)
* @param xOffset 水印显示的左上角 x 轴偏移
* @param yOffset 水印显示的左上角 y 轴偏移
* @param fWidthRatio 水印显示的宽度占画面宽度比例(水印按该参数等比例缩放显示)
* @note 只支持主路视频流
*/
virtual void setWaterMark(TRTCVideoStreamType streamType, const char* srcData, TRTCWaterMarkSrcType srcType, uint32_t nWidth, uint32_t nHeight, float xOffset, float yOffset, float fWidthRatio) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (七)音乐特效和人声特效
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 音乐特效和人声特效
/// @{
/**
* 7.1 获取音效管理类 ITXAudioEffectManager
*
* 该模块是整个 SDK 的音效管理模块,支持如下功能:
* - 耳机耳返:麦克风捕捉的声音实时通过耳机播放。
* - 混响效果:KTV、小房间、大会堂、低沉、洪亮...
* - 变声特效:萝莉、大叔、重金属、外国人...
* - 背景音乐:支持在线音乐和本地音乐,支持变速、变调等特效、支持原生和伴奏并播放和循环播放。
* - 短音效:鼓掌声、欢笑声等简短的音效文件,对于小于10秒的文件,请将 isShortFile 参数设置为 YES。
*/
virtual ITXAudioEffectManager* getAudioEffectManager() = 0;
#ifdef _WIN32
/**
* 7.2 打开系统声音采集
*
* 开启后可以采集整个操作系统的播放声音(path 为空)或某一个播放器(path 不为空)的声音,
* 并将其混入到当前麦克风采集的声音中一起发送到云端。
*
*
* @param path
* - path 为空,代表采集整个操作系统的声音。
* - path 填写 exe 程序(如 QQ音乐)所在的路径,将会启动此程序并只采集此程序的声音。
*
* @note 此接口目前仅适用于Windows平台
*/
virtual void startSystemAudioLoopback(const char* path = nullptr) = 0;
/**
* 7.3 关闭系统声音采集。
*
* 目前仅适用于Windows平台
*
*/
virtual void stopSystemAudioLoopback() = 0;
/**
* 7.4 设置系统声音采集的音量。
*
* @param volume 音量大小,100为原始音量,取值0 - 150,默认值为100
*
* @note
* 1. 此接口目前仅适用于Windows平台。<br>
* 2. 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setSystemAudioLoopbackVolume(uint32_t volume) = 0;
#endif
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (八)屏幕分享相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 屏幕分享相关接口函数
/// @{
#if TARGET_PLATFORM_DESKTOP
/**
* 8.1 启动屏幕分享
*
* @param rendView 承载预览画面的控件,可以设置为 nullptr,表示不显示屏幕分享的预览效果。
* @param type 屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),默认使用辅路。
* @param params 屏幕分享的画面编码参数,可以设置为 nullptr,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。
*
* @note 一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面,
* 默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。
*/
virtual void startScreenCapture(TXView rendView, TRTCVideoStreamType type, TRTCVideoEncParam* params) = 0;
/**
* 8.2 停止屏幕采集
*/
virtual void stopScreenCapture() = 0;
/**
* 8.3 暂停屏幕分享
*/
virtual void pauseScreenCapture() = 0;
/**
* 8.4 恢复屏幕分享
*/
virtual void resumeScreenCapture() = 0;
/**
* 8.5 枚举可分享的屏幕窗口,建议在 startScreenCapture 之前调用
*
* 如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。
* 通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。
* 拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。
*
* @note
* - 返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。
* - 获取完屏幕窗口列表后请手动调用 ITRTCScreenCaptureSourceList 的 release 方法释放资源,否则可能会引起内存泄漏。
* - 如果 delete ITRTCScreenCaptureSourceList*指针会编译错误,SDK 维护 ITRTCScreenCaptureSourceList 对象的生命周期。
*
* @param thumbSize 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上
* @param iconSize 指定要获取的窗口图标大小
*
* @return 窗口列表包括屏幕
*/
virtual ITRTCScreenCaptureSourceList* getScreenCaptureSources(const SIZE &thumbSize, const SIZE &iconSize) = 0;
/**
* 8.6 设置屏幕分享参数,该方法在屏幕分享过程中也可以调用
*
* 如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。
*
* 支持如下四种情况:
* - 共享整个屏幕:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为 { 0, 0, 0, 0 }
* - 共享指定区域:sourceInfoList 中 type 为 Screen 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 }
* - 共享整个窗口:sourceInfoList 中 type 为 Window 的 source,captureRect 设为 { 0, 0, 0, 0 }
* - 共享窗口区域:sourceInfoList 中 type 为 Window 的 source,captureRect 设为非 nullptr,例如 { 100, 100, 300, 300 }
*
*
* @param source 指定分享源
* @param captureRect 指定捕获的区域
* @param property 指定屏幕分享目标的属性,包括捕获鼠标,高亮捕获窗口等,详情参考TRTCScreenCaptureProperty 定义
* @note 设置高亮边框颜色、宽度参数在Mac平台不生效
*
*/
virtual void selectScreenCaptureTarget(const TRTCScreenCaptureSourceInfo &source, const RECT& captureRect, const TRTCScreenCaptureProperty &property) = 0;
/**
* 8.7 设置屏幕分享的编码器参数
* - setVideoEncoderParam() 用于设置远端主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的编码参数。
* - setSubStreamEncoderParam() 用于设置远端辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的编码参数。
* 该设置决定远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。
*
* @param params 辅流编码参数,详情请参考 TRTCTypeDef.h 中的 TRTCVideoEncParam 定义
* @note 即使使用主路传输屏幕分享的数据(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用此接口更新屏幕分享的编码参数。
*/
virtual void setSubStreamEncoderParam(const TRTCVideoEncParam& params) = 0;
/**
*8.8 设置屏幕分享的混音音量大小
*
* 这个数值越高,屏幕分享音量的占比就越高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。
*
* @param volume 设置的混音音量大小,范围0 - 100
*/
virtual void setSubStreamMixVolume(uint32_t volume) = 0;
/**
* 8.9 将指定窗口加入屏幕分享的排除列表中,加入排除列表中的窗口不会被分享出去
*
* 支持启动屏幕分享前设置过滤窗口,也支持屏幕分享过程中动态添加过滤窗口。
*
* @param window 不希望分享出去的窗口
* @note
* - 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeScreen 时生效,即分享屏幕时生效
* - 该方法添加的窗口列表会在退房后清除
*/
virtual void addExcludedShareWindow(TXView window) = 0;
/**
* 8.10 将指定窗口从屏幕分享的排除列表中移除
*
* @param window 不希望分享出去的窗口
*
* @note 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeScreen 时生效,即分享屏幕时生效
*/
virtual void removeExcludedShareWindow(TXView window) = 0;
/**
* 8.11 将所有窗口从屏幕分享的排除列表中移除
*
* @note 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeScreen 时生效,即分享屏幕时生效
*/
virtual void removeAllExcludedShareWindow() = 0;
#endif
#ifdef _WIN32
/**
* 8.12 将指定窗口加入屏幕分享的包含列表中,加入包含列表中的窗口如果在采集窗口区域内会被分享出去
*
* 支持启动屏幕分享前设置包含的窗口,也支持屏幕分享过程中动态添加包含的窗口。
*
* @param window 希望被分享出去的窗口
* @note
* - 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeWindow 时生效,即分享窗口时生效
* - 该方法添加的窗口列表会在退房后清除
*/
virtual void addIncludedShareWindow(TXView window) = 0;
/**
* 8.13 将指定窗口从屏幕分享的包含列表中移除
*
* @param window 希望被分享出去的窗口
* @note 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeWindow 时生效,即分享窗口时生效
*/
virtual void removeIncludedShareWindow(TXView window) = 0;
/**
* 8.14 将所有窗口从屏幕分享的包含列表中移除
*
* @note 该方法只有在 TRTCScreenCaptureSourceInfo 中的 type 指定为 TRTCScreenCaptureSourceTypeWindow 时生效,即分享窗口时生效
*/
virtual void removeAllIncludedShareWindow() = 0;
#endif
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (九)自定义采集和渲染
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 自定义采集和渲染
/// @{
/**
* 9.1 启用视频自定义采集模式
*
* 开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。
* 您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。
*
* @param enable 是否启用,默认值:false
*/
virtual void enableCustomVideoCapture(bool enable) = 0;
/**
* 9.2 向 SDK 投送自己采集的视频数据
*
* TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写):
* - pixelFormat: Windows、Android平台仅支持 TRTCVideoPixelFormat_I420,iOS、Mac平台支持TRTCVideoPixelFormat_I420和TRTCVideoPixelFormat_BGRA32
* - bufferType:仅支持 TRTCVideoBufferType_Buffer。
* - data:视频帧 buffer。
* - length:视频帧数据长度,I420 格式下,其值等于:width × height × 3 / 2。
* - width:视频图像长度。
* - height:视频图像宽度。
* - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。
*
* 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。
*
* @param frame 视频数据,支持 I420 格式数据。
* @note - SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。
* - 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。
* - iOS、Mac平台目前仅支持传入TRTCVideoPixelFormat_I420或TRTCVideoPixelFormat_BGRA32格式的视频帧
* - Windows、Android平台目前仅支持传入TRTCVideoPixelFormat_I420格式的视频帧
*/
virtual void sendCustomVideoData(TRTCVideoFrame* frame) = 0;
/**
* 9.3 启用音频自定义采集模式
* 开启该模式后,SDK 停止运行原有的音频采集流程,只保留编码和发送能力。
* 您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。
*
* @param enable 是否启用,默认值:false
*/
virtual void enableCustomAudioCapture(bool enable) = 0;
/**
* 9.4 向 SDK 投送自己采集的音频数据
*
* TRTCAudioFrame 推荐如下填写方式:
*
* - audioFormat:音频数据格式,仅支持 TRTCAudioFrameFormatPCM。
* - data:音频帧 buffer。
* - length:音频帧数据长度,支持[5ms ~ 100ms]帧长,推荐使用20 ms帧长,【48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
* - sampleRate:采样率,支持:16000、24000、32000、44100、48000。
* - channel:声道数(如果是立体声,数据是交叉的),单声道:1; 双声道:2。
* - timestamp:时间戳,单位毫秒(ms),可以设置 timestamp 为0,相当于让 SDK 自己设置时间戳。
*
* 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。
*
* @param frame 音频数据
* @note 需精准的按每帧时长的间隔调用 sendCustomAudioData,否则会容易触发声音卡顿。
*/
virtual void sendCustomAudioData(TRTCAudioFrame* frame) = 0;
/**
* 9.5 设置本地视频自定义渲染
*
* @note -设置此方法,SDK 内部会把采集到的数据回调出来,SDK 跳过 TXView 渲染逻辑
* -调用 setLocalVideoRenderCallback(TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调。
* - iOS、Mac、Windows平台目前仅支持回调TRTCVideoPixelFormat_I420或TRTCVideoPixelFormat_BGRA32像素格式的视频帧
* - Android平台目前仅支持传入TRTCVideoPixelFormat_I420像素格式的视频帧
* @param pixelFormat 指定回调的像素格式
* @param bufferType 指定视频数据结构类型,目前只支持TRTCVideoBufferType_Buffer
* @param callback 自定义渲染回调
* @return 0:成功;<0:错误
*/
virtual int setLocalVideoRenderCallback(TRTCVideoPixelFormat pixelFormat, TRTCVideoBufferType bufferType, ITRTCVideoRenderCallback* callback) = 0;
/**
* 9.6 设置远端视频自定义渲染
*
* 此方法同 setLocalVideoRenderDelegate,区别在于一个是本地画面的渲染回调, 一个是远程画面的渲染回调。
*
* @note -设置此方法,SDK 内部会把远端的数据解码后回调出来,SDK 跳过 TXView 渲染逻辑
* -调用 setRemoteVideoRenderCallback(userId, TRTCVideoPixelFormat_Unknown, TRTCVideoBufferType_Unknown, nullptr) 停止回调。
* - iOS、Mac、Windows平台目前仅支持回调TRTCVideoPixelFormat_I420或TRTCVideoPixelFormat_BGRA32像素格式的视频帧
* - Android平台目前仅支持传入TRTCVideoPixelFormat_I420像素格式的视频帧
* @param userId 用户标识
* @param pixelFormat 指定回调的像素格式
* @param bufferType 指定视频数据结构类型,目前只支持TRTCVideoBufferType_Buffer
* @param callback 自定义渲染回调
* @return 0:成功;<0:错误
*/
virtual int setRemoteVideoRenderCallback(const char* userId, TRTCVideoPixelFormat pixelFormat, TRTCVideoBufferType bufferType, ITRTCVideoRenderCallback* callback) = 0;
/**
* 9.7 设置音频数据回调
*
* 设置此方法,SDK 内部会把声音模块的数据(PCM 格式)回调出来,包括:
* - onCapturedAudioFrame:本机麦克风采集到的音频数据
* - onPlayAudioFrame:混音前的每一路远程用户的音频数据
* - onMixedPlayAudioFrame:各路音频数据混合后送入扬声器播放的音频数据
*
* @param callback 声音帧数据(PCM 格式)的回调,callback = nullptr 则停止回调数据
* @return 0:成功;<0:错误
*/
virtual int setAudioFrameCallback(ITRTCAudioFrameCallback* callback) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十)自定义消息发送
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 自定义消息发送
/// @{
/**
* 10.1 发送自定义消息给房间内所有用户
*
* 该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道,
* 请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。
*
* @param cmdId 消息 ID,取值范围为1 - 10
* @param data 待发送的消息,最大支持1KB(1000字节)的数据大小
* @param dataSize 待发送的数据大小
* @param reliable 是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传
* @param ordered 是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息
* @return true:消息已经发出;false:消息发送失败
*
* @note 本接口有以下限制:
* - 发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息。
* - 每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。
* - 每个客户端每秒最多能发送总计8KB数据。
* - 将 reliable 和 ordered 同时设置为 true 或 false,暂不支持交叉设置。
* - 强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。
*/
virtual bool sendCustomCmdMsg(uint32_t cmdId, const uint8_t* data, uint32_t dataSize, bool reliable, bool ordered) = 0;
/**
* 10.2 将小数据量的自定义数据嵌入视频帧中
*
* 跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上,
* 这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。
*
* 最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。
*
* @param data 待发送的数据,最大支持1kb(1000字节)的数据大小
* @param dataSize 待发送的数据大小
* @param repeatCount 发送数据次数
* @return true:消息已通过限制,等待后续视频帧发送;false:消息被限制发送
*
* @note 本接口有以下限制:
* - 数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。
* - 发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。
* - 每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。
* - 每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。
* - 若指定多次发送(repeatCount>1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。
* - 如果 repeatCount>1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。
*/
virtual bool sendSEIMsg(const uint8_t* data, uint32_t dataSize, int32_t repeatCount) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十一)设备和网络测试
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 设备和网络测试
/// @{
/**
* 11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量)
*
* 测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。
* 同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。
*
* @note 测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。
*
* @param sdkAppId 应用标识
* @param userId 用户标识
* @param userSig 用户签名
*/
virtual void startSpeedTest(uint32_t sdkAppId, const char* userId, const char* userSig) = 0;
/**
* 11.2 停止网络测速
*/
virtual void stopSpeedTest() = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十二)LOG 相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name LOG 相关接口函数
/// @{
/**
* 12.1 获取 SDK 版本信息
*
* @return UTF-8 编码的版本号。
*/
virtual const char* getSDKVersion() = 0;
/**
* 12.2 设置 Log 输出级别
*
* @param level 参见 TRTCLogLevel,默认值:TRTCLogLevelNone
*/
virtual void setLogLevel(TRTCLogLevel level) = 0;
/**
* 12.3 启用或禁用控制台日志打印
*
* @param enabled 指定是否启用,默认为禁止状态
*/
virtual void setConsoleEnabled(bool enabled) = 0;
/**
* 12.4 启用或禁用 Log 的本地压缩
*
* 开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。
* 禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。
*
* @param enabled 指定是否启用,默认为禁止状态
*/
virtual void setLogCompressEnabled(bool enabled) = 0;
/**
* 12.5 设置日志保存路径
*
* @note 日志文件默认保存在 C:/Users/[系统用户名]/AppData/Roaming/Tencent/liteav/log,即 %appdata%/Tencent/liteav/log 下,如需修改,必须在所有方法前调用。
* @param path 存储日志的文件夹,例如 "D:\\Log",UTF-8 编码
*/
virtual void setLogDirPath(const char* path) = 0;
/**
* 12.6 设置日志回调
*
* @param callback 日志回调
*/
virtual void setLogCallback(ITRTCLogCallback* callback) = 0;
/**
* 12.7 显示仪表盘
*
* 仪表盘是状态统计和事件消息浮层 view,方便调试。
*
* @param showType 0:不显示;1:显示精简版;2:显示全量版,默认为不显示
*/
virtual void showDebugView(int showType) = 0;
/**
* 12.8 调用实验性 API 接口
*
* @note 该接口用于调用一些实验性功能
* @param jsonStr 接口及参数描述的 JSON 字符串
*/
virtual void callExperimentalAPI(const char *jsonStr) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十三)Windows 专有废弃方法
//
/////////////////////////////////////////////////////////////////////////////////
/// @name Windows 专有废弃方法
/// @{
#ifdef _WIN32
using IDeprecatedTRTCCloud::startLocalAudio;
using IDeprecatedTRTCCloud::startRemoteView;
using IDeprecatedTRTCCloud::startScreenCapture;
using IDeprecatedTRTCCloud::stopRemoteView;
using IDeprecatedTRTCCloud::selectScreenCaptureTarget;
#endif // _WIN32
/// @}
};
/// @}
}
#endif /* __ITRTCCLOUD_H__ */
... ...
#ifndef __ITXAUDIOEFFECTMANAGER_H__
#define __ITXAUDIOEFFECTMANAGER_H__
namespace trtc {
/// @defgroup ITXAudioEffectManager_cplusplus ITXAudioEffectManager
/// 腾讯云视频通话功能音乐和人声设置接口
/// @{
enum TXVoiceReverbType
{
TXLiveVoiceReverbType_0 = 0, ///< 关闭混响
TXLiveVoiceReverbType_1 = 1, ///< KTV
TXLiveVoiceReverbType_2 = 2, ///< 小房间
TXLiveVoiceReverbType_3 = 3, ///< 大会堂
TXLiveVoiceReverbType_4 = 4, ///< 低沉
TXLiveVoiceReverbType_5 = 5, ///< 洪亮
TXLiveVoiceReverbType_6 = 6, ///< 金属声
TXLiveVoiceReverbType_7 = 7, ///< 磁性
};
class ITXMusicPlayObserver {
public:
virtual ~ITXMusicPlayObserver() {}
/// 背景音乐开始播放
virtual void onStart(int id,int errCode) = 0;
/// 背景音乐的播放进度
virtual void onPlayProgress(int id,long curPtsMS,long durationMS) = 0;
/// 背景音乐已播放完毕
virtual void onComplete(int id,int errCode) = 0;
};
class AudioMusicParam {
public:
/// 【字段含义】音乐 ID
/// 【特殊说明】SDK 允许播放多路音乐,因此需要音乐 ID 进行标记,用于控制音乐的开始、停止、音量等
int id;
/// 【字段含义】音乐文件的绝对路径
char* path;
/// 【字段含义】音乐循环播放的次数
/// 【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推
int loopCount;
/// 【字段含义】是否将音乐传到远端
/// 【推荐取值】YES:音乐在本地播放的同时,会上行至云端,因此远端用户也能听到该音乐;NO:音乐不会上行至云端,因此只能在本地听到该音乐。默认值:NO
bool publish;
/// 【字段含义】播放的是否为短音乐文件
/// 【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO
bool isShortFile;
/// 【字段含义】音乐开始播放时间点,单位毫秒
long startTimeMS;
/// 【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。
long endTimeMS;
AudioMusicParam(int id_, char* path_) {
path = path_;
id = id_;
loopCount = 0;
publish = false;
isShortFile = false;
startTimeMS = 0;
endTimeMS = 0;
}
};
class ITXAudioEffectManager
{
protected:
ITXAudioEffectManager() {}
virtual ~ITXAudioEffectManager() {}
public:
/////////////////////////////////////////////////////////////////////////////////
//
// (一)人声相关特效函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 人声相关特效函数
/// @{
/**
* 1.1 设置人声的混响效果(KTV、小房间、大会堂、低沉、洪亮...)
*
* @note 设置的效果在退房后会失效,如果下次进房还需要对应特效,需要调用此接口再次设置。
*/
virtual void setVoiceReverbType(TXVoiceReverbType type) = 0;
/**
* 1.2 设置麦克风采集人声的音量
*
* @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setVoiceCaptureVolume(int volume) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)背景音乐特效函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 背景音乐特效函数
/// @{
/**
* 2.1 设置背景音乐的播放进度回调接口
*
* @param musicId 音乐 ID
* @param observer 具体参考 ITXMusicPlayObserver 中定义接口
*/
virtual void setMusicObserver(int musicId, ITXMusicPlayObserver* observer) = 0;
/**
* 2.2 开始播放背景音乐
*
* 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。
*
* @note 若您想同时播放多个音乐,请分配不同的 ID 进行播放。
* 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。
* @param musicParam 音乐参数
*/
virtual void startPlayMusic(AudioMusicParam musicParam) = 0;
/**
* 2.3 停止播放背景音乐
*
* @param id 音乐 ID
*/
virtual void stopPlayMusic(int id) = 0;
/**
* 2.4 暂停播放背景音乐
*
* @param id 音乐 ID
*/
virtual void pausePlayMusic(int id) = 0;
/**
* 2.5 恢复播放背景音乐
*
* @param id 音乐 ID
*/
virtual void resumePlayMusic(int id) = 0;
/**
* 2.6 设置背景音乐的远端音量大小,即主播可以通过此接口设置远端观众能听到的背景音乐的音量大小。
*
* @param id 音乐 ID
* @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setMusicPublishVolume(int id, int volume) = 0;
/**
* 2.7 设置背景音乐的本地音量大小,即主播可以通过此接口设置主播自己本地的背景音乐的音量大小。
*
* @param id 音乐 ID
* @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setMusicPlayoutVolume(int id, int volume) = 0;
/**
* 2.8 设置全局背景音乐的本地和远端音量的大小
*
* @param volume 音量大小,100为原始音量,取值范围为0 - 150;默认值:100
*
* @note 如果要将 volume 设置为大于100的数值,需要进行特殊配置,请联系技术支持。
*/
virtual void setAllMusicVolume(int volume) = 0;
/**
* 2.9 调整背景音乐的音调高低
*
* @param id 音乐 ID
* @param pitch 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数;
*/
virtual void setMusicPitch(int id, float pitch) = 0;
/**
* 2.10 调整背景音乐的变速效果
*
* @param id 音乐 ID
* @param speedRate 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数;
*/
virtual void setMusicSpeedRate(int id, float speedRate) = 0;
/**
* 2.11 获取背景音乐当前的播放进度(单位:毫秒)
*
* @param id 音乐 ID
* @return 成功返回当前播放时间,单位:毫秒,失败返回-1
*/
virtual long getMusicCurrentPosInMS(int id) = 0;
/**
* 2.12 设置背景音乐的播放进度(单位:毫秒)
*
* @note 请尽量避免频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。
* 当配合进度条使用时,请在进度条拖动完毕的回调中调用,而避免在拖动过程中实时调用。
*
* @param id 音乐 ID
* @param pts 单位: 毫秒
*/
virtual void seekMusicToPosInTime(int id, int pts) = 0;
/**
* 2.13 获取景音乐文件的总时长(单位:毫秒)
*
* @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。
* @return 成功返回时长,失败返回-1
*/
virtual long getMusicDurationInMS(char* path) = 0;
};
/// @}
}
#ifdef _WIN32
using namespace trtc;
#endif
#endif /* __ITXAUDIOEFFECTMANAGER_H__ */
... ...
#ifndef __ITXDEVICEMANAGER_H__
#define __ITXDEVICEMANAGER_H__
#include <stdint.h>
#ifdef __APPLE__
#include <TargetConditionals.h>
#endif
namespace trtc {
class ITRTCVideoRenderCallback;
/// @defgroup ITXDeviceManager_cplusplus ITXDeviceManager
/// 腾讯云视频通话功能的设备管理接口类
/// @{
/**
* 系统音量类型(仅适用于移动端设备)
*
* 智能手机一般具备两种系统音量类型,即通话音量类型和媒体音量类型。
* - 通话音量:手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差,
* 无法通过音量按键将音量调成零,但是支持蓝牙耳机上的麦克风。
*
* - 媒体音量:手机专门为音乐场景设计的音量类型,音质相比于通话音量类型要好,通过通过音量按键可以将音量调成零。
* 使用媒体音量类型时,如果要开启回声抵消(AEC)功能,SDK 会开启内置的声学处理算法对声音进行二次处理。
* 在媒体音量模式下,蓝牙耳机无法使用自带的麦克风采集声音,只能使用手机上的麦克风进行声音采集。
*
* SDK 目前提供了三种系统音量类型的控制模式,分别为:
* - Auto:“麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。
* 如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动选择该模式。
*
* - VOIP:全程使用通话音量,适合多人会议场景。
* 如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall,SDK 会自动选择该模式。
*
* - Media:通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。
*
*/
enum TXSystemVolumeType
{
/// “麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。<br>
/// 如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动选择该模式。
TXSystemVolumeTypeAuto = 0,
/// 通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。
TXSystemVolumeTypeMedia = 1,
/// 全程使用通话音量,适合多人会议场景。<br>
/// 如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall 会自动选择该模式。
TXSystemVolumeTypeVOIP = 2,
};
/**
* 声音播放路由(仅适用于移动端设备)
*
* 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来:
* - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。
* - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。
*/
enum TXAudioRoute {
TXAudioRouteSpeakerphone = 0, ///< 扬声器
TXAudioRouteEarpiece = 1, ///< 听筒
};
/**
* 设备类型
*/
enum TXMediaDeviceType
{
TXMediaDeviceTypeUnknown = -1, ///< 未知类型
TXMediaDeviceTypeMic = 0, ///< 麦克风
TXMediaDeviceTypeSpeaker = 1, ///< 扬声器或听筒
TXMediaDeviceTypeCamera = 2, ///< 摄像头
};
/**
* 设备列表
*/
class ITXDeviceCollection {
protected:
virtual ~ITXDeviceCollection() {
}
public:
/**
* @return 设备个数
*/
virtual uint32_t getCount() = 0;
/**
* @return 设备名称,字符编码格式是UTF-8
*/
virtual const char* getDeviceName(uint32_t index) = 0;
/**
* @return 设备PID,字符编码格式是UTF-8
*/
virtual const char* getDevicePID(uint32_t index) = 0;
/**
* @brief 遍历完设备后,调用release释放资源。
*/
virtual void release() = 0;
};
/**
* 设备 Item 信息
*/
class ITXDeviceInfo {
protected:
virtual ~ITXDeviceInfo() {
}
public:
/**
* @return 设备名称,字符编码格式是UTF-8
*/
virtual const char* getDeviceName() = 0;
/**
* @return 设备PID,字符编码格式是UTF-8
*/
virtual const char* getDevicePID() = 0;
/**
* @brief 获取完设备信息后,调用release释放资源。
*/
virtual void release() = 0;
};
class ITXDeviceManager {
protected:
ITXDeviceManager() {}
virtual ~ITXDeviceManager() {}
public:
#if (__APPLE__ && TARGET_OS_MAC && !TARGET_OS_IPHONE) || _WIN32
/**
* 获取设备列表
*
* @param type 设备类型,指定需要获取哪种设备的列表。详见TXMediaDeviceType定义。
*
* @note - 如果 delete ITXDeviceCollection* 指针会编译错误,SDK 维护 ITXDeviceCollection 对象的生命周期。
* - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera
* - 此接口只支持Mac和Windows平台
*/
virtual ITXDeviceCollection* getDevicesList(TXMediaDeviceType type) = 0;
/**
* 指定当前设备
*
* @param type 设备类型,根据设备类型指定当前设备。详见TXMediaDeviceType定义。
* @param deviceId 从 getDevicesList 中得到的设备 ID
* @return 0:操作成功 负数:失败
* @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera
* - 此接口只支持Mac和Windows平台
*/
virtual int setCurrentDevice(TXMediaDeviceType type, const char* deviceId) = 0;
/**
* 获取当前使用的设备
*
* @param type 设备类型,根据设备类型获取当前设备信息。详见TXMediaDeviceType定义。
* @return ITRTCDeviceInfo 设备信息,能获取设备 ID 和设备名称
* @note 此接口只支持Mac和Windows平台
*/
virtual ITXDeviceInfo* getCurrentDevice(TXMediaDeviceType type) = 0;
/**
* 设置当前设备的音量
*
* @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。
* @param volume 音量大小
* @return 0:操作成功 负数:失败
* @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker
* - 此接口只支持Mac和Windows平台
*/
virtual int setCurrentDeviceVolume(TXMediaDeviceType type, uint32_t volume) = 0;
/**
* 获取当前设备的音量
*
* @param type 设备类型,根据设备类型获取当前设备音量。详见TXMediaDeviceType定义。
*
* @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker
* - 此接口只支持Mac和Windows平台
*/
virtual uint32_t getCurrentDeviceVolume(TXMediaDeviceType type) = 0;
/**
* 设置当前设备是否静音
*
* @param type 设备类型,根据设备类型设置当前设备状态。详见TXMediaDeviceType定义。
* @param mute 是否静音/禁画
* @return 0:操作成功 负数:失败
* @note - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker
* - 此接口只支持Mac和Windows平台
*/
virtual int setCurrentDeviceMute(TXMediaDeviceType type, bool mute) = 0;
/**
* 查询当前设备是否静音
*
* @param type 设备类型,根据设备类型获取当前设备状态。详见TXMediaDeviceType定义。
* @return true : 当前设备已静音;false : 当前设备未静音
* @note type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker
*/
virtual bool getCurrentDeviceMute(TXMediaDeviceType type) = 0;
/**
* 开始摄像头测试
*
* @param view 预览控件所在的父控件
* @return 0:操作成功 负数:失败
* @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。
* - 此接口只支持Mac和Windows平台
*/
virtual int startCameraDeviceTest(void* view) = 0;
#ifdef _WIN32
/**
* 开始进行摄像头测试
* 会触发 onFirstVideoFrame 回调接口
*
* @param callback 摄像头预览自定义渲染画面回调
* @return 0:操作成功 负数:失败
* @note - 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。
* - 此接口只支持Windows平台
*/
virtual int startCameraDeviceTest(ITRTCVideoRenderCallback* callback) = 0;
#endif
/**
* 结束摄像头测试
* @return 0:操作成功 负数:失败
* @note 此接口只支持Mac和Windows平台
*/
virtual int stopCameraDeviceTest() = 0;
/**
* 开始麦克风测试
*
* @param interval 音量回调间隔
* @return 0:操作成功 负数:失败
* @note 此接口只支持Mac和Windows平台
*/
virtual int startMicDeviceTest(uint32_t interval) = 0;
/**
* 结束麦克风测试
* @return 0:操作成功 负数:失败
* @note 此接口只支持Mac和Windows平台
*/
virtual int stopMicDeviceTest() = 0;
/**
* 开始扬声器测试
*
* 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。
* @param filePath 声音文件的路径
* @return 0:操作成功 负数:失败
* @note 此接口只支持Mac和Windows平台
*/
virtual int startSpeakerDeviceTest(const char* filePath) = 0;
/**
* 停止扬声器测试
* @return 0:操作成功 负数:失败
* @note 此接口只支持Mac和Windows平台
*/
virtual int stopSpeakerDeviceTest() = 0;
#elif __ANDROID__ || (__APPLE__ && TARGET_OS_IOS)
/**
* 切换摄像头
*
* @param frontCamera YES:切换到前置摄像头 NO:切换到后置摄像头
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int switchCamera(bool frontCamera) = 0;
/**
* 当前是否为前置摄像头
* @note 此接口只支持和Android和iOS平台
*/
virtual bool isFrontCamera() = 0;
/**
* 获取摄像头最大缩放倍数
* @note 此接口只支持和Android和iOS平台
*/
virtual float getCameraZoomMaxRatio() = 0;
/**
* 设置摄像头缩放倍数
*
* @param zoomRatio 缩放倍数
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int setCameraZoomRatio(float zoomRatio) = 0;
/**
* 设置是否自动识别人脸位置
*
* @param enabled YES:开启;NO:关闭,默认值:YES
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int enableCameraAutoFocus (bool enabled) = 0;
/**
* 查询是否支持自动识别人脸位置
* @note 此接口只支持和Android和iOS平台
*/
virtual bool isAutoFocusEnabled () = 0;
/**
* 设置摄像头焦点
*
* @param x 焦点横坐标
* @param y 焦点纵坐标
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int setCameraFocusPosition (float x, float y) = 0;
/**
* 设置是否开启闪光灯
*
* @param enabled YES:开启;NO:关闭,默认值:NO
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int enableCameraTorch (bool enabled) = 0;
/**
* 设置通话时使用的系统音量类型
*
* @note
* 1. 需要在调用 startLocalAudio() 之前调用该接口。<br>
* 2. 如无特殊需求,不推荐您自行设置,您只需通过 enterRoom 设置好适合您的场景,SDK 内部会自动选择相匹配的音量类型。
*
* @param type 系统音量类型,如无特殊需求,不推荐您自行设置。
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int setSystemVolumeType (TXSystemVolumeType type) = 0;
/**
* 设置设置音频路由
*
* 微信和手机 QQ 视频通话功能的免提模式就是基于音频路由实现的。
* 一般手机都有两个扬声器,一个是位于顶部的听筒扬声器,声音偏小;一个是位于底部的立体声扬声器,声音偏大。
* 设置音频路由的作用就是决定声音使用哪个扬声器播放。
*
* @param route 音频路由,即声音由哪里输出(扬声器、听筒),默认值:TXAudioRouteSpeakerphone
* @return 0:操作成功 负数:失败
* @note 此接口只支持和Android和iOS平台
*/
virtual int setAudioRoute (TXAudioRoute route) = 0;
#endif
};
/// @}
}
#endif /* ITXDeviceManager_h */
... ...
/*
* Module: TRTCCloudCallback @ TXLiteAVSDK
*
* Function: 腾讯云视频通话功能的回调接口类,若想从C++代码中获取到TRTC SDK的回调,请继承此类并调用 ITRTCCloud::addCallback(TRTCCloudCallback* callback)设置观察者
*
*/
#ifndef __TRTCCLOUDCALLBACK_H__
#define __TRTCCLOUDCALLBACK_H__
#include "TRTCTypeDef.h"
#include "ITXDeviceManager.h"
#include "TXLiteAVCode.h"
namespace trtc {
/// @defgroup TRTCCloudCallback_cplusplus TRTCCloudCallback
/// 腾讯云视频通话功能的回调接口类
/// @{
/**
* 腾讯云视频通话功能的回调接口类
*/
class ITRTCCloudCallback
{
public:
virtual ~ITRTCCloudCallback() {}
/////////////////////////////////////////////////////////////////////////////////
//
// (一)错误事件和警告事件
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 错误事件和警告事件
/// @{
/**
* 1.1 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。
*
* @param errCode 错误码
* @param errMsg 错误信息
* @param extraInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
*/
virtual void onError(TXLiteAVError errCode, const char* errMsg, void* extraInfo) = 0;
/**
* 1.2 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。
*
* @param warningCode 警告码
* @param warningMsg 警告信息
* @param extraInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
*/
virtual void onWarning(TXLiteAVWarning warningCode, const char* warningMsg, void* extraInfo) = 0;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)房间事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 房间事件回调
/// @{
/**
* 2.1 已加入房间的回调
*
* 调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 SDK 的 onEnterRoom(result) 回调:
*
* - 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。
* - 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。
* 进房失败的错误码含义请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
*
* @note 在 Ver6.6 之前的版本,只有进房成功会抛出 onEnterRoom(result) 回调,进房失败由 onError() 回调抛出。
* 在 Ver6.6 及之后改为:进房成功返回正的 result,进房失败返回负的 result,同时进房失败也会有 onError() 回调抛出。
*
* @param result result > 0 时为进房耗时(ms),result < 0 时为进房错误码。
*/
virtual void onEnterRoom(int result) = 0;
/**
* 2.2 离开房间的事件回调
*
* 调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。
* 待资源释放完毕,SDK 会通过 onExitRoom() 回调通知到您。
*
* 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。
* 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。
*
* @param reason 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。
*/
virtual void onExitRoom(int reason) = 0;
/**
* 2.3 切换角色的事件回调
*
* 调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程,
* 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。
*
* @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param errMsg 错误信息。
*/
virtual void onSwitchRole(TXLiteAVError errCode, const char* errMsg) {}
/**
* 2.4 请求跨房通话(主播 PK)的结果回调
*
* 调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。
* 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功,
* 如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。
*
* @param userId 要 PK 的目标主播 userId。
* @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param errMsg 错误信息。
*/
virtual void onConnectOtherRoom(const char* userId, TXLiteAVError errCode, const char* errMsg) {}
/**
* 2.5 结束跨房通话(主播 PK)的结果回调
*/
virtual void onDisconnectOtherRoom(TXLiteAVError errCode, const char* errMsg) {}
/**
* 2.6 切换房间 (switchRoom) 的结果回调
*/
virtual void onSwitchRoom(TXLiteAVError errCode, const char* errMsg) {}
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)成员事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 成员事件回调
/// @{
/**
* 3.1 有用户加入当前房间
*
* 出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别:
* - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。
* - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。
*
*
* @note 注意 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“成员列表”,如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。
*
* @param userId 用户标识
*/
virtual void onRemoteUserEnterRoom(const char* userId) {}
/**
* 3.2 有用户离开当前房间
*
* 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别:
* - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。
* - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。
*
* @param userId 用户标识
* @param reason 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。
*/
virtual void onRemoteUserLeaveRoom(const char* userId, int reason) {}
/**
* 3.3 用户是否开启摄像头视频
*
* 当您收到 onUserVideoAvailable(userId, YES) 通知时,表示该路画面已经有可用的视频数据帧到达。
* 此时,您需要调用 startRemoteView(userId) 接口加载该用户的远程画面。
* 然后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。
*
* 当您收到 onUserVideoAvailable(userId, NO) 通知时,表示该路远程画面已被关闭,
* 可能由于该用户调用了 muteLocalVideo() 或 stopLocalPreview()。
*
* @param userId 用户标识
* @param available 画面是否开启
*/
virtual void onUserVideoAvailable(const char* userId, bool available) {}
/**
* 3.4 用户是否开启屏幕分享
*
* @param userId 用户标识
* @param available 屏幕分享是否开启
*/
virtual void onUserSubStreamAvailable(const char* userId, bool available) {}
/**
* 3.5 用户是否开启音频上行
*
* @param userId 用户标识
* @param available 声音是否开启
*/
virtual void onUserAudioAvailable(const char* userId, bool available) {}
/**
* 3.6 开始渲染本地或远程用户的首帧画面
*
* 如果 userId 为 null,表示开始渲染本地采集的摄像头画面,需要您先调用 startLocalPreview 触发。
* 如果 userId 不为 null,表示开始渲染远程用户的首帧画面,需要您先调用 startRemoteView 触发。
*
* @note 只有当您调用 startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView() 之后,才会触发该回调。
*
* @param userId 本地或远程用户 ID,如果 userId == null 代表本地,userId != null 代表远程。
* @param streamType 视频流类型:摄像头或屏幕分享。
* @param width 画面宽度
* @param height 画面高度
*/
virtual void onFirstVideoFrame(const char* userId, const TRTCVideoStreamType streamType, const int width, const int height) {}
/**
* 3.7 开始播放远程用户的首帧音频(本地声音暂不通知)
*
* @param userId 远程用户 ID。
*/
virtual void onFirstAudioFrame(const char* userId) {}
/**
* 3.8 首帧本地视频数据已经被送出
*
* SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。
* 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。
*
* @param streamType 视频流类型,主画面、小画面或辅流画面(屏幕分享)
*/
virtual void onSendFirstLocalVideoFrame(const TRTCVideoStreamType streamType) {}
/**
* 3.9 首帧本地音频数据已经被送出
*
* SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。
* 当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。
*/
virtual void onSendFirstLocalAudioFrame() {}
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (四)统计和质量回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 统计和质量回调
/// @{
/**
* 4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量
*
* @note userId == null 代表自己当前的视频质量
*
* @param localQuality 上行网络质量
* @param remoteQuality 下行网络质量
* @param remoteQualityCount 下行网络质量的数组大小
*/
virtual void onNetworkQuality(TRTCQualityInfo localQuality, TRTCQualityInfo* remoteQuality, uint32_t remoteQualityCount) {}
/**
* 4.2 技术指标统计回调
*
* 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。
* 如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。
*
* @param statis 统计数据,包括本地和远程的
* @note 每2秒回调一次
*/
virtual void onStatistics(const TRTCStatistics& statis) {}
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (五)服务器事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 服务器事件回调
/// @{
/**
* 5.1 SDK 跟服务器的连接断开
*/
virtual void onConnectionLost() {}
/**
* 5.2 SDK 尝试重新连接到服务器
*/
virtual void onTryToReconnect() {}
/**
* 5.3 SDK 跟服务器的连接恢复
*/
virtual void onConnectionRecovery() {}
/**
* 5.4 服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知
*
* @param currentResult 当前完成的测速结果
* @param finishedCount 已完成测速的服务器数量
* @param totalCount 需要测速的服务器总数量
*/
virtual void onSpeedTest(const TRTCSpeedTestResult& currentResult, uint32_t finishedCount, uint32_t totalCount) {}
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (六)硬件设备事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 硬件设备事件回调
/// @{
/**
* 6.1 摄像头准备就绪
*/
virtual void onCameraDidReady() {}
/**
* 6.2 麦克风准备就绪
*/
virtual void onMicDidReady() {}
/**
* 6.3 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量
*
* 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。
* 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调,
* 如果没有人说话,则 userVolumes 为空,totalVolume 为0。
*
* @param userVolumes 所有正在说话的房间成员的音量,取值范围0 - 100。
* @param userVolumesCount 房间成员数量
* @param totalVolume 所有远端成员的总音量, 取值范围0 - 100。
* @note userId 为 null 时表示自己的音量,userVolumes 内仅包含正在说话(音量不为0)的用户音量信息。
*/
virtual void onUserVoiceVolume(TRTCVolumeInfo* userVolumes, uint32_t userVolumesCount, uint32_t totalVolume) {}
#if TARGET_PLATFORM_DESKTOP
/**
* 6.4 本地设备通断回调
*
* @param deviceId 设备 ID
* @param type 设备类型
* @param state 事件类型
*/
virtual void onDeviceChange(const char* deviceId, TRTCDeviceType type, TRTCDeviceState state) {}
/**
* 6.5 麦克风测试音量回调
*
* 麦克风测试接口 startMicDeviceTest 会触发这个回调
*
* @param volume 音量值,取值范围0 - 100
*/
virtual void onTestMicVolume(uint32_t volume) {}
/**
* 6.6 扬声器测试音量回调
*
* 扬声器测试接口 startSpeakerDeviceTest 会触发这个回调
*
* @param volume 音量值,取值范围0 - 100
*/
virtual void onTestSpeakerVolume(uint32_t volume) {}
/**
* 6.7 当前音频采集设备音量变化通知
*
* @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭
*
* @param volume 音量值,取值范围0 - 100
* @param muted 当前采集音频设备是否被静音,true:静音;false:取消静音
*/
virtual void onAudioDeviceCaptureVolumeChanged(uint32_t volume, bool muted) {}
/**
* 6.8 当前音频播放设备音量变化通知
*
* @note 使用 enableAudioVolumeEvaluation(interval>0)开启,(interval==0)关闭
*
* @param volume 音量值,取值范围0 - 100
* @param muted 当前音频播放设备是否被静音,true:静音;false:取消静音
*/
virtual void onAudioDevicePlayoutVolumeChanged(uint32_t volume, bool muted) {}
#endif
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (七)自定义消息的接收回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 自定义消息的接收回调
/// @{
/**
* 7.1 收到自定义消息回调
*
* 当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息
*
* @param userId 用户标识
* @param cmdID 命令 ID
* @param seq 消息序号
* @param message 消息数据
* @param messageSize 消息数据大小
*/
virtual void onRecvCustomCmdMsg(const char* userId, int32_t cmdID, uint32_t seq, const uint8_t* message, uint32_t messageSize) {}
/**
* 7.2 自定义消息丢失回调
*
* 实时音视频使用 UDP 通道,即使设置了可靠传输(reliable)也无法确保100@%不丢失,只是丢消息概率极低,能满足常规可靠性要求。
* 在发送端设置了可靠传输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。
*
* @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调
* @param userId 用户标识
* @param cmdID 命令 ID
* @param errCode 错误码
* @param missed 丢失的消息数量
*/
virtual void onMissCustomCmdMsg(const char* userId, int32_t cmdID, int32_t errCode, int32_t missed) {}
/**
* 7.3 收到 SEI 消息的回调
*
* 当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。
*
* @param userId 用户标识
* @param message 数据
* @param messageSize 数据大小
*/
virtual void onRecvSEIMsg(const char* userId, const uint8_t* message, uint32_t messageSize) {};
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (八)CDN 旁路转推回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name CDN 旁路转推回调
/// @{
/**
* 8.1 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 startPublishing() 接口
*
* @param err 0表示成功,其余值表示失败
* @param errMsg 具体错误原因
*/
virtual void onStartPublishing(int err, const char *errMsg) {};
/**
* 8.2 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 stopPublishing() 接口
*
* @param err 0表示成功,其余值表示失败
* @param errMsg 具体错误原因
*/
virtual void onStopPublishing(int err, const char *errMsg) {};
/**
* 8.3 启动旁路推流到 CDN 完成的回调
*
* 对应于 TRTCCloud 中的 startPublishCDNStream() 接口
*
* @note Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。
*/
virtual void onStartPublishCDNStream(int errCode, const char* errMsg) {};
/**
* 8.4 停止旁路推流到 CDN 完成的回调
*
* 对应于 TRTCCloud 中的 stopPublishCDNStream() 接口
*
*/
virtual void onStopPublishCDNStream(int errCode, const char* errMsg) {};
/**
* 8.5 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口
*
* @param errCode 0表示成功,其余值表示失败
* @param errMsg 具体错误原因
*/
virtual void onSetMixTranscodingConfig(int errCode, const char* errMsg) {};
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (九)屏幕分享回调
//
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 屏幕分享回调
/// @{
#ifdef _WIN32
/**
* 9.1 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口
* 目前只支持Windows平台
*/
virtual void onScreenCaptureCovered() {};
#endif
/**
* 9.2 当屏幕分享开始时,SDK 会通过此回调通知
*/
virtual void onScreenCaptureStarted() {};
/**
* 9.3 当屏幕分享暂停时,SDK 会通过此回调通知
*
* @param reason 停止原因,0:表示用户主动暂停;1:表示设置屏幕分享参数导致的暂停;2:表示屏幕分享窗口被最小化导致的暂停;3:表示屏幕分享窗口被隐藏导致的暂停
*/
virtual void onScreenCapturePaused(int reason) {};
/**
* 9.4 当屏幕分享恢复时,SDK 会通过此回调通知
*
* @param reason 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复
*/
virtual void onScreenCaptureResumed(int reason) {};
/**
* 9.5 当屏幕分享停止时,SDK 会通过此回调通知
*
* @param reason 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭
*/
virtual void onScreenCaptureStoped(int reason) {};
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十)截图回调
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 截图回调
/// @{
/**
* 10.1 截图完成时回调
*
* @param userId 用户 ID,空字符串表示截取本地画面
* @param type 视频流类型
* @param data 截图数据,为 nullptr 表示截图失败
* @param length 截图数据长度,对于BGRA32而言,length = width * height * 4
* @param width 截图画面的宽度
* @param height 截图画面的高度
* @param format 截图数据格式,目前只支持 TRTCVideoPixelFormat_BGRA32
*/
virtual void onSnapshotComplete(const char* userId, TRTCVideoStreamType type, char* data,
uint32_t length, uint32_t width, uint32_t height,
TRTCVideoPixelFormat format) {
}
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (十一)Windows 专有废弃方法
//
/////////////////////////////////////////////////////////////////////////////////
/// @name Windows 专有废弃方法
/// @{
#ifdef _WIN32
/**
* 11.1 废弃接口:有主播加入当前房间
*
* 该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。
*
* @note 该接口已被废弃,不推荐使用
*
* @param userId 用户标识
*/
virtual __declspec(deprecated("use onRemoteUserEnterRoom instead"))
void onUserEnter(const char* userId) {}
/**
* 11.2 废弃接口:有主播离开当前房间
*
* 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserLeaveRoom 进行替代。
*
* @note 该接口已被废弃,不推荐使用
*
* @param userId 用户标识
* @param reason 离开原因。
*/
virtual __declspec(deprecated("use onRemoteUserLeaveRoom instead"))
void onUserExit(const char* userId, int reason) {}
/**
* 11.3 废弃接口:播放音效结束回调
*
* @param effectId 音效id
* @param code 0表示播放正常结束;其他表示异常结束
*/
virtual __declspec(deprecated("use ITXAudioEffectManager.startPlayMusic instead"))
void onAudioEffectFinished(int effectId, int code) {};
/**
* 11.4 废弃接口:开始播放背景音乐
*
* @param errCode 错误码
*/
virtual __declspec(deprecated("use ITXAudioEffectManager.ITXMusicPlayObserver instead"))
void onPlayBGMBegin(TXLiteAVError errCode) {}
/**
* 11.5 废弃接口:播放背景音乐的进度
*
* @param progressMS 已播放时间
* @param durationMS 总时间
*/
virtual __declspec(deprecated("use ITXAudioEffectManager.ITXMusicPlayObserver instead"))
void onPlayBGMProgress(uint32_t progressMS, uint32_t durationMS) {}
/**
* 11.6 废弃接口:播放背景音乐结束
*
* @param errCode 错误码
*/
virtual __declspec(deprecated("use ITXAudioEffectManager.ITXMusicPlayObserver instead"))
void onPlayBGMComplete(TXLiteAVError errCode) {}
#endif // _WIN32
/// @}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (十二)自定义视频渲染回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 自定义视频渲染回调
class ITRTCVideoRenderCallback
{
public:
virtual ~ITRTCVideoRenderCallback() {}
/**
* 12.1 自定义视频渲染回调
*
* 可以通过 setLocalVideoRenderCallback 和 setRemoteVideoRenderCallback 接口设置自定义渲染回调
*
* @param userId 用户标识
* @param streamType 流类型:即摄像头还是屏幕分享
* @param frame 视频帧数据
*
* @note - 在iOS和Mac平台上回调的视频帧为TRTCVideoBufferType_Buffer类型
*/
virtual void onRenderVideoFrame(const char* userId, TRTCVideoStreamType streamType, TRTCVideoFrame* frame) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (十三)音频数据回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 音频数据回调
class ITRTCAudioFrameCallback
{
public:
virtual ~ITRTCAudioFrameCallback() {}
/**
* 13.1 本地麦克风采集到的音频数据回调
*
* @param frame 音频数据
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据支持修改。
* @note - 此接口回调出的音频时间帧长固定为0.02s。
由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
* @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果。
*/
virtual void onCapturedAudioFrame(TRTCAudioFrame *frame) {};
#if TARGET_PLATFORM_PHONE
/**
* 13.2 本地采集并经过音频模块前处理后的音频数据回调
*
* @param frame 音频数据
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据包含背景音、音效、混响等前处理效果,延迟较高。
* @note - 此接口回调出的音频数据支持修改。
* @note - 此接口回调出的音频时间帧长固定为0.02s。
由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
以SDK默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
*/
virtual void onLocalProcessedAudioFrame(TRTCAudioFrame *frame) {};
#endif
/**
* 13.3 混音前的每一路远程用户的音频数据(例如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据)
*
* @param frame 音频数据
* @param userId 用户标识
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* - 此接口回调出的音频数据是只读的,不支持修改。
*/
virtual void onPlayAudioFrame(TRTCAudioFrame *frame, const char* userId) {};
/**
* 13.4 各路音频数据混合后送入喇叭播放的音频数据
*
* @param frame 音频数据
* @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
* @note - 此接口回调出的音频数据支持修改。
* @note - 此接口回调出的音频时间帧长固定为0.02s。
由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
以SDK默认的音频播放格式48000采样率、双声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 2 × 16bit = 30720bit = 3840字节】。
* @note - 此接口回调出的音频数据是各路音频播放数据的混合,不包含耳返的音频数据。
*/
virtual void onMixedPlayAudioFrame(TRTCAudioFrame *frame) {};
};
/////////////////////////////////////////////////////////////////////////////////
//
// (十四)Log 信息回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 日志相关回调
class ITRTCLogCallback
{
public:
virtual ~ITRTCLogCallback() {}
/**
* 14.1 有日志打印时的回调
*
* @param log 日志内容
* @param level 日志等级 参见 TRTCLogLevel
* @param module 暂无具体意义,目前为固定值 TXLiteAVSDK
*/
virtual void onLog(const char* log, TRTCLogLevel level, const char* module) {}
};
/// @}
}
#endif /* __TRTCENGINECALLBACK_H__ */
... ...