wangguolei

3.4.0.04181104

Too many changes to show.

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

1 Pod::Spec.new do |s| 1 Pod::Spec.new do |s|
2 s.name = "HHVDoctorSDK" 2 s.name = "HHVDoctorSDK"
3 - s.version = "3.4.0.04181019" 3 + s.version = "3.4.0.04181104"
4 s.summary = "和缓视频医生 SDK" 4 s.summary = "和缓视频医生 SDK"
5 5
6 s.description = <<-DESC 6 s.description = <<-DESC
  1 +/*
  2 +* Module: 网络音频包UDT自定义数据回调
  3 +*
  4 +* Function: 给客户回调发送前、接收后的 UDT 自定义数据
  5 +*
  6 +*/
  7 +#ifndef LITEAV_ITRTCAUDIOPACKETLISTENER_H
  8 +#define LITEAV_ITRTCAUDIOPACKETLISTENER_H
  9 +
  10 +#include <stdio.h>
  11 +#include "TXLiteAVBuffer.h"
  12 +
  13 +namespace liteav {
  14 + struct TRTCAudioPacket {
  15 + const char *userId;
  16 + liteav::TXLiteAVBuffer* extraData;
  17 + };
  18 +
  19 + class ITRTCAudioPacketListener {
  20 + public:
  21 + virtual ~ITRTCAudioPacketListener() {}
  22 + /*网络层接收到音频数据包*/
  23 + virtual bool onRecvAudioPacket(TRTCAudioPacket &data) { return false; }
  24 + /*网络层即将发送的音频数据包*/
  25 + virtual bool onSendAudioPacket(TRTCAudioPacket &data) { return false; }
  26 + };
  27 +}
  28 +
  29 +
  30 +#endif //LITEAV_ITRTCAUDIOPACKETLISTENER_H
This diff could not be displayed because it is too large.
  1 +/**
  2 + * Module: TRTC 关键类型定义
  3 + * Function: 分辨率、质量等级等枚举和常量值的定义
  4 + */
  5 +/// @defgroup TRTCCloudDef_ios 关键类型定义
  6 +/// 腾讯云实时音视频的关键类型定义
  7 +/// @{
  8 +#import <Foundation/Foundation.h>
  9 +
  10 +/////////////////////////////////////////////////////////////////////////////////
  11 +//
  12 +// 渲染控件
  13 +//
  14 +/////////////////////////////////////////////////////////////////////////////////
  15 +
  16 +/**
  17 + * [VIEW] 用于渲染视频画面的渲染控件
  18 + *
  19 + * TRTC 中有很多需要操控视频画面的接口,这些接口都需要您指定视频渲染控件。
  20 + * - 在 iOS 系统中,您可以直接使用 UIView 作为视频渲染控件,SDK 会在您提供的 UIView 上绘制视频画面。
  21 + * - 在 Mac 系统中,您可以直接使用 NSView 作为视频渲染控件,SDK 会在您提供的 NSView 上绘制视频画面。
  22 + * 示例代码如下:
  23 + * <pre>
  24 + * UIView *videoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 360, 640)];
  25 + * [self.view addSubview:videoView];
  26 + * [trtcCloud startLocalPreview:YES view:_localView];
  27 + * </pre>
  28 + */
  29 +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
  30 +#import <UIKit/UIKit.h>
  31 +typedef UIView TXView;
  32 +typedef UIImage TXImage;
  33 +typedef UIEdgeInsets TXEdgeInsets;
  34 +#elif TARGET_OS_MAC
  35 +#import <AppKit/AppKit.h>
  36 +typedef NSView TXView;
  37 +typedef NSImage TXImage;
  38 +typedef NSEdgeInsets TXEdgeInsets;
  39 +#endif
  40 +#import "TXDeviceManager.h"
  41 +
  42 +/////////////////////////////////////////////////////////////////////////////////
  43 +//
  44 +// 视频相关枚举值定义
  45 +//
  46 +/////////////////////////////////////////////////////////////////////////////////
  47 +
  48 +/**
  49 + * 1.1 视频分辨率
  50 + *
  51 + * 此处仅定义横屏分辨率(如 640 × 360),如需使用竖屏分辨率(如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。
  52 + */
  53 +typedef NS_ENUM(NSInteger, TRTCVideoResolution) {
  54 +
  55 + ///宽高比 1:1;分辨率 120x120;建议码率(VideoCall)80kbps; 建议码率(LIVE)120kbps。
  56 + TRTCVideoResolution_120_120 = 1,
  57 +
  58 + ///宽高比 1:1 分辨率 160x160;建议码率(VideoCall)100kbps; 建议码率(LIVE)150kbps。
  59 + TRTCVideoResolution_160_160 = 3,
  60 +
  61 + ///宽高比 1:1;分辨率 270x270;建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps。
  62 + TRTCVideoResolution_270_270 = 5,
  63 +
  64 + ///宽高比 1:1;分辨率 480x480;建议码率(VideoCall)350kbps; 建议码率(LIVE)500kbps。
  65 + TRTCVideoResolution_480_480 = 7,
  66 +
  67 + ///宽高比4:3;分辨率 160x120;建议码率(VideoCall)100kbps; 建议码率(LIVE)150kbps。
  68 + TRTCVideoResolution_160_120 = 50,
  69 +
  70 + ///宽高比 4:3;分辨率 240x180;建议码率(VideoCall)150kbps; 建议码率(LIVE)250kbps。
  71 + TRTCVideoResolution_240_180 = 52,
  72 +
  73 + ///宽高比 4:3;分辨率 280x210;建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps。
  74 + TRTCVideoResolution_280_210 = 54,
  75 +
  76 + ///宽高比 4:3;分辨率 320x240;建议码率(VideoCall)250kbps; 建议码率(LIVE)375kbps。
  77 + TRTCVideoResolution_320_240 = 56,
  78 +
  79 + ///宽高比 4:3;分辨率 400x300;建议码率(VideoCall)300kbps; 建议码率(LIVE)450kbps。
  80 + TRTCVideoResolution_400_300 = 58,
  81 +
  82 + ///宽高比 4:3;分辨率 480x360;建议码率(VideoCall)400kbps; 建议码率(LIVE)600kbps。
  83 + TRTCVideoResolution_480_360 = 60,
  84 +
  85 + ///宽高比 4:3;分辨率 640x480;建议码率(VideoCall)600kbps; 建议码率(LIVE)900kbps。
  86 + TRTCVideoResolution_640_480 = 62,
  87 +
  88 + ///宽高比 4:3;分辨率 960x720;建议码率(VideoCall)1000kbps; 建议码率(LIVE)1500kbps。
  89 + TRTCVideoResolution_960_720 = 64,
  90 +
  91 + ///宽高比 16:9;分辨率 160x90;建议码率(VideoCall)150kbps; 建议码率(LIVE)250kbps。
  92 + TRTCVideoResolution_160_90 = 100,
  93 +
  94 + ///宽高比 16:9;分辨率 256x144;建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps。
  95 + TRTCVideoResolution_256_144 = 102,
  96 +
  97 + ///宽高比 16:9;分辨率 320x180;建议码率(VideoCall)250kbps; 建议码率(LIVE)400kbps。
  98 + TRTCVideoResolution_320_180 = 104,
  99 +
  100 + ///宽高比 16:9;分辨率 480x270;建议码率(VideoCall)350kbps; 建议码率(LIVE)550kbps。
  101 + TRTCVideoResolution_480_270 = 106,
  102 +
  103 + ///宽高比 16:9;分辨率 640x360;建议码率(VideoCall)500kbps; 建议码率(LIVE)900kbps。
  104 + TRTCVideoResolution_640_360 = 108,
  105 +
  106 + ///宽高比 16:9;分辨率 960x540;建议码率(VideoCall)850kbps; 建议码率(LIVE)1300kbps。
  107 + TRTCVideoResolution_960_540 = 110,
  108 +
  109 + ///宽高比 16:9;分辨率 1280x720;建议码率(VideoCall)1200kbps; 建议码率(LIVE)1800kbps。
  110 + TRTCVideoResolution_1280_720 = 112,
  111 +
  112 + ///宽高比 16:9;分辨率 1920x1080;建议码率(VideoCall)2000kbps; 建议码率(LIVE)3000kbps。
  113 + TRTCVideoResolution_1920_1080 = 114,
  114 +
  115 +};
  116 +
  117 +/**
  118 + * 1.2 视频宽高比模式
  119 + *
  120 + * TRTCVideoResolution 中仅定义了横屏分辨率(如 640 × 360),如需使用竖屏分辨率(如360 × 640),需要同时指定 TRTCVideoResolutionMode 为 Portrait。
  121 + */
  122 +typedef NS_ENUM(NSInteger, TRTCVideoResolutionMode) {
  123 +
  124 + ///横屏分辨率,例如:TRTCVideoResolution_640_360 + TRTCVideoResolutionModeLandscape = 640 × 360。
  125 + TRTCVideoResolutionModeLandscape = 0,
  126 +
  127 + ///竖屏分辨率,例如:TRTCVideoResolution_640_360 + TRTCVideoResolutionModePortrait = 360 × 640。
  128 + TRTCVideoResolutionModePortrait = 1,
  129 +
  130 +};
  131 +
  132 +/**
  133 + * 1.3 视频流类型
  134 + *
  135 + * TRTC 内部有三种不同的视频流,分别是:
  136 + * - 高清大画面:一般用来传输摄像头的视频数据。
  137 + * - 低清小画面:小画面和大画面的内容相互,但是分辨率和码率都比大画面低,因此清晰度也更低。
  138 + * - 辅流画面:一般用于屏幕分享,同一时间在同一个房间中只允许一个用户发布辅流视频,其他用户必须要等该用户关闭之后才能发布自己的辅流。
  139 + * @note 不支持单独开启低清小画面,小画面必须依附于大画面而存在,SDK 会自动设定低清小画面的分辨率和码率。
  140 + */
  141 +typedef NS_ENUM(NSInteger, TRTCVideoStreamType) {
  142 +
  143 + ///高清大画面,一般用来传输摄像头的视频数据。
  144 + TRTCVideoStreamTypeBig = 0,
  145 +
  146 + ///低清小画面:小画面和大画面的内容相互,但是分辨率和码率都比大画面低,因此清晰度也更低。
  147 + TRTCVideoStreamTypeSmall = 1,
  148 +
  149 + ///辅流画面:一般用于屏幕分享,同一时间在同一个房间中只允许一个用户发布辅流视频,其他用户必须要等该用户关闭之后才能发布自己的辅流。
  150 + TRTCVideoStreamTypeSub = 2,
  151 +
  152 +};
  153 +
  154 +/**
  155 + * 1.4 视频画面填充模式
  156 + *
  157 + * 如果视频显示区域的宽高比不等于视频内容的宽高比时,就需要您指定画面的填充模式:
  158 + */
  159 +typedef NS_ENUM(NSInteger, TRTCVideoFillMode) {
  160 +
  161 + ///填充模式:即将画面内容居中等比缩放以充满整个显示区域,超出显示区域的部分将会被裁剪掉,此模式下画面可能不完整。
  162 + TRTCVideoFillMode_Fill = 0,
  163 +
  164 + ///适应模式:即按画面长边进行缩放以适应显示区域,短边部分会被填充为黑色,此模式下图像完整但可能留有黑边。
  165 + TRTCVideoFillMode_Fit = 1,
  166 +
  167 +};
  168 +
  169 +/**
  170 + * 1.5 视频画面旋转方向
  171 + *
  172 + * TRTC 提供了对本地和远程画面的旋转角度设置 API,下列的旋转角度都是指顺时针方向的。
  173 + */
  174 +typedef NS_ENUM(NSInteger, TRTCVideoRotation) {
  175 +
  176 + ///不旋转
  177 + TRTCVideoRotation_0 = 0,
  178 +
  179 + ///顺时针旋转90度
  180 + TRTCVideoRotation_90 = 1,
  181 +
  182 + ///顺时针旋转180度
  183 + TRTCVideoRotation_180 = 2,
  184 +
  185 + ///顺时针旋转270度
  186 + TRTCVideoRotation_270 = 3,
  187 +
  188 +};
  189 +
  190 +/**
  191 + * 1.6 美颜(磨皮)算法
  192 + *
  193 + * TRTC 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。
  194 + */
  195 +typedef NS_ENUM(NSInteger, TRTCBeautyStyle) {
  196 +
  197 + ///光滑,算法比较激进,磨皮效果比较明显,适用于秀场直播。
  198 + TRTCBeautyStyleSmooth = 0,
  199 +
  200 + ///自然,算法更多地保留了面部细节,磨皮效果更加自然,适用于绝大多数直播场景。
  201 + TRTCBeautyStyleNature = 1,
  202 +
  203 + ///优图,由优图实验室提供,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高。
  204 + TRTCBeautyStylePitu = 2,
  205 +
  206 +};
  207 +
  208 +/**
  209 + * 1.7 视频像素格式
  210 + *
  211 + * TRTC 提供针对视频的自定义采集和自定义渲染功能:
  212 + * - 在自定义采集功能中,您可以用下列枚举值描述您采集的视频像素格式。
  213 + * - 在自定义渲染功能中,您可以指定您期望 SDK 回调出的视频像素格式。
  214 + */
  215 +typedef NS_ENUM(NSInteger, TRTCVideoPixelFormat) {
  216 +
  217 + ///未定义的格式
  218 + TRTCVideoPixelFormat_Unknown = 0,
  219 +
  220 + /// YUV420P(I420) 格式
  221 + TRTCVideoPixelFormat_I420 = 1,
  222 +
  223 + /// OpenGL 2D 纹理格式
  224 + TRTCVideoPixelFormat_Texture_2D = 7,
  225 +
  226 + /// BGRA 格式
  227 + TRTCVideoPixelFormat_32BGRA = 6,
  228 +
  229 + /// YUV420SP(NV12)格式
  230 + TRTCVideoPixelFormat_NV12 = 5,
  231 +
  232 +};
  233 +
  234 +/**
  235 + * 1.8 视频数据传递方式
  236 + *
  237 + * 在自定义采集和自定义渲染功能,您需要用到下列枚举值来指定您希望以什么方式传递视频数据:
  238 + * - 方案一:使用内存 Buffer 传递视频数据,该方案在 iOS 效率尚可,但在 Android 系统上效率较差,Windows 暂时仅支持内存 Buffer 的传递方式。
  239 + * - 方案二:使用 Texture 纹理传递视频数据,该方案在 iOS 和 Android 系统下均有较高的效率,Windows 暂不支持,需要您有一定的 OpenGL 编程基础。
  240 + */
  241 +typedef NS_ENUM(NSInteger, TRTCVideoBufferType) {
  242 +
  243 + ///未定义的传递方式
  244 + TRTCVideoBufferType_Unknown = 0,
  245 +
  246 + ///使用内存 Buffer 传递视频数据,iOS: PixelBuffer;Android: 用于 JNI 层的 Direct Buffer;Win: 内存数据块。
  247 + TRTCVideoBufferType_PixelBuffer = 1,
  248 +
  249 + ///使用内存 Buffer 传递视频数据,iOS: 经过一次额外整理后更加紧凑的 NSData 类型的内存块;Android: 用于 JAVA 层的 byte[]。
  250 + ///该传递的方式的性能是几种方案中效率较差的一种。
  251 + TRTCVideoBufferType_NSData = 2,
  252 +
  253 + ///使用 Texture 纹理传递视频数据
  254 + TRTCVideoBufferType_Texture = 3,
  255 +
  256 +};
  257 +
  258 +/**
  259 + * 1.9 视频的镜像类型
  260 + *
  261 + * 视频的镜像是指对视频内容进行左右翻转,尤其是对本地的摄像头预览视频,开启镜像后能给主播带来熟悉的“照镜子”体验。
  262 + */
  263 +typedef NS_ENUM(NSUInteger, TRTCVideoMirrorType) {
  264 +
  265 + ///自动模式:如果正使用前置摄像头则开启镜像,如果是后置摄像头则不开启镜像(仅适用于移动设备)。
  266 + TRTCVideoMirrorTypeAuto = 0,
  267 +
  268 + ///强制开启镜像,不论当前使用的是前置摄像头还是后置摄像头。
  269 + TRTCVideoMirrorTypeEnable = 1,
  270 +
  271 + ///强制关闭镜像,不论当前使用的是前置摄像头还是后置摄像头。
  272 + TRTCVideoMirrorTypeDisable = 2,
  273 +
  274 +};
  275 +
  276 +/// Old version of TRTCVideoMirrorType, reserved for compatibility with older interface.
  277 +typedef NS_ENUM(NSUInteger, TRTCLocalVideoMirrorType) {
  278 + TRTCLocalVideoMirrorType_Auto = TRTCVideoMirrorTypeAuto,
  279 + TRTCLocalVideoMirrorType_Enable = TRTCVideoMirrorTypeEnable,
  280 + TRTCLocalVideoMirrorType_Disable = TRTCVideoMirrorTypeDisable,
  281 +} __attribute__((deprecated("use TRTCVideoMirrorType instead")));
  282 +
  283 +/**
  284 + * 1.10 本地视频截图的数据源
  285 + *
  286 + * SDK 支持从如下两种数据源中截取图片并保存成本地文件:
  287 + * - 视频流:从视频流中截取原生的视频内容,截取的内容不受渲染控件的显示控制。
  288 + * - 渲染层:从渲染控件中截取显示的视频内容,可以做到用户所见即所得的效果,但如果显示区域过小,截取出的图片也会很小。
  289 + */
  290 +typedef NS_ENUM(NSUInteger, TRTCSnapshotSourceType) {
  291 +
  292 + ///从视频流中截取原生的视频内容,截取的内容不受渲染控件的显示控制。
  293 + TRTCSnapshotSourceTypeStream = 0,
  294 +
  295 + ///从渲染控件中截取显示的视频内容,可以做到用户所见即所得的效果,但如果显示区域过小,截取出的图片也会很小。
  296 + TRTCSnapshotSourceTypeView = 1,
  297 +
  298 +};
  299 +
  300 +/////////////////////////////////////////////////////////////////////////////////
  301 +//
  302 +// 网络相关枚举值定义
  303 +//
  304 +/////////////////////////////////////////////////////////////////////////////////
  305 +
  306 +/**
  307 + * 2.1 应用场景
  308 + *
  309 + * TRTC 针对常见的音视频应用场景都进行了定向优化,以满足各种垂直场景下的差异化要求,主要场景可以分为如下两类:
  310 + * - 直播(LIVE)场景:包括 LIVE 和 VoiceChatRoom,前者是音频+视频,后者是纯音频。
  311 + * 直播场景下,用户被分成“主播”和“观众”两种角色,单个房间中同时最多支持10万人在线,适合于观众人数众多的直播场景。
  312 + * - 实时(RTC)场景:包括 VideoCall 和 AudioCall,前者是音频+视频,后者是纯音频。
  313 + * 实时场景下,用户没有角色的差异,但单个房间中同时最多支持 300 人在线,适合于小范围实时通信的场景。
  314 + */
  315 +typedef NS_ENUM(NSInteger, TRTCAppScene) {
  316 +
  317 + ///视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。
  318 + ///适用于[1对1视频通话]、[300人视频会议]、[在线问诊]、[教育小班课]、[远程面试]等业务场景。
  319 + TRTCAppSceneVideoCall = 0,
  320 +
  321 + ///视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。
  322 + ///适用于[低延时互动直播]、[大班课]、[主播PK]、[视频相亲]、[在线互动课堂]、[远程培训]、[超大型会议]等业务场景。
  323 + ///@note 此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。
  324 + TRTCAppSceneLIVE = 1,
  325 +
  326 + ///语音通话场景,默认采用 SPEECH 音质,单个房间最多支持300人同时在线,最高支持50人同时发言。
  327 + ///适用于[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等业务场景。
  328 + TRTCAppSceneAudioCall = 2,
  329 +
  330 + ///语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。
  331 + ///适用于[语音俱乐部]、[在线K歌房]、[音乐直播间]、[FM电台]等业务场景。
  332 + ///@note 此场景下,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。
  333 + TRTCAppSceneVoiceChatRoom = 3,
  334 +
  335 +};
  336 +
  337 +/**
  338 + * 2.2 角色
  339 + *
  340 + * 仅适用于直播类场景(即 TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom),把用户区分成两种不同的身份:
  341 + * - 主播:可以随时发布自己的音视频流,但人数有限制,同一个房间中最多只允许 50 个主播同时发布自己的音视频流。
  342 + * - 观众:只能观看其他用户的音视频流,要发布音视频流,需要先通过 {@link switchRole} 切换成主播,同一个房间中最多能容纳10万观众。
  343 + */
  344 +typedef NS_ENUM(NSInteger, TRTCRoleType) {
  345 +
  346 + ///主播:可以随时发布自己的音视频流,但人数有限制,同一个房间中最多只允许 50 个主播同时发布自己的音视频流。
  347 + TRTCRoleAnchor = 20,
  348 +
  349 + ///观众:只能观看其他用户的音视频流,要发布音视频流,需要先通过 {@link switchRole} 切换成主播,同一个房间中最多能容纳10万观众。
  350 + TRTCRoleAudience = 21,
  351 +
  352 +};
  353 +
  354 +/**
  355 + * 2.3 流控模式(已废弃)
  356 + */
  357 +typedef NS_ENUM(NSInteger, TRTCQosControlMode) {
  358 +
  359 + ///本地控制,用于 SDK 开发内部调试,客户请勿使用。
  360 + TRTCQosControlModeClient = 0,
  361 +
  362 + ///云端控制,默认模式,推荐选择。
  363 + TRTCQosControlModeServer = 1,
  364 +
  365 +};
  366 +
  367 +/**
  368 + * 2.4 画质偏好
  369 + *
  370 + * TRTC 在弱网络环境下有两种调控模式:“优先保证画面清晰”或“优先保证画面流畅”,两种模式均会优先保障声音数据的传输。
  371 + */
  372 +typedef NS_ENUM(NSInteger, TRTCVideoQosPreference) {
  373 +
  374 + ///流畅优先:即当前网络不足以传输既清晰又流畅的画面时,优先保证画面的流畅性,代价就是画面会比较模糊且伴随有较多的马赛克。
  375 + TRTCVideoQosPreferenceSmooth = 1,
  376 +
  377 + ///清晰优先(默认值):即当前网络不足以传输既清晰又流畅的画面时,优先保证画面的清晰度,代价就是画面会比较卡顿。
  378 + TRTCVideoQosPreferenceClear = 2,
  379 +
  380 +};
  381 +
  382 +/**
  383 + * 2.5 网络质量
  384 + *
  385 + * TRTC 会每隔两秒对当前的网络质量进行评估,评估结果为六个等级:Excellent 表示最好,Down 表示最差。
  386 + */
  387 +typedef NS_ENUM(NSInteger, TRTCQuality) {
  388 +
  389 + ///未定义
  390 + TRTCQuality_Unknown = 0,
  391 +
  392 + ///当前网络非常好
  393 + TRTCQuality_Excellent = 1,
  394 +
  395 + ///当前网络比较好
  396 + TRTCQuality_Good = 2,
  397 +
  398 + ///当前网络一般
  399 + TRTCQuality_Poor = 3,
  400 +
  401 + ///当前网络较差
  402 + TRTCQuality_Bad = 4,
  403 +
  404 + ///当前网络很差
  405 + TRTCQuality_Vbad = 5,
  406 +
  407 + ///当前网络不满足 TRTC 的最低要求
  408 + TRTCQuality_Down = 6,
  409 +
  410 +};
  411 +
  412 +/**
  413 + * 2.6 视频状态类型
  414 + *
  415 + * 该枚举类型用于视频状态变化回调接口{@link onRemoteVideoStatusUpdated},用于指定当前的视频状态。
  416 + */
  417 +typedef NS_ENUM(NSUInteger, TRTCAVStatusType) {
  418 +
  419 + ///停止播放
  420 + TRTCAVStatusStopped = 0,
  421 +
  422 + ///正在播放
  423 + TRTCAVStatusPlaying = 1,
  424 +
  425 + ///正在加载
  426 + TRTCAVStatusLoading = 2,
  427 +
  428 +};
  429 +
  430 +/**
  431 + * 2.7 视频状态变化原因类型
  432 + *
  433 + * 该枚举类型用于视频状态变化回调接口{@link onRemoteVideoStatusUpdated},用于指定当前的视频状态原因。
  434 + */
  435 +typedef NS_ENUM(NSUInteger, TRTCAVStatusChangeReason) {
  436 +
  437 + ///缺省值
  438 + TRTCAVStatusChangeReasonInternal = 0,
  439 +
  440 + ///网络缓冲
  441 + TRTCAVStatusChangeReasonBufferingBegin = 1,
  442 +
  443 + ///结束缓冲
  444 + TRTCAVStatusChangeReasonBufferingEnd = 2,
  445 +
  446 + ///本地启动视频流播放
  447 + TRTCAVStatusChangeReasonLocalStarted = 3,
  448 +
  449 + ///本地停止视频流播放
  450 + TRTCAVStatusChangeReasonLocalStopped = 4,
  451 +
  452 + ///远端视频流开始(或继续)
  453 + TRTCAVStatusChangeReasonRemoteStarted = 5,
  454 +
  455 + ///远端视频流停止(或中断
  456 + TRTCAVStatusChangeReasonRemoteStopped = 6,
  457 +
  458 +};
  459 +
  460 +/////////////////////////////////////////////////////////////////////////////////
  461 +//
  462 +// 音频相关枚举值定义
  463 +//
  464 +/////////////////////////////////////////////////////////////////////////////////
  465 +
  466 +/**
  467 + * 3.1 音频采样率
  468 + *
  469 + * 音频采样率用来衡量声音的保真程度,采样率越高保真程度越好,如果您的应用场景有音乐的存在,推荐使用 TRTCAudioSampleRate48000。
  470 + */
  471 +typedef NS_ENUM(NSInteger, TRTCAudioSampleRate) {
  472 +
  473 + /// 16k采样率
  474 + TRTCAudioSampleRate16000 = 16000,
  475 +
  476 + /// 32k采样率
  477 + TRTCAudioSampleRate32000 = 32000,
  478 +
  479 + /// 44.1k采样率
  480 + TRTCAudioSampleRate44100 = 44100,
  481 +
  482 + /// 48k采样率
  483 + TRTCAudioSampleRate48000 = 48000,
  484 +
  485 +};
  486 +
  487 +/**
  488 + * 3.2 声音音质
  489 + *
  490 + * TRTC 提供了三种精心校调好的模式,用来满足各种垂直场景下对音质的差异化追求:
  491 + * - 人声模式(Speech):适用于以人声沟通为主的应用场景,该模式下音频传输的抗性较强,TRTC 会通过各种人声处理技术保障在弱网络环境下的流畅度最佳。
  492 + * - 音乐模式(Music):适用于对声乐要求很苛刻的场景,该模式下音频传输的数据量很大,TRTC 会通过各项技术确保音乐信号在各频段均能获得高保真的细节还原度。
  493 + * - 默认模式(Default):介于 Speech 和 Music 之间的档位,对音乐的还原度比人声模式要好,但传输数据量比音乐模式要低很多,对各种场景均有不错的适应性。
  494 + */
  495 +typedef NS_ENUM(NSInteger, TRTCAudioQuality) {
  496 +
  497 + ///人声模式:采样率:16k;单声道;编码码率:16kbps;具备几个模式中最强的网络抗性,适合语音通话为主的场景,比如在线会议,语音通话等。
  498 + TRTCAudioQualitySpeech = 1,
  499 +
  500 + ///默认模式:采样率:48k;单声道;编码码率:50kbps;介于 Speech 和 Music 之间的档位,SDK 默认档位,推荐选择。
  501 + TRTCAudioQualityDefault = 2,
  502 +
  503 + ///音乐模式:采样率:48k;全频带立体声;编码码率:128kbps;适合需要高保真传输音乐的场景,比如在线K歌、音乐直播等。
  504 + TRTCAudioQualityMusic = 3,
  505 +
  506 +};
  507 +
  508 +/**
  509 + * 3.3 音频路由(即声音的播放模式)
  510 + *
  511 + * 音频路由,即声音是从手机的扬声器还是从听筒中播放出来,因此该接口仅适用于手机等移动端设备。
  512 + * 手机有两个扬声器:一个是位于手机顶部的听筒,一个是位于手机底部的立体声扬声器。
  513 + * - 设置音频路由为听筒时,声音比较小,只有将耳朵凑近才能听清楚,隐私性较好,适合用于接听电话。
  514 + * - 设置音频路由为扬声器时,声音比较大,不用将手机贴脸也能听清,因此可以实现“免提”的功能。
  515 + */
  516 +typedef NS_ENUM(NSInteger, TRTCAudioRoute) {
  517 +
  518 + /// Speakerphone:使用扬声器播放(即“免提”),扬声器位于手机底部,声音偏大,适合外放音乐。
  519 + TRTCAudioModeSpeakerphone = 0,
  520 +
  521 + /// Earpiece:使用听筒播放,听筒位于手机顶部,声音偏小,适合需要保护隐私的通话场景。
  522 + TRTCAudioModeEarpiece = 1,
  523 +
  524 +};
  525 +
  526 +/**
  527 + * 3.4 声音混响模式
  528 + *
  529 + * 该枚举值应用于设定直播场景中的混响模式,常用于秀场直播中。
  530 + */
  531 +typedef NS_ENUM(NSInteger, TRTCReverbType) {
  532 +
  533 + ///关闭混响
  534 + TRTCReverbType_0 = 0,
  535 +
  536 + /// KTV
  537 + TRTCReverbType_1 = 1,
  538 +
  539 + ///小房间
  540 + TRTCReverbType_2 = 2,
  541 +
  542 + ///大会堂
  543 + TRTCReverbType_3 = 3,
  544 +
  545 + ///低沉
  546 + TRTCReverbType_4 = 4,
  547 +
  548 + ///洪亮
  549 + TRTCReverbType_5 = 5,
  550 +
  551 + ///金属声
  552 + TRTCReverbType_6 = 6,
  553 +
  554 + ///磁性
  555 + TRTCReverbType_7 = 7,
  556 +
  557 +};
  558 +
  559 +/**
  560 + * 3.5 变声类型
  561 + *
  562 + * 该枚举值应用于设定直播场景中的变声模式,常用于秀场直播中。
  563 + */
  564 +typedef NS_ENUM(NSInteger, TRTCVoiceChangerType) {
  565 +
  566 + ///关闭变声
  567 + TRTCVoiceChangerType_0 = 0,
  568 +
  569 + ///熊孩子
  570 + TRTCVoiceChangerType_1 = 1,
  571 +
  572 + ///萝莉
  573 + TRTCVoiceChangerType_2 = 2,
  574 +
  575 + ///大叔
  576 + TRTCVoiceChangerType_3 = 3,
  577 +
  578 + ///重金属
  579 + TRTCVoiceChangerType_4 = 4,
  580 +
  581 + ///感冒
  582 + TRTCVoiceChangerType_5 = 5,
  583 +
  584 + ///外国人
  585 + TRTCVoiceChangerType_6 = 6,
  586 +
  587 + ///困兽
  588 + TRTCVoiceChangerType_7 = 7,
  589 +
  590 + ///死肥仔
  591 + TRTCVoiceChangerType_8 = 8,
  592 +
  593 + ///强电流
  594 + TRTCVoiceChangerType_9 = 9,
  595 +
  596 + ///重机械
  597 + TRTCVoiceChangerType_10 = 10,
  598 +
  599 + ///空灵
  600 + TRTCVoiceChangerType_11 = 11,
  601 +
  602 +};
  603 +
  604 +/**
  605 + * 3.6 系统音量类型(仅适用于移动设备)
  606 + *
  607 + * 现代智能手机中一般都具备两套系统音量类型,即“通话音量”和“媒体音量”。
  608 + * - 通话音量:手机专门为接打电话所设计的音量类型,自带回声抵消(AEC)功能,并且支持通过蓝牙耳机上的麦克风进行拾音,缺点是音质比较一般。
  609 + * 当您通过手机侧面的音量按键下调手机音量时,如果无法将其调至零(也就是无法彻底静音),说明您的手机当前处于通话音量。
  610 + * - 媒体音量:手机专门为音乐场景所设计的音量类型,无法使用系统的 AEC 功能,并且不支持通过蓝牙耳机的麦克风进行拾音,但具备更好的音乐播放效果。
  611 + * 当您通过手机侧面的音量按键下调手机音量时,如果能够将手机音量调至彻底静音,说明您的手机当前处于媒体音量。
  612 + * SDK 目前提供了三种系统音量类型的控制模式:自动切换模式、全程通话音量模式、全程媒体音量模式。
  613 + */
  614 +typedef NS_ENUM(NSInteger, TRTCSystemVolumeType) {
  615 +
  616 + ///自动切换模式:
  617 + ///也被称为“麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。
  618 + ///如果您在 enterRoom 时选择的场景为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom,SDK 会自动使用该模式。
  619 + TRTCSystemVolumeTypeAuto = 0,
  620 +
  621 + ///全程媒体音量:
  622 + ///通话全程使用媒体音量,并不是非常常用的音量类型,适用于对音质要求比较苛刻的音乐场景中。
  623 + ///如果您的用户大都使用外接设备(比如外接声卡)为主,可以使用该模式,否则请慎用。
  624 + TRTCSystemVolumeTypeMedia = 1,
  625 +
  626 + ///全程通话音量:
  627 + ///该方案的优势在于用户在上下麦时音频模块无需切换工作模式,可以做到无缝上下麦,适合于用户需要频繁上下麦的应用场景。
  628 + ///如果您在 enterRoom 时选择的场景为 TRTCAppSceneVideoCall 或 TRTCAppSceneAudioCall,SDK 会自动使用该模式。
  629 + TRTCSystemVolumeTypeVOIP = 2,
  630 +
  631 +};
  632 +
  633 +/////////////////////////////////////////////////////////////////////////////////
  634 +//
  635 +// 更多枚举值定义
  636 +//
  637 +/////////////////////////////////////////////////////////////////////////////////
  638 +
  639 +/**
  640 + * 4.1 Log 级别
  641 + *
  642 + * 不同的日志等级定义了不同的详实程度和日志数量,推荐一般情况下将日志等级设置为:TRTCLogLevelInfo。
  643 + */
  644 +typedef NS_ENUM(NSInteger, TRTCLogLevel) {
  645 +
  646 + ///输出所有级别的 Log
  647 + TRTCLogLevelVerbose = 0,
  648 +
  649 + ///输出 DEBUG,INFO,WARNING,ERROR 和 FATAL 级别的 Log
  650 + TRTCLogLevelDebug = 1,
  651 +
  652 + ///输出 INFO,WARNING,ERROR 和 FATAL 级别的 Log
  653 + TRTCLogLevelInfo = 2,
  654 +
  655 + ///输出WARNING,ERROR 和 FATAL 级别的 Log
  656 + TRTCLogLevelWarn = 3,
  657 +
  658 + ///输出ERROR 和 FATAL 级别的 Log
  659 + TRTCLogLevelError = 4,
  660 +
  661 + ///仅输出 FATAL 级别的 Log
  662 + TRTCLogLevelFatal = 5,
  663 +
  664 + ///不输出任何 SDK Log
  665 + TRTCLogLevelNone = 6,
  666 +
  667 +};
  668 +
  669 +/**
  670 + * 4.2 重力感应开关(仅适用于移动端)
  671 + */
  672 +typedef NS_ENUM(NSInteger, TRTCGSensorMode) {
  673 +
  674 + ///不适配重力感应
  675 + ///该模式是桌面平台上的默认值,该模式下,当前用户发布出去的视频画面不受重力感应方向变化的影响。
  676 + TRTCGSensorMode_Disable = 0,
  677 +
  678 + ///适配重力感应
  679 + ///该模式是移动平台上的默认值,该模式下,当前用户发布出去的视频画面会跟随设备的重力感应方向进行相应的调整,同时本地预览画面保持方向不变。
  680 + /// SDK 目前支持的一种适配模式是:当手机或 Pad 上下颠倒时,为了保证远端用户看到的画面方向正常,SDK 会自动将发布出去的画面上下旋转180度。
  681 + ///如果您的 APP 的界面层开启了重力感应自适应,推荐使用 UIFixLayout 模式。
  682 + TRTCGSensorMode_UIAutoLayout = 1,
  683 +
  684 + ///适配重力感应
  685 + ///该模式下,当前用户发布出去的视频画面会跟随设备的重力感应方向进行相应的调整,同时本地预览画面也会进行相应的旋转适配。
  686 + ///目前支持的一种特性是:当手机或 Pad 上下颠倒时,为了保证远端用户看到的画面方向正常,SDK 会自动将发布出去的画面上下旋转180度。
  687 + ///如果您的 APP 的界面层不支持重力感应自适应,并且希望 SDK 的视频画面能够适配重力感应方向,推荐使用 UIFixLayout 模式。
  688 + TRTCGSensorMode_UIFixLayout = 2,
  689 +
  690 +};
  691 +
  692 +/**
  693 + * 4.3 屏幕分享的目标类型(仅适用于桌面端)
  694 + */
  695 +typedef NS_ENUM(NSInteger, TRTCScreenCaptureSourceType) {
  696 +
  697 + ///未定义
  698 + TRTCScreenCaptureSourceTypeUnknown = -1,
  699 +
  700 + ///该分享目标是某一个应用的窗口
  701 + TRTCScreenCaptureSourceTypeWindow = 0,
  702 +
  703 + ///该分享目标是某一台显示器的屏幕
  704 + TRTCScreenCaptureSourceTypeScreen = 1,
  705 +
  706 +};
  707 +
  708 +/**
  709 + * 4.4 云端混流的排版模式
  710 + *
  711 + * TRTC 的云端混流服务能够将房间中的多路音视频流混合成一路,因此您需要指定画面的排版方案,我们提供了如下几种排版模式:
  712 + */
  713 +typedef NS_ENUM(NSInteger, TRTCTranscodingConfigMode) {
  714 +
  715 + ///未定义
  716 + TRTCTranscodingConfigMode_Unknown = 0,
  717 +
  718 + ///全手动排版模式
  719 + ///该模式下,您需要指定每一路画面的精确排版位置。该模式的自由度最高,但易用性也最差:
  720 + ///- 您需要填写 TRTCTranscodingConfig 中的所有参数,包括每一路画面(TRTCMixUser)的位置坐标。
  721 + ///- 您需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 事件回调,并根据当前房间中各个麦上用户的音视频状态不断地调整 mixUsers 参数。
  722 + TRTCTranscodingConfigMode_Manual = 1,
  723 +
  724 + ///纯音频模式
  725 + ///该模式适用于语音通话(AudioCall)和语音聊天室(VoiceChatRoom)等纯音频的应用场景。
  726 + ///- 您只需要在进入房间后,通过 setMixTranscodingConfig() 接口设置一次,之后 SDK 就会自动把房间内所有上麦用户的声音混流到当前用户的直播流上。
  727 + ///- 您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,只需设置 audioSampleRate、audioBitrate 和 audioChannels 等参数即可。
  728 + TRTCTranscodingConfigMode_Template_PureAudio = 2,
  729 +
  730 + ///预排版模式
  731 + ///最受欢迎的排版模式,因为该模式支持您通过占位符提前对各路画面的位置进行设定,之后 SDK 会自动根据房间中画面的路数动态进行适配调整。
  732 + ///此模式下,您依然需要设置 mixUsers 参数,但可以将 userId 设置为“占位符”,可选的占位符有:
  733 + /// - "$PLACE_HOLDER_REMOTE$" : 指代远程用户的画面,可以设置多个。
  734 + /// - "$PLACE_HOLDER_LOCAL_MAIN$" : 指代本地摄像头画面,只允许设置一个。
  735 + /// - "$PLACE_HOLDER_LOCAL_SUB$" : 指代本地屏幕分享画面,只允许设置一个。
  736 + ///此模式下,您不需要监听 TRTCCloudDelegate 中的 onUserVideoAvailable() 和 onUserAudioAvailable() 回调进行实时调整,
  737 + ///只需要在进房成功后调用一次 setMixTranscodingConfig() 即可,之后 SDK 会自动将真实的 userId 补位到您设置的占位符上。
  738 + TRTCTranscodingConfigMode_Template_PresetLayout = 3,
  739 +
  740 + ///屏幕分享模式
  741 + ///适用于在线教育场景等以屏幕分享为主的应用场景,仅支持 Windows 和 Mac 两个平台的 SDK。
  742 + ///该模式下,SDK 会先根据您通过 videoWidth 和 videoHeight 参数设置的目标分辨率构建一张画布,
  743 + ///- 当老师未开启屏幕分享时,SDK 会将老师的摄像头画面等比例拉伸绘制到该画布上;
  744 + ///- 当老师开启屏幕分享之后,SDK 会将屏幕分享画面绘制到同样的画布上。
  745 + ///此种排版模式的目的是为了确保混流模块的输出分辨率一致,避免课程回放和网页观看的花屏问题(网页播放器不支持可变分辨率)。
  746 + ///同时,连麦学生的声音也会被默认混合到老师的音视频流中。
  747 + ///< br>
  748 + ///由于教学模式下的视频内容以屏幕分享为主,因此同时传输摄像头画面和屏幕分享画面是非常浪费带宽的。
  749 + ///推荐的做法是直接将摄像头画面通过 setLocalVideoRenderCallback 接口自定义绘制到当前屏幕上。
  750 + ///在该模式下,您无需设置 TRTCTranscodingConfig 中的 mixUsers 参数,SDK 不会混合学生的画面,以免干扰屏幕分享的效果。
  751 + ///< br>
  752 + ///您可以将 TRTCTranscodingConfig 中的 width × height 设为 0px × 0px,SDK 会自动根据用户当前屏幕的宽高比计算出一个合适的分辨率:
  753 + ///- 如果老师当前屏幕宽度 <= 1920px,SDK 会使用老师当前屏幕的实际分辨率。
  754 + ///- 如果老师当前屏幕宽度 > 1920px,SDK 会根据当前屏幕宽高比,选择 1920x1080(16:9)、1920x1200(16:10)、1920x1440(4:3) 三种分辨率中的一种。
  755 + TRTCTranscodingConfigMode_Template_ScreenSharing = 4,
  756 +
  757 +};
  758 +
  759 +/**
  760 + * 4.5 媒体录制类型
  761 + *
  762 + * 该枚举类型用于本地媒体录制接口{@link startLocalRecording},用于指定是录制音视频文件还是纯音频文件。
  763 + */
  764 +typedef NS_ENUM(NSUInteger, TRTCRecordType) {
  765 +
  766 + ///仅录制音频
  767 + TRTCRecordTypeAudio = 0,
  768 +
  769 + ///仅录制视频
  770 + TRTCRecordTypeVideo = 1,
  771 +
  772 + ///同时录制音频和视频
  773 + TRTCRecordTypeBoth = 2,
  774 +
  775 +};
  776 +
  777 +/**
  778 + * 4.6 混流输入类型
  779 + */
  780 +typedef NS_ENUM(NSUInteger, TRTCMixInputType) {
  781 +
  782 + ///不指定,SDK 会根据另一个参数 pureAudio 的数值决定混流输入类型
  783 + TRTCMixInputTypeUndefined = 0,
  784 +
  785 + ///混入音频和视频
  786 + TRTCMixInputTypeAudioVideo = 1,
  787 +
  788 + ///只混入视频
  789 + TRTCMixInputTypePureVideo = 2,
  790 +
  791 + ///只混入音频
  792 + TRTCMixInputTypePureAudio = 3,
  793 +
  794 +};
  795 +
  796 +/**
  797 + * 4.7 设备类型(仅适用于桌面平台)
  798 + *
  799 + * 该枚举值用于定义三种类型的音视频设备,即摄像头、麦克风和扬声器,以便让一套设备管理接口可以操控三种不同类型的设备。
  800 + * 自 Ver8.0 版本开始,TRTC 在 TXDeviceManager 中重新定义了 “TXMediaDeviceType” 用于替换老版本中的 “TRTCMediaDeviceType”,
  801 + * 此处仅保留 “TRTCMediaDeviceType” 的定义,用于兼容老版本的客户代码。
  802 + */
  803 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  804 +typedef NS_ENUM(NSInteger, TRTCMediaDeviceType) {
  805 + TRTCMediaDeviceTypeUnknown = -1, ///< undefined device type
  806 + TRTCMediaDeviceTypeAudioInput = 0, ///< microphone
  807 + TRTCMediaDeviceTypeAudioOutput = 1, ///< speaker
  808 + TRTCMediaDeviceTypeVideoCamera = 2, ///< camera
  809 + TRTCMediaDeviceTypeVideoWindow = 3, ///< windows(for screen share)
  810 + TRTCMediaDeviceTypeVideoScreen = 4, ///< screen (for screen share)
  811 +} __attribute__((deprecated("use TXDeviceManager#TXMediaDeviceType instead")));
  812 +
  813 +typedef TXMediaDeviceInfo TRTCMediaDeviceInfo __attribute__((deprecated("use TXDeviceManager#TXMediaDeviceInfo instead")));
  814 +#endif
  815 +
  816 +/**
  817 + * 4.11 音频录制内容类型
  818 + *
  819 + * 该枚举类型用于音频录制接口{@link startAudioRecording},用于指定录制音频的内容。
  820 + */
  821 +typedef NS_ENUM(NSUInteger, TRTCAudioRecordingContent) {
  822 +
  823 + ///录制本地和远端所有音频
  824 + TRTCAudioRecordingContentAll = 0,
  825 +
  826 + ///仅录制本地音频
  827 + TRTCAudioRecordingContentLocal = 1,
  828 +
  829 + ///仅录制远端音频
  830 + TRTCAudioRecordingContentRemote = 2,
  831 +
  832 +};
  833 +
  834 +/////////////////////////////////////////////////////////////////////////////////
  835 +//
  836 +// TRTC 核心类型定义
  837 +//
  838 +/////////////////////////////////////////////////////////////////////////////////
  839 +
  840 +/**
  841 + * 5.1 进房参数
  842 + *
  843 + * 作为 TRTC SDK 的进房参数,只有该参数填写正确,才能顺利进入 roomId 或者 strRoomId 所指定的音视频房间。
  844 + * 由于历史原因,TRTC 支持数字和字符串两种类型的房间号,分别是 roomId 和 strRoomId。
  845 + * 请注意:不要混用 roomId 和 strRoomId,因为它们之间是不互通的,比如数字 123 和字符串 “123” 在 TRTC 看来是两个完全不同的房间。
  846 + */
  847 +@interface TRTCParams : NSObject
  848 +
  849 +///【字段含义】应用标识(必填),腾讯云基于 sdkAppId 完成计费统计。
  850 +///【推荐取值】在 [实时音视频控制台](https://console.cloud.tencent.com/rav/) 创建应用后可以在账号信息页面中得到该 ID。
  851 +@property(nonatomic, assign) UInt32 sdkAppId;
  852 +
  853 +///【字段含义】用户标识(必填),当前用户的 userId,相当于用户名,使用 UTF-8 编码。
  854 +///【推荐取值】如果一个用户在您的帐号系统中的 ID 为“mike”,则 userId 即可设置为“mike”。
  855 +@property(nonatomic, copy, nonnull) NSString *userId;
  856 +
  857 +///【字段含义】用户签名(必填),当前 userId 对应的验证签名,相当于使用云服务的登录密码。
  858 +///【推荐取值】具体计算方法请参见 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。
  859 +@property(nonatomic, copy, nonnull) NSString *userSig;
  860 +
  861 +///【字段含义】数字房间号,在同一个房间里的用户(userId)可以彼此看到对方并进行音视频通话。
  862 +///【推荐取值】取值范围:1 - 4294967294。
  863 +///【特别说明】roomId 与 strRoomId 是互斥的,若您选用 strRoomId,则 roomId 需要填写为0。若两者都填,SDK 将优先选用 roomId。
  864 +///【请您注意】不要混用 roomId 和 strRoomId,因为它们之间是不互通的,比如数字 123 和字符串 “123” 在 TRTC 看来是两个完全不同的房间。
  865 +@property(nonatomic, assign) UInt32 roomId;
  866 +
  867 +///【字段含义】字符串房间号,在同一个房间里的用户(userId)可以彼此看到对方并进行音视频通话。
  868 +///【特别说明】roomId 与 strRoomId 是互斥的,若您选用 strRoomId,则 roomId 需要填写为0。若两者都填,SDK 将优先选用 roomId。
  869 +///【请您注意】不要混用 roomId 和 strRoomId,因为它们之间是不互通的,比如数字 123 和字符串 “123” 在 TRTC 看来是两个完全不同的房间。
  870 +///【推荐取值】限制长度为64字节。以下为支持的字符集范围(共 89 个字符):
  871 +/// - 大小写英文字母(a-zA-Z);
  872 +/// - 数字(0-9);
  873 +/// - 空格、"!"、"#"、"$"、"%"、"&"、"("、")"、"+"、"-"、":"、";"、"<"、"="、"."、">"、"?"、"@"、"["、"]"、"^"、"_"、" {"、"}"、"|"、"~"、","。
  874 +@property(nonatomic, copy, nonnull) NSString *strRoomId;
  875 +
  876 +///【字段含义】直播场景下的角色,仅适用于直播场景({@link TRTCAppSceneLIVE} 和{@link TRTCAppSceneVoiceChatRoom}),通话场景下指定该参数是无效的。
  877 +///【推荐取值】默认值:主播({@link TRTCRoleAnchor})。
  878 +@property(nonatomic, assign) TRTCRoleType role;
  879 +
  880 +///【字段含义】用于指定在腾讯云直播平台上的 streamId(选填),设置之后,您可以在腾讯云直播 CDN 上通过标准拉流方案(FLV或HLS)播放该用户的音视频流。
  881 +///【推荐取值】限制长度为64字节,可以不填写,一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid,这中命名方式容易辨认且不会在您的多个应用中发生冲突。
  882 +///【特殊说明】要使用腾讯云直播 CDN,您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启动自动旁路直播”开关。
  883 +///【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。
  884 +@property(nonatomic, copy, nullable) NSString *streamId;
  885 +
  886 +///【字段含义】云端录制开关(选填),用于指定是否要在云端将该用户的音视频流录制下来。
  887 +///【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。
  888 +///【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
  889 +/// <p>
  890 +/// 方案一:手动录制方案:
  891 +/// 1. 在“[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 云端录制配置”中开启云端录制。
  892 +/// 2. 设置“录制形式”为“手动录制”。
  893 +/// 3. 设置手动录制后,在一个 TRTC 房间中只有设置了 userDefineRecordId 参数的用户才会在云端录制出视频文件,不指定该参数的用户不会产生录制行为。
  894 +/// 4. 云端会以 “userDefineRecordId_起始时间_结束时间” 的格式命名录制下来的文件。
  895 +/// <p>
  896 +/// 方案二:自动录制方案:
  897 +/// 1. 需要在“[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 云端录制配置”中开启云端录制。
  898 +/// 2. 设置“录制形式”为“自动录制”。
  899 +/// 3. 设置自动录制后,在一个 TRTC 房间中的任何一个有音视频上行的用户,均会在云端录制出视频文件。
  900 +/// 4. 文件会以 “userDefineRecordId_起始时间_结束时间” 的格式命名,如果不指定 userDefineRecordId,则文件会以 “streamId_起始时间_结束时间” 命名。
  901 +/// <br>
  902 +@property(nonatomic, copy, nullable) NSString *userDefineRecordId;
  903 +
  904 +///【字段含义】用于权限控制的权限票据(选填),当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。
  905 +///【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。
  906 +@property(nonatomic, copy, nullable) NSString *privateMapKey;
  907 +
  908 +///【字段含义】业务数据字段(选填),部分高级特性才需要用到此字段。
  909 +///【推荐取值】请不要自行设置该字段。
  910 +@property(nonatomic, copy, nullable) NSString *bussInfo;
  911 +@end
  912 +
  913 +/**
  914 + * 5.2 视频编码参数
  915 + *
  916 + * 该设置决定远端用户看到的画面质量,同时也决定了云端录制出的视频文件的画面质量。
  917 + */
  918 +@interface TRTCVideoEncParam : NSObject
  919 +
  920 +///【字段含义】 视频分辨率
  921 +///【特别说明】如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如: 640 × 360 + Portrait = 360 × 640。
  922 +///【推荐取值】
  923 +/// - 手机视频通话:建议选择 360 × 640 及以下分辨率,resMode 选择 Portrait,即竖屏分辨率。
  924 +/// - 手机在线直播:建议选择 540 × 960,resMode 选择 Portrait,即竖屏分辨率。
  925 +/// - 桌面平台(Win + Mac):建议选择 640 × 360 及以上分辨率,resMode 选择 Landscape,即横屏分辨率。
  926 +@property(nonatomic, assign) TRTCVideoResolution videoResolution;
  927 +
  928 +///【字段含义】分辨率模式(横屏分辨率 or 竖屏分辨率)
  929 +///【推荐取值】手机平台(iOS、Android)建议选择 Portrait,桌面平台(Windows、Mac)建议选择 Landscape。
  930 +///【特别说明】如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如: 640 × 360 + Portrait = 360 × 640。
  931 +@property(nonatomic, assign) TRTCVideoResolutionMode resMode;
  932 +
  933 +///【字段含义】视频采集帧率
  934 +///【推荐取值】15fps或20fps。5fps以下,卡顿感明显。10fps以下,会有轻微卡顿感。20fps以上,会浪费带宽(电影的帧率为24fps)。
  935 +///【特别说明】部分 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分主打美颜功能的 Android 手机的前置摄像头的采集帧率可能低于10fps。
  936 +@property(nonatomic, assign) int videoFps;
  937 +
  938 +///【字段含义】目标视频码率,SDK 会按照目标码率进行编码,只有在弱网络环境下才会主动降低视频码率。
  939 +///【推荐取值】请参考本 TRTCVideoResolution 在各档位注释的最佳码率,也可以在此基础上适当调高。
  940 +/// 比如:TRTCVideoResolution_1280_720 对应 1200kbps 的目标码率,您也可以设置为 1500kbps 用来获得更好的观感清晰度。
  941 +///【特别说明】您可以通过同时设置 videoBitrate 和 minVideoBitrate 两个参数,用于约束 SDK 对视频码率的调整范围:
  942 +/// - 如果您追求“弱网络下允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%;
  943 +/// - 如果您追求“弱网络下允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为一个较低的数值(比如 100kbps);
  944 +/// - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 对视频码率的自适应调节能力。
  945 +@property(nonatomic, assign) int videoBitrate;
  946 +
  947 +///【字段含义】最低视频码率,SDK 会在网络不佳的情况下主动降低视频码率以保持流畅度,最低会降至 minVideoBitrate 所设定的数值。
  948 +///【特别说明】 默认值:0,此时最低码率由 SDK 会根据您指定的分辨率,自动计算出合适的数值。
  949 +///【推荐取值】您可以通过同时设置 videoBitrate 和 minVideoBitrate 两个参数,用于约束 SDK 对视频码率的调整范围:
  950 +/// - 如果您追求“弱网络下允许卡顿但要保持清晰”的效果,可以设置 minVideoBitrate 为 videoBitrate 的 60%;
  951 +/// - 如果您追求“弱网络下允许模糊但要保持流畅”的效果,可以设置 minVideoBitrate 为一个较低的数值(比如 100kbps);
  952 +/// - 如果您将 videoBitrate 和 minVideoBitrate 设置为同一个值,等价于关闭 SDK 对视频码率的自适应调节能力。
  953 +@property(nonatomic, assign) int minVideoBitrate;
  954 +
  955 +///【字段含义】是否允许动态调整分辨率(开启后会对云端录制产生影响)。
  956 +///【推荐取值】该功能适用于不需要云端录制的场景,开启后 SDK 会根据当前网络情况,智能选择出一个合适的分辨率,避免出现“大分辨率+小码率”的低效编码模式。
  957 +///【特别说明】默认值:关闭。如有云端录制的需求,请不要开启此功能,因为如果视频分辨率发生变化后,云端录制出的 MP4 在普通的播放器上无法正常播放。
  958 +@property(nonatomic, assign) BOOL enableAdjustRes;
  959 +@end
  960 +
  961 +/**
  962 + * 5.3 网络流控(Qos)参数集
  963 + *
  964 + * 网络流控相关参数,该设置决定 SDK 在弱网络环境下的调控策略(例如:“清晰优先”或“流畅优先”)
  965 + */
  966 +@interface TRTCNetworkQosParam : NSObject
  967 +
  968 +///【字段含义】清晰优先还是流畅优先
  969 +///【推荐取值】清晰优先
  970 +///【特别说明】该参数主要影响 TRTC 在较差网络环境下的音视频表现:
  971 +/// - 流畅优先:即当前网络不足以传输既清晰又流畅的画面时,优先保证画面的流畅性,代价就是画面会比较模糊且伴随有较多的马赛克。
  972 +/// - 清晰优先(默认值):即当前网络不足以传输既清晰又流畅的画面时,优先保证画面的清晰度,代价就是画面会比较卡顿。
  973 +@property(nonatomic, assign) TRTCVideoQosPreference preference;
  974 +
  975 +///【字段含义】流控模式(已废弃)
  976 +///【推荐取值】云端控制
  977 +///【特别说明】请设置为云端控制模式(TRTCQosControlModeServer)
  978 +@property(nonatomic, assign) TRTCQosControlMode controlMode;
  979 +@end
  980 +
  981 +/**
  982 + * 5.4 视频画面的渲染参数
  983 + *
  984 + * 您可以通过设置此参数来控制画面的旋转角度、填充模式和左右镜像模式。
  985 + */
  986 +@interface TRTCRenderParams : NSObject
  987 +
  988 +///【字段含义】图像的顺时针旋转角度
  989 +///【推荐取值】支持90、180以及270旋转角度,默认值:{@link TRTCVideoRotation_0}
  990 +@property(nonatomic) TRTCVideoRotation rotation;
  991 +
  992 +///【字段含义】画面填充模式
  993 +///【推荐取值】填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:{@link TRTCVideoFillMode_Fill}
  994 +@property(nonatomic) TRTCVideoFillMode fillMode;
  995 +
  996 +///【字段含义】画面镜像模式
  997 +///【推荐取值】默认值:{@link TRTCVideoMirrorType_Auto}
  998 +@property(nonatomic) TRTCVideoMirrorType mirrorType;
  999 +
  1000 +@end
  1001 +
  1002 +/**
  1003 + * 5.5 网络质量
  1004 + *
  1005 + * 表征网络质量的好坏,您可以通过该数值在用户界面上展示每个用户的网络质量。
  1006 + */
  1007 +@interface TRTCQualityInfo : NSObject
  1008 +
  1009 +///用户 ID
  1010 +@property(nonatomic, copy, nullable) NSString *userId;
  1011 +
  1012 +///网络质量
  1013 +@property(nonatomic, assign) TRTCQuality quality;
  1014 +@end
  1015 +
  1016 +/**
  1017 + * 5.6 音量大小
  1018 + *
  1019 + * 表征语音音量的评估值,您可以通过该数值在用户界面上展示每个用户的音量大小。
  1020 + */
  1021 +@interface TRTCVolumeInfo : NSObject
  1022 +
  1023 +///说话者的 userId, 如果 userId 为空则代表是当前用户自己。
  1024 +@property(nonatomic, copy, nullable) NSString *userId;
  1025 +
  1026 +///说话者的音量大小, 取值范围[0 - 100]。
  1027 +@property(assign, nonatomic) NSUInteger volume;
  1028 +
  1029 +@end
  1030 +
  1031 +/**
  1032 + * 5.7 测速参数
  1033 + *
  1034 + * 您可以在用户进入房间前通过 {@link startSpeedTest} 接口测试网速(注意:请不要在通话中调用)。
  1035 + */
  1036 +@interface TRTCSpeedTestParams : NSObject
  1037 +
  1038 +///应用标识,请参考 {@link TRTCParams} 中的相关说明。
  1039 +@property(nonatomic) uint32_t sdkAppId;
  1040 +
  1041 +///用户标识,请参考 {@link TRTCParams} 中的相关说明。
  1042 +@property(nonatomic, copy, nonnull) NSString *userId;
  1043 +
  1044 +///用户签名,请参考 {@link TRTCParams} 中的相关说明。
  1045 +@property(nonatomic, copy, nonnull) NSString *userSig;
  1046 +
  1047 +///预期的上行带宽(kbps,取值范围: 10 ~ 5000,为 0 时不测试)。
  1048 +@property(nonatomic) NSInteger expectedUpBandwidth;
  1049 +
  1050 +///预期的下行带宽(kbps,取值范围: 10 ~ 5000,为 0 时不测试)。
  1051 +@property(nonatomic) NSInteger expectedDownBandwidth;
  1052 +@end
  1053 +
  1054 +/**
  1055 + * 5.8 网络测速结果
  1056 + *
  1057 + * 您可以在用户进入房间前通过 {@link startSpeedTest:} 接口进行测速(注意:请不要在通话中调用)。
  1058 + */
  1059 +@interface TRTCSpeedTestResult : NSObject
  1060 +
  1061 +///测试是否成功。
  1062 +@property(nonatomic) BOOL success;
  1063 +
  1064 +///带宽测试错误信息。
  1065 +@property(nonatomic, copy, nonnull) NSString *errMsg;
  1066 +
  1067 +///服务器 IP 地址。
  1068 +@property(nonatomic, copy, nonnull) NSString *ip;
  1069 +
  1070 +///内部通过评估算法测算出的网络质量,更多信息请参见 {@link TRTCQuality}。
  1071 +@property(nonatomic) TRTCQuality quality;
  1072 +
  1073 +///上行丢包率,取值范围是 [0 - 1.0],例如 0.3 表示每向服务器发送 10 个数据包可能会在中途丢失 3 个。
  1074 +@property(nonatomic) float upLostRate;
  1075 +
  1076 +///下行丢包率,取值范围是 [0 - 1.0],例如 0.2 表示每从服务器收取 10 个数据包可能会在中途丢失 2 个。
  1077 +@property(nonatomic) float downLostRate;
  1078 +
  1079 +///延迟(毫秒),指当前设备到 TRTC 服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms。
  1080 +@property(nonatomic) uint32_t rtt;
  1081 +
  1082 +///上行带宽(kbps,-1:无效值)。
  1083 +@property(nonatomic) NSInteger availableUpBandwidth;
  1084 +
  1085 +///下行带宽(kbps,-1:无效值)。
  1086 +@property(nonatomic) NSInteger availableDownBandwidth;
  1087 +@end
  1088 +
  1089 +/**
  1090 + * 5.10 视频帧信息
  1091 + *
  1092 + * TRTCVideoFrame 用来描述一帧视频画面的裸数据,也就是编码前或者解码后的视频画面数据。
  1093 + */
  1094 +@interface TRTCVideoFrame : NSObject
  1095 +
  1096 +///【字段含义】视频的像素格式
  1097 +@property(nonatomic, assign) TRTCVideoPixelFormat pixelFormat;
  1098 +
  1099 +///【字段含义】视频数据结构类型
  1100 +@property(nonatomic, assign) TRTCVideoBufferType bufferType;
  1101 +
  1102 +///【字段含义】bufferType 为 {@link TRTCVideoBufferType_PixelBuffer} 时的视频数据,承载 iOS 平台专用的 PixelBuffer。
  1103 +@property(nonatomic, assign, nullable) CVPixelBufferRef pixelBuffer;
  1104 +
  1105 +///【字段含义】bufferType 为 {@link TRTCVideoBufferType_NSData} 时的视频数据,承载 NSData 类型的内存数据块。
  1106 +@property(nonatomic, retain, nullable) NSData *data;
  1107 +
  1108 +///【字段含义】视频纹理 ID,bufferType 为 {@link TRTCVideoBufferType_Texture} 时的视频数据,承载用于 OpenGL 渲染的纹理数据。
  1109 +@property(nonatomic, assign) GLuint textureId;
  1110 +
  1111 +///【字段含义】视频宽度
  1112 +@property(nonatomic, assign) uint32_t width;
  1113 +
  1114 +///【字段含义】视频高度
  1115 +@property(nonatomic, assign) uint32_t height;
  1116 +
  1117 +///【字段含义】视频帧的时间戳,单位毫秒
  1118 +///【推荐取值】自定义视频采集时可以设置为0。若该参数为0,SDK 会自定填充 timestamp 字段,但请“均匀”地控制 sendCustomVideoData 的调用间隔。
  1119 +@property(nonatomic, assign) uint64_t timestamp;
  1120 +
  1121 +///【字段含义】视频像素的顺时针旋转角度
  1122 +@property(nonatomic, assign) TRTCVideoRotation rotation;
  1123 +
  1124 +@end
  1125 +
  1126 +/**
  1127 + * 5.11 音频帧数据
  1128 + */
  1129 +@interface TRTCAudioFrame : NSObject
  1130 +
  1131 +///【字段含义】音频数据
  1132 +@property(nonatomic, retain, nonnull) NSData *data;
  1133 +
  1134 +///【字段含义】采样率
  1135 +@property(nonatomic, assign) TRTCAudioSampleRate sampleRate;
  1136 +
  1137 +///【字段含义】声道数
  1138 +@property(nonatomic, assign) int channels;
  1139 +
  1140 +///【字段含义】时间戳,单位ms
  1141 +@property(nonatomic, assign) uint64_t timestamp;
  1142 +
  1143 +///【字段含义】音频额外数据,远端用户通过 `onLocalProcessedAudioFrame` 写入的数据会通过该字段回调
  1144 +@property(nonatomic, retain, nullable) NSData *extraData;
  1145 +@end
  1146 +
  1147 +/**
  1148 + * 5.12 云端混流中各路画面的描述信息
  1149 + *
  1150 + * TRTCMixUser 用于指定云端混流中每一路视频画面的位置、大小、图层以及流类型等信息。
  1151 + */
  1152 +@interface TRTCMixUser : NSObject
  1153 +
  1154 +///【字段含义】用户 ID
  1155 +@property(nonatomic, copy, nonnull) NSString *userId;
  1156 +
  1157 +///【字段含义】该路音视频流所在的房间号(设置为空值代表当前用户所在的房间号)
  1158 +@property(nonatomic, copy, nullable) NSString *roomID;
  1159 +
  1160 +///【字段含义】指定该路画面的坐标区域(单位:像素)
  1161 +@property(nonatomic, assign) CGRect rect;
  1162 +
  1163 +///【字段含义】指定该路画面的层级(取值范围:1 - 15,不可重复)
  1164 +@property(nonatomic, assign) int zOrder;
  1165 +
  1166 +///【字段含义】指定该路画面是主路画面({@link TRTCVideoStreamTypeBig})还是辅路画面({@link TRTCVideoStreamTypeSub})。
  1167 +@property(nonatomic) TRTCVideoStreamType streamType;
  1168 +
  1169 +///【字段含义】指定该路流是不是只混合声音
  1170 +///【推荐取值】默认值:NO
  1171 +///【特别说明】已废弃,推荐使用8.5版本开始新引入的字段:inputType。
  1172 +@property(nonatomic, assign) BOOL pureAudio;
  1173 +
  1174 +///【字段含义】指定该路流的混合内容(只混合音频、只混合视频、混合音频和视频),该字段是对 pureAudio 字段的升级。
  1175 +///【推荐取值】默认值:TRTCMixInputTypeUndefined,代表参考 pureAudio 的取值。
  1176 +/// - 如果您是第一次使用 TRTC,之前并没有对 pureAudio 字段进行过设置,您可以根据实际需要设置该字段,不建议您再设置 pureAudio。
  1177 +/// - 如果您之前在老版本中已经使用了 pureAudio 字段,并期望保持其设置,则可以将 inputType 设置为 TRTCMixInputTypeUndefined。
  1178 +@property(nonatomic, assign) TRTCMixInputType inputType;
  1179 +
  1180 +@end
  1181 +
  1182 +/**
  1183 + * 5.13 云端混流的排版布局和转码参数
  1184 + *
  1185 + * 用于指定混流时各路画面的排版位置信息和云端转码的编码参数。
  1186 + */
  1187 +@interface TRTCTranscodingConfig : NSObject
  1188 +
  1189 +///【字段含义】排版模式
  1190 +///【推荐取值】请根据您的业务场景要求自行选择,预排版模式是适用性较好的一种模式。
  1191 +@property(nonatomic, assign) TRTCTranscodingConfigMode mode;
  1192 +
  1193 +///【字段含义】腾讯云直播服务的 AppID
  1194 +///【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 依次单击【应用管理】=>【应用信息】,并在【旁路直播信息】中获取 appid。
  1195 +@property(nonatomic) int appId;
  1196 +
  1197 +///【字段含义】腾讯云直播服务的 bizid
  1198 +///【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 依次单击【应用管理】=>【应用信息】,并在【旁路直播信息】中获取 bizid。
  1199 +@property(nonatomic) int bizId;
  1200 +
  1201 +///【字段含义】指定云端转码的目标分辨率(宽度)
  1202 +///【推荐取值】单位:像素值,推荐值:360,如果你只混合音频流,请将 width 和 height 均设置位 0,否则混流转码后的直播流中会有黑色背景。
  1203 +@property(nonatomic, assign) int videoWidth;
  1204 +
  1205 +///【字段含义】指定云端转码的目标分辨率(高度)
  1206 +///【推荐取值】单位:像素值,推荐值:640,如果你只混合音频流,请将 width 和 height 均设置位 0,否则混流转码后的直播流中会有黑色背景。
  1207 +@property(nonatomic, assign) int videoHeight;
  1208 +
  1209 +///【字段含义】指定云端转码的目标视频码率(kbps)
  1210 +///【推荐取值】如果填0,TRTC 会根据 videoWidth 和 videoHeight 估算出一个合理的码率值,您也可以参考视频分辨率枚举定义中所推荐的码率值(见注释部分)。
  1211 +@property(nonatomic, assign) int videoBitrate;
  1212 +
  1213 +///【字段含义】指定云端转码的目标视频帧率(FPS)
  1214 +///【推荐取值】默认值:15fps,取值范围是 (0,30]。
  1215 +@property(nonatomic, assign) int videoFramerate;
  1216 +
  1217 +///【字段含义】指定云端转码的目标视频关键帧间隔(GOP)
  1218 +///【推荐取值】默认值:2,单位为秒,取值范围是 [1,8]。
  1219 +@property(nonatomic, assign) int videoGOP;
  1220 +
  1221 +///【字段含义】指定混合画面的底色颜色
  1222 +///【推荐取值】默认值:0x000000 代表黑色。格式为十六进制数字,比如:“0x61B9F1” 代表 RGB 分别为(97,158,241)。
  1223 +@property(nonatomic, assign) int backgroundColor;
  1224 +
  1225 +///【字段含义】指定混合画面的背景图片
  1226 +///【推荐取值】默认值:空值,即不设置背景图片。
  1227 +///【特别说明】背景图需要您事先在 “[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 功能配置 => 素材管理” 中单击【新增图片】按钮进行上传。
  1228 +/// 上传成功后可以获得对应的“图片ID”,然后将“图片ID”转换成字符串类型并设置到 backgroundImage 里即可。
  1229 +/// 例如:假设“图片ID” 为 63,可以设置 backgroundImage = @"63";
  1230 +@property(nonatomic, copy, nullable) NSString *backgroundImage;
  1231 +
  1232 +///【字段含义】指定云端转码的目标音频采样率
  1233 +///【推荐取值】默认值:48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。
  1234 +@property(nonatomic, assign) int audioSampleRate;
  1235 +
  1236 +///【字段含义】指定云端转码的目标音频码率
  1237 +///【推荐取值】默认值:64kbps,取值范围是 [32,192]。
  1238 +@property(nonatomic, assign) int audioBitrate;
  1239 +
  1240 +///【字段含义】指定云端转码的音频声道数
  1241 +///【推荐取值】默认值:1,代表单声道。可设定的数值只有两个数字:1-单声道,2-双声道。
  1242 +@property(nonatomic, assign) int audioChannels;
  1243 +
  1244 +///【字段含义】指定云端转码的输出流音频编码类型
  1245 +///【推荐取值】默认值:0,代表LC-AAC。可设定的数值只有三个数字:0 - LC-AAC,1 - HE-AAC,2 - HE-AACv2。
  1246 +///【特别说明】HE-AAC 和 HE-AACv2 支持的输出流音频采样率范围为[48000, 44100, 32000, 24000, 16000]
  1247 +///【特别说明】当音频编码设置为 HE-AACv2 时,只支持输出流音频声道数为双声道。
  1248 +///【特别说明】HE-AAC 和 HE-AACv2 取值仅在输出流为您额外设置的 streamId 上时才生效。
  1249 +@property(nonatomic, assign) int audioCodec;
  1250 +
  1251 +///【字段含义】指定云端混流中每一路视频画面的位置、大小、图层以及流类型等信息
  1252 +///【推荐取值】该字段是一个 TRTCMixUser 类型的数组,数组中的每一个元素都用来代表每一路画面的信息。
  1253 +@property(nonatomic, copy, nonnull) NSArray<TRTCMixUser *> *mixUsers;
  1254 +
  1255 +///【字段含义】输出到 CDN 上的直播流 ID
  1256 +///【推荐取值】默认值:空值,即房间里的多路音视频流最终会混合到接口调用者的那一路音视频流上。
  1257 +/// - 如不设置该参数,SDK 会执行默认逻辑,即房间里的多路音视频流会混合到该接口调用者的那一路音视频流上,也就是 A + B => A。
  1258 +/// - 如您设置该参数,SDK 会将房间里的多路音视频流混合到您指定的直播流上,也就是 A + B => C(C 代表您指定的 streamId)。
  1259 +@property(nonatomic, copy, nullable) NSString *streamId;
  1260 +
  1261 +@end
  1262 +
  1263 +/**
  1264 + * 5.14 向非腾讯云 CDN 上发布音视频流时需设置的转推参数
  1265 + *
  1266 + * TRTC 的后台服务支持通过标准 RTMP 协议,将其中的音视频流发布到第三方直播 CDN 服务商。
  1267 + * 如果您使用腾讯云直播 CDN 服务,可无需关注此参数,直接使用 {@link startPublish} 接口即可。
  1268 + */
  1269 +@interface TRTCPublishCDNParam : NSObject
  1270 +
  1271 +///【字段含义】腾讯云直播服务的 AppID
  1272 +///【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 依次单击【应用管理】=>【应用信息】,并在【旁路直播信息】中获取 appid。
  1273 +@property(nonatomic) int appId;
  1274 +
  1275 +///【字段含义】腾讯云直播服务的 bizid
  1276 +///【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 依次单击【应用管理】=>【应用信息】,并在【旁路直播信息】中获取 bizid。
  1277 +@property(nonatomic) int bizId;
  1278 +
  1279 +///【字段含义】指定该路音视频流在第三方直播服务商的推流地址(RTMP 格式)
  1280 +///【推荐取值】各家服务商的推流地址规则差异较大,请根据目标服务商的要求填写合法的推流 URL,TRTC 的后台服务器会按照您填写的 URL 向第三方服务商推送标准格式音视频流。
  1281 +///【特别说明】推流 URL 必须为 RTMP 格式,必须符合您的目标直播服务商的规范要求,否则目标服务商会拒绝来自 TRTC 后台服务的推流请求。
  1282 +@property(nonatomic, strong, nonnull) NSString *url;
  1283 +
  1284 +///【字段含义】需要转推的 streamId
  1285 +///【推荐取值】默认值:空值。如果不填写,则默认转推调用者的旁路流。
  1286 +@property(nonatomic, strong, nonnull) NSString *streamId;
  1287 +
  1288 +@end
  1289 +
  1290 +/**
  1291 + * 5.15 本地音频文件的录制参数
  1292 + *
  1293 + * 该参数用于在音频录制接口 {@link startAudioRecording} 中指定录制参数。
  1294 + */
  1295 +@interface TRTCAudioRecordingParams : NSObject
  1296 +
  1297 +///【字段含义】录音文件的保存路径(必填)。
  1298 +///【特别说明】该路径需精确到文件名及格式后缀,格式后缀用于决定录音文件的格式,目前支持的格式有 PCM、WAV 和 AAC。
  1299 +/// 例如:假如您指定路径为 "mypath/record/audio.aac",代表您希望 SDK 生成一个 AAC 格式的音频录制文件。
  1300 +/// 请您指定一个有读写权限的合法路径,否则录音文件无法生成。
  1301 +@property(nonatomic, strong, nonnull) NSString *filePath;
  1302 +
  1303 +///【字段含义】音频录制内容类型。
  1304 +///【特别说明】默认录制所有本地和远端音频。
  1305 +@property(nonatomic, assign) TRTCAudioRecordingContent recordingContent;
  1306 +
  1307 +@end
  1308 +
  1309 +/**
  1310 + * 5.16 本地媒体文件的录制参数
  1311 + *
  1312 + * 该参数用于在本地媒体文件的录制接口 {@link startLocalRecording} 中指定录制相关参数。
  1313 + * 接口 startLocalRecording 是接口 startAudioRecording 的能力加强版本,前者可以录制视频文件,后者只能录制音频文件。
  1314 + */
  1315 +@interface TRTCLocalRecordingParams : NSObject
  1316 +
  1317 +///【字段含义】录制的文件地址(必填),请确保路径有读写权限且合法,否则录制文件无法生成。
  1318 +///【特别说明】该路径需精确到文件名及格式后缀,格式后缀用于决定录制出的文件格式,目前支持的格式暂时只有 MP4。
  1319 +/// 例如:假如您指定路径为 "mypath/record/test.mp4",代表您希望 SDK 生成一个 MP4 格式的本地视频文件。
  1320 +/// 请您指定一个有读写权限的合法路径,否则录制文件无法生成。
  1321 +@property(nonatomic, copy, nonnull) NSString *filePath;
  1322 +
  1323 +///【字段含义】媒体录制类型,默认值:TRTCRecordTypeBoth,即同时录制音频和视频。
  1324 +@property(nonatomic, assign) TRTCRecordType recordType;
  1325 +
  1326 +///【字段含义】interval 录制信息更新频率,单位毫秒,有效范围:1000-10000。默认值为-1,表示不回调。
  1327 +@property(nonatomic, assign) int interval;
  1328 +
  1329 +@end
  1330 +
  1331 +/**
  1332 + * 5.17 音效参数(已废弃)
  1333 + *
  1334 + * TRTC 中的“音效”特指一些短暂的音频文件,通常仅有几秒钟的播放时间,比如“鼓掌声”、“欢笑声”等。
  1335 + * 该参数用于在早期版本的音效播放接口 {@link TRTCCloud#playAudioEffect} 中指定音效文件(即短音频文件)的路径和播放次数等。
  1336 + * 在 7.3 版本以后,音效接口已被新的接口 {@link TXAudioEffectManager#startPlayMusic} 所取代。
  1337 + * 您在指定 startPlayMusic 的参数 {@link TXAudioMusicParam} 时,如果将 “isShortFile” 设置为 YES,即为“音效”文件。
  1338 + */
  1339 +@interface TRTCAudioEffectParam : NSObject
  1340 +
  1341 ++ (_Nonnull instancetype)new __attribute__((unavailable("Use -initWith:(int)effectId path:(NSString * )path instead")));
  1342 +- (_Nonnull instancetype)init __attribute__((unavailable("Use -initWith:(int)effectId path:(NSString *)path instead")));
  1343 +
  1344 +///【字段含义】音效 ID
  1345 +///【特别说明】SDK 允许播放多路音效,因此需要音效 ID 进行标记,用于控制音效的开始、停止、音量等。
  1346 +@property(nonatomic, assign) int effectId;
  1347 +
  1348 +///【字段含义】音效文件路径,支持的文件格式:aac, mp3, m4a。
  1349 +@property(nonatomic, copy, nonnull) NSString *path;
  1350 +
  1351 +///【字段含义】循环播放次数
  1352 +///【推荐取值】取值范围为0 - 任意正整数,默认值:0,表示播放音效一次;1表示播放音效两次;以此类推。
  1353 +@property(nonatomic, assign) int loopCount;
  1354 +
  1355 +///【字段含义】音效是否上行
  1356 +///【推荐取值】YES:音效在本地播放的同时,会上行至云端,因此远端用户也能听到该音效;NO:音效不会上行至云端,因此只能在本地听到该音效。默认值:NO
  1357 +@property(nonatomic, assign) BOOL publish;
  1358 +
  1359 +///【字段含义】音效音量
  1360 +///【推荐取值】取值范围为0 - 100;默认值:100
  1361 +@property(nonatomic, assign) int volume;
  1362 +
  1363 +- (_Nonnull instancetype)initWith:(int)effectId path:(NSString *_Nonnull)path;
  1364 +@end
  1365 +
  1366 +/**
  1367 + * 5.18 房间切换参数
  1368 + *
  1369 + * 该参数用于切换房间接口{@link switchRoom},可以让用户从一个房间快速切换到另一个房间。
  1370 + */
  1371 +@interface TRTCSwitchRoomConfig : NSObject
  1372 +
  1373 +///【字段含义】数字房间号码 [选填],在同一个房间内的用户可以看到彼此并能够进行音视频通话。
  1374 +///【推荐取值】取值范围:1 - 4294967294。
  1375 +///【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。
  1376 +@property(nonatomic, assign) UInt32 roomId;
  1377 +
  1378 +///【字段含义】字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并能够进行音视频通话。
  1379 +///【特别说明】roomId 和 strRoomId 必须并且只能填一个。若两者都填,则优先选择 roomId。
  1380 +@property(nonatomic, copy, nullable) NSString *strRoomId;
  1381 +
  1382 +///【字段含义】用户签名 [选填],当前 userId 对应的验证签名,相当于登录密码。
  1383 +/// 如果您在切换房间时不指定新计算出的 userSig,SDK 会继续使用您在进入房间时(enterRoom)时所指定的 userSig。
  1384 +/// 这就需要您必须保证旧的 userSig 在切换房间的那一刻仍在签名允许的效期内,否则会导致房间切换失败。
  1385 +///【推荐取值】具体计算方法请参考 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。
  1386 +@property(nonatomic, copy, nullable) NSString *userSig;
  1387 +
  1388 +///【字段含义】用于权限控制的权限票据(选填),当您希望某个房间只能让特定的 userId 进入时,需要使用 privateMapKey 进行权限保护。
  1389 +///【推荐取值】仅建议有高级别安全需求的客户使用,更多详情请参见 [进房权限保护](https://cloud.tencent.com/document/product/647/32240)。
  1390 +@property(nonatomic, copy, nullable) NSString *privateMapKey;
  1391 +
  1392 +@end
  1393 +
  1394 +/**
  1395 + * 5.19 音频自定义回调的格式参数
  1396 + *
  1397 + * 该参数用于在音频自定义回调相关的接口中,设置 SDK 回调出来的音频数据的相关格式(包括采样率、声道数等)。
  1398 + */
  1399 +@interface TRTCAudioFrameDelegateFormat : NSObject
  1400 +
  1401 +///【字段含义】采样率
  1402 +///【推荐取值】默认值:48000Hz。支持 16000, 32000, 44100, 48000。
  1403 +@property(nonatomic, assign) TRTCAudioSampleRate sampleRate;
  1404 +
  1405 +///【字段含义】声道数
  1406 +///【推荐取值】默认值:1,代表单声道。可设定的数值只有两个数字:1-单声道,2-双声道。
  1407 +@property(nonatomic, assign) int channels;
  1408 +
  1409 +///【字段含义】采样点数
  1410 +///【推荐取值】取值必须是 sampleRate/100 的整数倍。
  1411 +@property(nonatomic, assign) int samplesPerCall;
  1412 +
  1413 +@end
  1414 +
  1415 +/**
  1416 + * 5.21 屏幕分享的目标信息(仅适用于桌面系统)
  1417 + *
  1418 + * 在用户进行屏幕分享时,可以选择抓取整个桌面,也可以仅抓取某个程序的窗口。
  1419 + * TRTCScreenCaptureSourceInfo 用于描述待分享目标的信息,包括 ID、名称、缩略图等,该结构体中的字段信息均是只读的。
  1420 + */
  1421 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  1422 +@interface TRTCScreenCaptureSourceInfo : NSObject
  1423 +
  1424 +///【字段含义】采集源类型(是分享整个屏幕?还是分享某个窗口?)
  1425 +@property(assign, nonatomic) TRTCScreenCaptureSourceType type;
  1426 +
  1427 +///【字段含义】采集源的ID,对于窗口,该字段代表窗口的 ID;对于屏幕,该字段代表显示器的 ID。
  1428 +@property(copy, nonatomic, nullable) NSString *sourceId;
  1429 +
  1430 +///【字段含义】采集源名称(采用 UTF8 编码)
  1431 +@property(copy, nonatomic, nullable) NSString *sourceName;
  1432 +
  1433 +///【字段含义】窗口的扩展信息
  1434 +@property(nonatomic, strong, nullable) NSDictionary *extInfo;
  1435 +
  1436 +///【字段含义】分享窗口的缩略图
  1437 +@property(nonatomic, readonly, nullable) NSImage *thumbnail;
  1438 +
  1439 +///【字段含义】分享窗口的图标
  1440 +@property(nonatomic, readonly, nullable) NSImage *icon;
  1441 +
  1442 +@end
  1443 +#endif
  1444 +
  1445 +/**
  1446 + * 5.24 远端音频流智能并发播放策略的参数
  1447 + *
  1448 + * 该参数用于设置远端音频流智能并发播放策略。
  1449 + */
  1450 +@interface TRTCAudioParallelParams : NSObject
  1451 +
  1452 +///【字段含义】最大并发播放数。默认值:0
  1453 +///如果 maxCount > 0,且实际人数 > maxCount,会实时智能选出 maxCount 路数据进行播放,这会极大的降低性能消耗。
  1454 +///如果 maxCount = 0,SDK 不限制并发播放数,在上麦人数比较多的房间可能会引发性能问题。
  1455 +@property(assign, nonatomic) UInt32 maxCount;
  1456 +
  1457 +///【字段含义】指定用户必定能并发播放。
  1458 +///【特殊说明】指定必定并发播放的用户 ID 列表。这些用户不参与智能选择。
  1459 +/// includeUsers 的数量必须小于 maxCount,否则本次并发播放设置失效。
  1460 +/// includeUsers 仅在 maxCount > 0 时有效。当 includeUsers 生效时,参与智能并发选择的最大播放数 = maxCount - 有效 includeUsers 的数量。
  1461 +@property(nonatomic, strong, nullable) NSArray<NSString *> *includeUsers;
  1462 +
  1463 +@end
  1464 +
  1465 +/// @}
  1 +/**
  2 + * Module: TRTCCloudDelegate @ TXLiteAVSDK
  3 + * Function: 腾讯云实时音视频的事件回调接口
  4 + */
  5 +/// @defgroup TRTCCloudDelegate_ios TRTCCloudDelegate
  6 +/// 腾讯云实时音视频的事件回调接口
  7 +/// @{
  8 +#import <Foundation/Foundation.h>
  9 +#import "TRTCCloudDef.h"
  10 +#import "TXLiteAVCode.h"
  11 +
  12 +NS_ASSUME_NONNULL_BEGIN
  13 +
  14 +@class TRTCCloud;
  15 +@class TRTCStatistics;
  16 +
  17 +@protocol TRTCCloudDelegate <NSObject>
  18 +@optional
  19 +
  20 +/////////////////////////////////////////////////////////////////////////////////
  21 +//
  22 +// 错误和警告事件
  23 +//
  24 +/////////////////////////////////////////////////////////////////////////////////
  25 +/// @name 错误和警告事件
  26 +/// @{
  27 +
  28 +/**
  29 + * 1.1 错误事件回调
  30 + *
  31 + * 错误事件,表示 SDK 抛出的不可恢复的错误,比如进入房间失败或设备开启失败等。
  32 + * 参考文档:[错误码表](https://cloud.tencent.com/document/product/647/32257)
  33 + *
  34 + * @param errCode 错误码
  35 + * @param errMsg 错误信息
  36 + * @param extInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
  37 + */
  38 +- (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary *)extInfo;
  39 +
  40 +/**
  41 + * 1.2 警告事件回调
  42 + *
  43 + * 警告事件,表示 SDK 抛出的提示性问题,比如视频出现卡顿或 CPU 使用率太高等。
  44 + * 参考文档:[错误码表](https://cloud.tencent.com/document/product/647/32257)
  45 + *
  46 + * @param warningCode 警告码
  47 + * @param warningMsg 警告信息
  48 + * @param extInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
  49 + */
  50 +- (void)onWarning:(TXLiteAVWarning)warningCode warningMsg:(nullable NSString *)warningMsg extInfo:(nullable NSDictionary *)extInfo;
  51 +
  52 +/// @}
  53 +/////////////////////////////////////////////////////////////////////////////////
  54 +//
  55 +// 房间相关事件回调
  56 +//
  57 +/////////////////////////////////////////////////////////////////////////////////
  58 +/// @name 房间相关事件回调
  59 +/// @{
  60 +
  61 +/**
  62 + * 2.1 进入房间成功与否的事件回调
  63 + *
  64 + * 调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 TRTCCloudDelegate 的 onEnterRoom(result) 回调:
  65 + * - 如果加入成功,回调 result 会是一个正数(result > 0),代表进入房间所消耗的时间,单位是毫秒(ms)。
  66 + * - 如果加入失败,回调 result 会是一个负数(result < 0),代表失败原因的错误码。
  67 + * 进房失败的错误码含义请参见[错误码表](https://cloud.tencent.com/document/product/647/32257)。
  68 + *
  69 + * @note
  70 + * 1. 在 Ver6.6 之前的版本,只有进房成功会抛出 onEnterRoom(result) 回调,进房失败由 onError() 回调抛出。
  71 + * 2. 在 Ver6.6 之后的版本:无论进房成功或失败,均会抛出 onEnterRoom(result) 回调,同时进房失败也会有 onError() 回调抛出。
  72 + *
  73 + * @param result result > 0 时为进房耗时(ms),result < 0 时为进房错误码。
  74 + */
  75 +- (void)onEnterRoom:(NSInteger)result;
  76 +
  77 +/**
  78 + * 2.2 离开房间的事件回调
  79 + *
  80 + * 调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。
  81 + * 待 SDK 占用的所有资源释放完毕后,SDK 会抛出 onExitRoom() 回调通知到您。
  82 + *
  83 + * 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。
  84 + * 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。
  85 + *
  86 + * @param reason 离开房间原因,0:主动调用 exitRoom 退出房间;1:被服务器踢出当前房间;2:当前房间整个被解散。
  87 + */
  88 +- (void)onExitRoom:(NSInteger)reason;
  89 +
  90 +/**
  91 + * 2.3 切换角色的事件回调
  92 + *
  93 + * 调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程,
  94 + * 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。
  95 + *
  96 + * @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
  97 + * @param errMsg 错误信息。
  98 + */
  99 +- (void)onSwitchRole:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  100 +
  101 +/**
  102 + * 2.4 切换房间的结果回调
  103 + *
  104 + * 调用 TRTCCloud 中的 switchRoom() 接口可以让用户快速地从一个房间切换到另一个房间,
  105 + * 待 SDK 切换完成后,会抛出 onSwitchRoom() 事件回调。
  106 + *
  107 + * @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
  108 + * @param errMsg 错误信息。
  109 + */
  110 +- (void)onSwitchRoom:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  111 +
  112 +/**
  113 + * 2.5 请求跨房通话的结果回调
  114 + *
  115 + * 调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。
  116 + * 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功,
  117 + * 如果成功,两个房间中的所有用户都会收到来自另一个房间中的 PK 主播的 onUserVideoAvailable() 回调。
  118 + *
  119 + * @param userId 要跨房通话的另一个房间中的主播的用户 ID。
  120 + * @param errCode 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
  121 + * @param errMsg 错误信息。
  122 + */
  123 +- (void)onConnectOtherRoom:(NSString *)userId errCode:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  124 +
  125 +/**
  126 + * 2.6 结束跨房通话的结果回调
  127 + */
  128 +- (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  129 +
  130 +/// @}
  131 +/////////////////////////////////////////////////////////////////////////////////
  132 +//
  133 +// 用户相关事件回调
  134 +//
  135 +/////////////////////////////////////////////////////////////////////////////////
  136 +/// @name 用户相关事件回调
  137 +/// @{
  138 +
  139 +/**
  140 + * 3.1 有用户加入当前房间
  141 + *
  142 + * 出于性能方面的考虑,在 TRTC 两种不同的应用场景(即 AppScene,在 enterRoom 时通过第二个参数指定)下,该通知的行为会有差别:
  143 + * - 直播类场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景下的用户区分主播和观众两种角色,只有主播进入房间时才会触发该通知,观众进入房间时不会触发该通知。
  144 + * - 通话类场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下的用户没有角色的区分(可认为都是主播),任何用户进入房间都会触发该通知。
  145 + *
  146 + * @note
  147 + * 1. 事件回调 onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的“用户列表”,有此事件回调不代表一定有视频画面。
  148 + * 2. 如果需要显示远程画面,请监听代表某个用户是否有视频画面的 onUserVideoAvailable() 事件回调。
  149 + * @param userId 远端用户的用户标识
  150 + */
  151 +- (void)onRemoteUserEnterRoom:(NSString *)userId;
  152 +
  153 +/**
  154 + * 3.2 有用户离开当前房间
  155 + *
  156 + * 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景(即 AppScene,在 enterRoom 时通过第二个参数指定)下,该通知的行为会有差别:
  157 + * - 直播类场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。
  158 + * - 通话类场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。
  159 + *
  160 + * @param userId 远端用户的用户标识
  161 + * @param reason 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。
  162 + */
  163 +- (void)onRemoteUserLeaveRoom:(NSString *)userId reason:(NSInteger)reason;
  164 +
  165 +/**
  166 + * 3.3 某远端用户发布/取消了主路视频画面
  167 + *
  168 + * “主路画面”一般被用于承载摄像头画面。当您收到 onUserVideoAvailable(userId, YES) 通知时,表示该路画面已经有可播放的视频帧到达。
  169 + * 此时,您需要调用 {@link startRemoteView} 接口订阅该用户的远程画面,订阅成功后,您会继续收到该用户的首帧画面渲染回调 onFirstVideoFrame(userid)。
  170 + *
  171 + * 当您收到 onUserVideoAvailable(userId, NO) 通知时,表示该路远程画面已经被关闭,关闭的原因可能是该用户调用了 {@link muteLocalVideo} 或 {@link stopLocalPreview}。
  172 + *
  173 + * @param userId 远端用户的用户标识
  174 + * @param available 该用户是否发布(或取消发布)了主路视频画面,YES: 发布;NO:取消发布。
  175 + */
  176 +- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available;
  177 +
  178 +/**
  179 + * 3.4 某远端用户发布/取消了辅路视频画面
  180 + *
  181 + * “辅路画面”一般被用于承载屏幕分享的画面。当您收到 onUserSubStreamAvailable(userId, YES) 通知时,表示该路画面已经有可播放的视频帧到达。
  182 + * 此时,您需要调用 {@link startRemoteSubStreamView} 接口订阅该用户的远程画面,订阅成功后,您会继续收到该用户的首帧画面渲染回调 onFirstVideoFrame(userid)。
  183 + *
  184 + * @note 显示辅路画面使用的函数是 {@link startRemoteSubStreamView} 而非 {@link startRemoteView}。
  185 + *
  186 + * @param userId 远端用户的用户标识
  187 + * @param available 该用户是否发布(或取消发布)了辅路视频画面,YES: 发布;NO:取消发布。
  188 + */
  189 +- (void)onUserSubStreamAvailable:(NSString *)userId available:(BOOL)available;
  190 +
  191 +/**
  192 + * 3.5 某远端用户发布/取消了自己的音频
  193 + *
  194 + * 当您收到 onUserAudioAvailable(userId, YES) 通知时,表示该用户发布了自己的声音,此时 SDK 的表现为:
  195 + * - 在自动订阅模式下,您无需做任何操作,SDK 会自动播放该用户的声音。
  196 + * - 在手动订阅模式下,您可以通过 {@link muteRemoteAudio}(userid, NO) 来播放该用户的声音。
  197 + *
  198 + * @note SDK 默认使用自动订阅模式,您可以通过 {@link setDefaultStreamRecvMode} 设置为手动订阅,但需要在您进入房间之前调用才生效。
  199 + *
  200 + * @param userId 远端用户的用户标识
  201 + * @param available 该用户是否发布(或取消发布)了自己的音频,YES: 发布;NO:取消发布。
  202 + */
  203 +- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available;
  204 +
  205 +/**
  206 + * 3.6 SDK 开始渲染自己本地或远端用户的首帧画面
  207 + *
  208 + * SDK 会在渲染自己本地或远端用户的首帧画面时抛出该事件,您可以通过回调事件中的 userId 参数来判断事件来自于“本地”还是来自于“远端”。
  209 + * - 如果 userId 为空值,代表 SDK 已经开始渲染自己本地的视频画面,不过前提是您已经调用了 {@link startLocalPreview} 或 {@link startScreenCapture}。
  210 + * - 如果 userId 不为空,代表 SDK 已经开始渲染远端用户的视频画面,不过前提是您已经调用了 {@link startRemoteView} 订阅了该用户的视频画面。
  211 + *
  212 + * @note
  213 + * 1. 只有当您调用了 {@link startLocalPreview} 或 {@link startScreenCapture} 之后,才会触发自己本地的首帧画面事件回调。
  214 + * 2. 只有当您调用了 {@link startRemoteView} 或 {@link startRemoteSubStreamView} 之后,才会触发远端用户的首帧画面事件回调。
  215 + *
  216 + * @param userId 本地或远端的用户标识,如果 userId 为空值代表自己本地的首帧画面已到来,userId 不为空则代表远端用户的首帧画面已到来。
  217 + * @param streamType 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。
  218 + * @param width 画面的宽度。
  219 + * @param height 画面的高度。
  220 + */
  221 +- (void)onFirstVideoFrame:(NSString *)userId streamType:(TRTCVideoStreamType)streamType width:(int)width height:(int)height;
  222 +
  223 +/**
  224 + * 3.7 SDK 开始播放远端用户的首帧音频
  225 + *
  226 + * SDK 会在播放远端用户的首帧音频时抛出该事件,本地音频的首帧事件暂不抛出。
  227 + *
  228 + * @param userId 远端用户的用户标识
  229 + */
  230 +- (void)onFirstAudioFrame:(NSString *)userId;
  231 +
  232 +/**
  233 + * 3.8 自己本地的首个视频帧已被发布出去
  234 + *
  235 + * 当您成功进入房间并通过 {@link startLocalPreview} 或 {@link startScreenCapture} 开启本地视频采集之后(开启采集和进入房间的先后顺序无影响),
  236 + * SDK 就会开始进行视频编码,并通过自身的网络模块向云端发布自己本地的视频数据。
  237 + * 当 SDK 成功地向云端送出自己的第一帧视频数据帧以后,就会抛出 onSendFirstLocalVideoFrame 事件回调。
  238 + *
  239 + * @param streamType 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。
  240 + */
  241 +- (void)onSendFirstLocalVideoFrame:(TRTCVideoStreamType)streamType;
  242 +
  243 +/**
  244 + * 3.9 自己本地的首个音频帧已被发布出去
  245 + *
  246 + * 当您成功进入房间并通过 {@link startLocalAudio} 开启本地音频采集之后(开启采集和进入房间的先后顺序无影响),
  247 + * SDK 就会开始进行音频编码,并通过自身的网络模块向云端发布自己本地的音频数据。
  248 + * 当 SDK 成功地向云端送出自己的第一帧音频数据帧以后,就会抛出 onSendFirstLocalAudioFrame 事件回调。
  249 + */
  250 +- (void)onSendFirstLocalAudioFrame;
  251 +
  252 +/**
  253 + * 3.10 远端视频状态变化的事件回调
  254 + *
  255 + * 您可以通过此事件回调获取远端每一路画面的播放状态(包括 Playing、Loading 和 Stopped 三种状态),从而进行相应的 UI 展示。
  256 + * @param userId 用户标识
  257 + * @param streamType 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。
  258 + * @param status 视频状态:包括 Playing、Loading 和 Stopped 三种状态。
  259 + * @param reason 视频状态改变的原因
  260 + * @param extrainfo 额外信息
  261 + */
  262 +- (void)onRemoteVideoStatusUpdated:(NSString *)userId streamType:(TRTCVideoStreamType)streamType streamStatus:(TRTCAVStatusType)status reason:(TRTCAVStatusChangeReason)reason extrainfo:(nullable NSDictionary *)info;
  263 +
  264 +/// @}
  265 +/////////////////////////////////////////////////////////////////////////////////
  266 +//
  267 +// 网络和技术指标统计回调
  268 +//
  269 +/////////////////////////////////////////////////////////////////////////////////
  270 +/// @name 网络和技术指标统计回调
  271 +/// @{
  272 +
  273 +/**
  274 + * 4.1 网络质量的实时统计回调
  275 + *
  276 + * 该统计回调每间隔2秒抛出一次,用于通知 SDK 感知到的当前网络的上行和下行质量。
  277 + * SDK 会使用一组内嵌的自研算法对当前网络的延迟高低、带宽大小以及稳定情况进行评估,并计算出一个的评估结果:
  278 + * 如果评估结果为 1(Excellent) 代表当前的网络情况非常好,如果评估结果为 6(Down)代表当前网络无法支撑 TRTC 的正常通话。
  279 + *
  280 + * @note 回调参数 localQuality 和 remoteQuality 中的 userId 如果为空置,代表本组数据统计的是自己本地的网络质量,否则是代表远端用户的网络质量。
  281 + *
  282 + * @param localQuality 上行网络质量
  283 + * @param remoteQuality 下行网络质量
  284 + */
  285 +- (void)onNetworkQuality:(TRTCQualityInfo *)localQuality remoteQuality:(NSArray<TRTCQualityInfo *> *)remoteQuality;
  286 +
  287 +/**
  288 + * 4.2 音视频技术指标的实时统计回调
  289 + *
  290 + * 该统计回调每间隔2秒抛出一次,用于通知 SDK 内部音频、视频以及网络相关的专业技术指标,这些信息在 {@link TRTCStatistics} 均有罗列:
  291 + * - 视频统计信息:视频的分辨率(resolution)、帧率(FPS)和比特率(bitrate)等信息。
  292 + * - 音频统计信息:音频的采样率(samplerate)、声道(channel)和比特率(bitrate)等信息。
  293 + * - 网络统计信息:SDK 和云端一次往返(SDK => Cloud => SDK)的网络耗时(rtt)、丢包率(loss)、上行流量(sentBytes)和下行流量(receivedBytes)等信息。
  294 + *
  295 + * @note 如果您只需要获知当前网络质量的好坏,并不需要花太多时间研究本统计回调,更推荐您使用 {@link onNetworkQuality} 来解决问题。
  296 + * @param statistics 统计数据,包括自己本地的统计信息和远端用户的统计信息,详情请参考 {@link TRTCStatistics}。
  297 + */
  298 +- (void)onStatistics:(TRTCStatistics *)statistics;
  299 +
  300 +/**
  301 + * 4.3 网速测试的结果回调
  302 + *
  303 + * 该统计回调由 {@link startSpeedTest:} 触发。
  304 + *
  305 + * @param result 网速测试数据数据,包括丢包、往返延迟、上下行的带宽速率,详情请参考 {@link TRTCSpeedTestResult}。
  306 + */
  307 +- (void)onSpeedTestResult:(TRTCSpeedTestResult *)result;
  308 +
  309 +/// @}
  310 +/////////////////////////////////////////////////////////////////////////////////
  311 +//
  312 +// 与云端连接情况的事件回调
  313 +//
  314 +/////////////////////////////////////////////////////////////////////////////////
  315 +/// @name 与云端连接情况的事件回调
  316 +/// @{
  317 +
  318 +/**
  319 + * 5.1 SDK 与云端的连接已经断开
  320 + *
  321 + * SDK 会在跟云端的连接断开时抛出此事件回调,导致断开的原因大多是网络不可用或者网络切换所致,比如用户在通话中走进电梯时就可能会遇到此事件。
  322 + * 在抛出此事件之后,SDK 会努力跟云端重新建立连接,重连过程中会抛出 {@link onTryToReconnect},连接恢复后会抛出 {@link onConnectionRecovery} 。
  323 + * 所以,SDK 会在如下三个连接相关的事件中按如下规律切换:
  324 + * <pre>
  325 + * [onConnectionLost] =====> [onTryToReconnect] =====> [onConnectionRecovery]
  326 + * /|\ |
  327 + * |------------------------------------------------------|
  328 + * </pre>
  329 + */
  330 +- (void)onConnectionLost;
  331 +
  332 +/**
  333 + * 5.2 SDK 正在尝试重新连接到云端
  334 + *
  335 + * SDK 会在跟云端的连接断开时抛出 {@link onConnectionLost},之后会努力跟云端重新建立连接并抛出本事件,连接恢复后会抛出 {@link onConnectionRecovery}。
  336 + */
  337 +- (void)onTryToReconnect;
  338 +
  339 +/**
  340 + * 5.3 SDK 与云端的连接已经恢复
  341 + *
  342 + * SDK 会在跟云端的连接断开时抛出 {@link onConnectionLost},之后会努力跟云端重新建立连接并抛出{@link onTryToReconnect},连接恢复后会抛出本事件回调。
  343 + */
  344 +- (void)onConnectionRecovery;
  345 +
  346 +/// @}
  347 +/////////////////////////////////////////////////////////////////////////////////
  348 +//
  349 +// 硬件设备相关事件回调
  350 +//
  351 +/////////////////////////////////////////////////////////////////////////////////
  352 +/// @name 硬件设备相关事件回调
  353 +/// @{
  354 +
  355 +/**
  356 + * 6.1 摄像头准备就绪
  357 + *
  358 + * 当您调用 {@link startLocalPreivew} 之后,SDK 会尝试启动摄像头,如果摄像头能够启动成功就会抛出本事件。
  359 + * 如果启动失败,大概率是因为当前应用没有获得访问摄像头的权限,或者摄像头当前正在被其他程序独占使用中。
  360 + * 您可以通过捕获 {@link onError} 事件回调获知这些异常情况并通过 UI 界面提示用户。
  361 + */
  362 +- (void)onCameraDidReady;
  363 +
  364 +/**
  365 + * 6.2 麦克风准备就绪
  366 + *
  367 + * 当您调用 {@link startLocalAudio} 之后,SDK 会尝试启动麦克风,如果麦克风能够启动成功就会抛出本事件。
  368 + * 如果启动失败,大概率是因为当前应用没有获得访问麦克风的权限,或者麦克风当前正在被其他程序独占使用中。
  369 + * 您可以通过捕获 {@link onError} 事件回调获知这些异常情况并通过 UI 界面提示用户。
  370 + */
  371 +- (void)onMicDidReady;
  372 +
  373 +/**
  374 + * 6.3 当前音频路由发生变化(仅适用于移动设备)
  375 + *
  376 + * 所谓“音频路由”,是指声音是从手机的扬声器还是从听筒中播放出来,音频路由变化也就是声音的播放位置发生了变化。
  377 + * - 当音频路由为听筒时,声音比较小,只有将耳朵凑近才能听清楚,隐私性较好,适合用于接听电话。
  378 + * - 当音频路由为扬声器时,声音比较大,不用将手机贴脸也能听清,因此可以实现“免提”的功能。
  379 + *
  380 + * @param route 音频路由,即声音由哪里输出(扬声器、听筒)。
  381 + * @param fromRoute 变更前的音频路由。
  382 + */
  383 +#if TARGET_OS_IPHONE
  384 +- (void)onAudioRouteChanged:(TRTCAudioRoute)route fromRoute:(TRTCAudioRoute)fromRoute;
  385 +#endif
  386 +
  387 +/**
  388 + * 6.4 音量大小的反馈回调
  389 + *
  390 + * SDK 可以评估每一路音频的音量大小,并每隔一段时间抛出该事件回调,您可以根据音量大小在 UI 上做出相应的提示,比如“波形图”或“音量槽”。
  391 + * 要完成这个功能, 您需要先调用 {@link enableAudioVolumeEvaluation} 开启这个能力并设定事件抛出的时间间隔。
  392 + * 需要补充说明的是,无论当前房间中是否有人说话,SDK 都会按照您设定的时间间隔定时抛出此事件回调,只不过当没有人说话时,userVolumes 为空,totalVolume 为 0。
  393 + *
  394 + * @note userVolumes 为一个数组,对于数组中的每一个元素,当 userId 为空时表示本地麦克风采集的音量大小,当 userId 不为空时代表远端用户的音量大小。
  395 + *
  396 + * @param userVolumes 是一个数组,用于承载所有正在说话的用户的音量大小,取值范围 0 - 100。
  397 + * @param totalVolume 所有远端用户的总音量大小, 取值范围 0 - 100。
  398 + */
  399 +- (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume;
  400 +
  401 +/**
  402 + * 6.5 本地设备的通断状态发生变化(仅适用于桌面系统)
  403 + *
  404 + * 当本地设备(包括摄像头、麦克风以及扬声器)被插入或者拔出时,SDK 便会抛出此事件回调。
  405 + *
  406 + * @param deviceId 设备 ID
  407 + * @param deviceType 设备类型
  408 + * @param state 通断状态,0:设备断开;1:设备连接。
  409 + */
  410 +#if !TARGET_OS_IPHONE && TARGET_OS_MAC
  411 +- (void)onDevice:(NSString *)deviceId type:(TRTCMediaDeviceType)deviceType stateChanged:(NSInteger)state;
  412 +#endif
  413 +
  414 +/**
  415 + * 6.6 当前麦克风的系统采集音量发生变化
  416 + *
  417 + * 在 Mac 或 Windows 这样的桌面操作系统上,用户可以在设置中心找到声音相关的设置面板,并设置麦克风的采集音量大小。
  418 + * 用户将麦克风的采集音量设置得越大,麦克风采集到的声音的原始音量也就会越大,反之就会越小。
  419 + * 在有些型号的键盘以及笔记本电脑上,用户还可以通过按下“禁用麦克风”按钮(图标是一个话筒上上叠加了一道代表禁用的斜线)来将麦克风静音。
  420 + *
  421 + * 当用户通过系统设置界面或者通过键盘上的快捷键设定操作系统的麦克风采集音量时,SDK 便会抛出此事件。
  422 + *
  423 + * @note 您需要调用 {@link enableAudioVolumeEvaluation} 接口并设定(interval>0)开启次事件回调,设定(interval == 0)关闭此事件回调。
  424 + *
  425 + * @param volume 系统采集音量,取值范围 0 - 100,用户可以在系统的声音设置面板上进行拖拽调整。
  426 + * @param muted 麦克风是否被用户禁用了:YES 被禁用,NO 被启用。
  427 + */
  428 +#if !TARGET_OS_IPHONE && TARGET_OS_MAC
  429 +- (void)onAudioDeviceCaptureVolumeChanged:(NSInteger)volume muted:(BOOL)muted;
  430 +#endif
  431 +
  432 +/**
  433 + * 6.7 当前系统的播放音量发生变化
  434 + *
  435 + * 在 Mac 或 Windows 这样的桌面操作系统上,用户可以在设置中心找到声音相关的设置面板,并设置系统的播放音量大小。
  436 + * 在有些型号的键盘以及笔记本电脑上,用户还可以通过按下“静音”按钮(图标是一个喇叭上叠加了一道代表禁用的斜线)来将系统静音。
  437 + *
  438 + * 当用户通过系统设置界面或者通过键盘上的快捷键设定操作系统的播放音量时,SDK 便会抛出此事件。
  439 + *
  440 + * @note 您需要调用 {@link enableAudioVolumeEvaluation} 接口并设定(interval>0)开启次事件回调,设定(interval == 0)关闭此事件回调。
  441 + *
  442 + * @param volume 系统播放音量,取值范围 0 - 100,用户可以在系统的声音设置面板上进行拖拽调整。
  443 + * @param muted 系统是否被用户静音了:YES 被静音,NO 已恢复。
  444 + */
  445 +#if !TARGET_OS_IPHONE && TARGET_OS_MAC
  446 +- (void)onAudioDevicePlayoutVolumeChanged:(NSInteger)volume muted:(BOOL)muted;
  447 +#endif
  448 +
  449 +/**
  450 + * 6.8 系统声音采集是否被成功开启的事件回调(仅适用于 Mac 系统)
  451 + *
  452 + * 在 Mac 系统上,您可以通过调用 {@link startSystemAudioLoopback} 为当前系统安装一个音频驱动,并让 SDK 通过该音频驱动捕获当前 Mac 系统播放出的声音。
  453 + * 当用于播片教学或音乐直播中,比如老师端可以使用此功能,让 SDK 能够采集老师所播放的电影中的声音,使同房间的学生端也能听到电影中的声音。
  454 + * SDK 会将统声音采集是否被成功开启的结果,通过本事件回调抛出,需要您关注参数中的错误码。
  455 + *
  456 + * @param err ERR_NULL 表示成功,其余值表示失败。
  457 + */
  458 +#if !TARGET_OS_IPHONE && TARGET_OS_MAC
  459 +- (void)onSystemAudioLoopbackError:(TXLiteAVError)err;
  460 +#endif
  461 +
  462 +/// @}
  463 +/////////////////////////////////////////////////////////////////////////////////
  464 +//
  465 +// 自定义消息的接收事件回调
  466 +//
  467 +/////////////////////////////////////////////////////////////////////////////////
  468 +/// @name 自定义消息的接收事件回调
  469 +/// @{
  470 +
  471 +/**
  472 + * 7.1 收到自定义消息的事件回调
  473 + *
  474 + * 当房间中的某个用户使用 {@link sendCustomCmdMsg} 发送自定义 UDP 消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 事件回调接收到该条消息。
  475 + *
  476 + * @param userId 用户标识
  477 + * @param cmdID 命令 ID
  478 + * @param seq 消息序号
  479 + * @param message 消息数据
  480 + */
  481 +- (void)onRecvCustomCmdMsgUserId:(NSString *)userId cmdID:(NSInteger)cmdID seq:(UInt32)seq message:(NSData *)message;
  482 +
  483 +/**
  484 + * 7.2 自定义消息丢失的事件回调
  485 + *
  486 + * 当您使用 {@link sendCustomCmdMsg} 发送自定义 UDP 消息时,即使设置了可靠传输(reliable),也无法确保100@%不丢失,只是丢消息概率极低,能满足常规可靠性要求。
  487 + * 在发送端设置了可靠运输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。
  488 + *
  489 + * @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调
  490 + * @param userId 用户标识
  491 + * @param cmdID 命令 ID
  492 + * @param errCode 错误码
  493 + * @param missed 丢失的消息数量
  494 + */
  495 +- (void)onMissCustomCmdMsgUserId:(NSString *)userId cmdID:(NSInteger)cmdID errCode:(NSInteger)errCode missed:(NSInteger)missed;
  496 +
  497 +/**
  498 + * 7.3 收到 SEI 消息的回调
  499 + *
  500 + * 当房间中的某个用户使用 {@link sendSEIMsg} 借助视频数据帧发送 SEI 消息时,房间中的其它用户可以通过 onRecvSEIMsg 事件回调接收到该条消息。
  501 + *
  502 + * @param userId 用户标识
  503 + * @param message 数据
  504 + */
  505 +- (void)onRecvSEIMsg:(NSString *)userId message:(NSData *)message;
  506 +
  507 +/// @}
  508 +/////////////////////////////////////////////////////////////////////////////////
  509 +//
  510 +// CDN 相关事件回调
  511 +//
  512 +/////////////////////////////////////////////////////////////////////////////////
  513 +/// @name CDN 相关事件回调
  514 +/// @{
  515 +
  516 +/**
  517 + * 8.1 开始向腾讯云直播 CDN 上发布音视频流的事件回调
  518 + *
  519 + * 当您调用 {@link startPublishing} 开始向腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。
  520 + * 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
  521 + *
  522 + * @param err 0表示成功,其余值表示失败
  523 + * @param errMsg 具体错误原因
  524 + */
  525 +- (void)onStartPublishing:(int)err errMsg:(NSString *)errMsg;
  526 +
  527 +/**
  528 + * 8.2 停止向腾讯云直播 CDN 上发布音视频流的事件回调
  529 + *
  530 + * 当您调用 {@link stopPublishing} 停止向腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。
  531 + * 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
  532 + *
  533 + * @param err 0表示成功,其余值表示失败
  534 + * @param errMsg 具体错误原因
  535 + */
  536 +- (void)onStopPublishing:(int)err errMsg:(NSString *)errMsg;
  537 +
  538 +/**
  539 + * 8.3 开始向非腾讯云 CDN 上发布音视频流的事件回调
  540 + *
  541 + * 当您调用 {@link startPublishCDNStream} 开始向非腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。
  542 + * 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
  543 + *
  544 + * @note 当您收到成功的事件回调时,只是说明您的发布指令已经同步到腾讯云后台服务器,但如果目标 CDN 厂商的服务器不接收该条视频流,依然可能导致发布失败。
  545 + * @param err 0表示成功,其余值表示失败
  546 + * @param errMsg 具体错误原因
  547 + */
  548 +- (void)onStartPublishCDNStream:(int)err errMsg:(NSString *)errMsg;
  549 +
  550 +/**
  551 + * 8.4 停止向非腾讯云 CDN 上发布音视频流的事件回调
  552 + *
  553 + * 当您调用 {@link stopPublishCDNStream} 开始向非腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。
  554 + * 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
  555 + *
  556 + * @param err 0表示成功,其余值表示失败
  557 + * @param errMsg 具体错误原因
  558 + */
  559 +- (void)onStopPublishCDNStream:(int)err errMsg:(NSString *)errMsg;
  560 +
  561 +/**
  562 + * 8.5 设置云端混流的排版布局和转码参数的事件回调
  563 + *
  564 + * 当您调用 {@link setMixTranscodingConfig} 调整云端混流的排版布局和转码参数时,SDK 会立刻将这一调整指令同步给云端服务器。
  565 + * 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
  566 + *
  567 + * @param err 错误码:0表示成功,其余值表示失败。
  568 + * @param errMsg 具体的错误原因。
  569 + */
  570 +- (void)onSetMixTranscodingConfig:(int)err errMsg:(NSString *)errMsg;
  571 +
  572 +/// @}
  573 +/////////////////////////////////////////////////////////////////////////////////
  574 +//
  575 +// 屏幕分享相关事件回调
  576 +//
  577 +/////////////////////////////////////////////////////////////////////////////////
  578 +/// @name 屏幕分享相关事件回调
  579 +/// @{
  580 +
  581 +/**
  582 + * 9.1 屏幕分享开启的事件回调
  583 + *
  584 + * 当您通过 {@link startScreenCapture} 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调。
  585 + */
  586 +- (void)onScreenCaptureStarted;
  587 +
  588 +/**
  589 + * 9.2 屏幕分享暂停的事件回调
  590 + *
  591 + * 当您通过 {@link pauseScreenCapture} 暂停屏幕分享时,SDK 便会抛出此事件回调。
  592 + * @param reason 原因。
  593 + * - 0:用户主动暂停。
  594 + * - 1:注意此字段的含义在 MAC 和 Windows 平台有稍微差异。屏幕窗口不可见暂停(Mac)。表示设置屏幕分享参数导致的暂停(Windows)。
  595 + * - 2:表示屏幕分享窗口被最小化导致的暂停(仅 Windows)。
  596 + * - 3:表示屏幕分享窗口被隐藏导致的暂停(仅 Windows)。
  597 + */
  598 +- (void)onScreenCapturePaused:(int)reason;
  599 +
  600 +/**
  601 + * 9.3 屏幕分享恢复的事件回调
  602 + *
  603 + * 当您通过 {@link resumeScreenCapture} 恢复屏幕分享时,SDK 便会抛出此事件回调。
  604 + * @param reason 恢复原因。
  605 + * - 0:用户主动恢复。
  606 + * - 1:注意此字段的含义在 MAC 和 Windows 平台有稍微差异。屏幕窗口恢复可见从而恢复分享(Mac)。屏幕分享参数设置完毕后自动恢复(Windows)
  607 + * - 2:表示屏幕分享窗口从最小化被恢复(仅 Windows)。
  608 + * - 3:表示屏幕分享窗口从隐藏被恢复(仅 Windows)。
  609 + */
  610 +- (void)onScreenCaptureResumed:(int)reason;
  611 +
  612 +/**
  613 + * 9.4 屏幕分享停止的事件回调
  614 + *
  615 + * 当您通过 {@link stopScreenCapture} 停止屏幕分享时,SDK 便会抛出此事件回调。
  616 + * @param reason 停止原因,0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)。
  617 + */
  618 +- (void)onScreenCaptureStoped:(int)reason;
  619 +
  620 +/// @}
  621 +/////////////////////////////////////////////////////////////////////////////////
  622 +//
  623 +// 本地录制和本地截图的事件回调
  624 +//
  625 +/////////////////////////////////////////////////////////////////////////////////
  626 +/// @name 本地录制和本地截图的事件回调
  627 +/// @{
  628 +
  629 +/**
  630 + * 10.1 本地录制任务已经开始的事件回调
  631 + *
  632 + * 当您调用 {@link startLocalRecording} 启动本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务是否已经顺利启动。
  633 + * @param errCode 错误码 0:初始化录制成功;-1:初始化录制失败;-2: 文件后缀名有误。
  634 + * @param storagePath 录制文件存储路径
  635 + */
  636 +- (void)onLocalRecordBegin:(NSInteger)errCode storagePath:(NSString *)storagePath;
  637 +
  638 +/**
  639 + * 10.2 本地录制任务正在进行中的进展事件回调
  640 + *
  641 + * 当您调用 {@link startLocalRecording} 成功启动本地媒体录制任务后,SDK 变会定时地抛出本事件回调。
  642 + * 您可通过捕获该事件回调来获知录制任务的健康状况。
  643 + * 您可以在 {@link startLocalRecording} 时设定本事件回调的抛出间隔。
  644 + *
  645 + * @param duration 已经录制的累计时长,单位毫秒
  646 + * @param storagePath 录制文件存储路径
  647 + */
  648 +- (void)onLocalRecording:(NSInteger)duration storagePath:(NSString *)storagePath;
  649 +
  650 +/**
  651 + * 10.3 本地录制任务已经结束的事件回调
  652 + *
  653 + * 当您调用 {@link stopLocalRecording} 停止本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务的最终结果。
  654 + * @param errCode 错误码 0:录制成功;-1:录制失败;-2:切换分辨率或横竖屏导致录制结束。
  655 + * @param storagePath 录制文件存储路径
  656 + */
  657 +- (void)onLocalRecordComplete:(NSInteger)errCode storagePath:(NSString *)storagePath;
  658 +
  659 +/// @}
  660 +/////////////////////////////////////////////////////////////////////////////////
  661 +//
  662 +// 废弃的事件回调(建议使用对应的新回调)
  663 +//
  664 +/////////////////////////////////////////////////////////////////////////////////
  665 +/// @name 废弃的事件回调(建议使用对应的新回调)
  666 +/// @{
  667 +
  668 +/**
  669 + * 有主播加入当前房间(已废弃)
  670 + *
  671 + * @deprecated 新版本开始不推荐使用,建议使用 {@link onRemoteUserEnterRoom} 替代之。
  672 + */
  673 +- (void)onUserEnter:(NSString *)userId __attribute__((deprecated("use onRemoteUserLeaveRoom instead")));
  674 +
  675 +/**
  676 + * 有主播离开当前房间(已废弃)
  677 + *
  678 + * @deprecated 新版本开始不推荐使用,建议使用 {@link onRemoteUserLeaveRoom} 替代之。
  679 + */
  680 +- (void)onUserExit:(NSString *)userId reason:(NSInteger)reason __attribute__((deprecated("use onRemoteUserLeaveRoom instead")));
  681 +
  682 +/**
  683 + * 音效播放已结束(已废弃)
  684 + *
  685 + * @deprecated 新版本开始不推荐使用,建议使用 {@link ITXAudioEffectManager} 接口替代之。
  686 + * 新的接口中不再区分背景音乐和音效,而是统一用 {@link startPlayMusic} 取代之。
  687 + */
  688 +- (void)onAudioEffectFinished:(int)effectId code:(int)code __attribute__((deprecated("use ITXAudioEffectManager.startPlayMusic instead")));
  689 +
  690 +/// @}
  691 +@end // End of class TRTCCloudDelegate
  692 +
  693 +/////////////////////////////////////////////////////////////////////////////////
  694 +//
  695 +// 视频数据自定义回调
  696 +//
  697 +/////////////////////////////////////////////////////////////////////////////////
  698 +/// @name 视频数据自定义回调
  699 +/// @{
  700 +
  701 +@protocol TRTCVideoRenderDelegate <NSObject>
  702 +
  703 +/**
  704 + * 自定义视频渲染回调
  705 + *
  706 + * 当您设置了本地或者远端的视频自定义渲染回调之后,SDK 就会将原本要交给渲染控件进行渲染的视频帧通过此回调接口抛送给您,以便于您进行自定义渲染。
  707 + * @param frame 待渲染的视频帧信息
  708 + * @param userId 视频源的 userId,如果是本地视频回调(setLocalVideoRenderDelegate),该参数可以忽略
  709 + * @param streamType 频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。
  710 + */
  711 +@optional
  712 +- (void)onRenderVideoFrame:(TRTCVideoFrame *_Nonnull)frame userId:(NSString *__nullable)userId streamType:(TRTCVideoStreamType)streamType;
  713 +
  714 +@end // End of class TRTCVideoRenderDelegate
  715 +
  716 +@protocol TRTCVideoFrameDelegate <NSObject>
  717 +
  718 +/**
  719 + * 用于对接第三方美颜组件的视频处理回调
  720 + *
  721 + * 如果您选购了第三方美颜组件,就需要在 TRTCCloud 中设置第三方美颜回调,之后 TRTC 就会将原本要进行预处理的视频帧通过此回调接口抛送给您。
  722 + * 之后您就可以将 TRTC 抛出的视频帧交给第三方美颜组件进行图像处理,由于抛出的数据是可读且可写的,因此第三方美颜的处理结果也可以同步给 TRTC 进行后续的编码和发送。
  723 + *
  724 + * @param srcFrame 用于承载 TRTC 采集到的摄像头画面
  725 + * @param dstFrame 用于接收第三方美颜处理过的视频画面
  726 + * @note 目前仅支持 OpenGL 纹理方案( PC 仅支持 TRTCVideoBufferType_Buffer 格式)。
  727 + *
  728 + * 情况一:美颜组件自身会产生新的纹理
  729 + * 如果您使用的美颜组件会在处理图像的过程中产生一帧全新的纹理(用于承载处理后的图像),那请您在回调函数中将 dstFrame.textureId 设置为新纹理的 ID:
  730 + * <pre>
  731 + * uint32_t onProcessVideoFrame(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame{
  732 + * self.frameID += 1;
  733 + * dstFrame.pixelBuffer = [[FURenderer shareRenderer] renderPixelBuffer:srcFrame.pixelBuffer
  734 + * withFrameId:self.frameID
  735 + * items:self.renderItems
  736 + * itemCount:self.renderItems.count];
  737 + * return 0;
  738 + * }
  739 + * </pre>
  740 + *
  741 + *
  742 + * 情况二:美颜组件需要您提供目标纹理
  743 + * 如果您使用的第三方美颜模块并不生成新的纹理,而是需要您设置给该模块一个输入纹理和一个输出纹理,则可以考虑如下方案:
  744 + * ```ObjectiveC
  745 + * uint32_t onProcessVideoFrame(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame{
  746 + * thirdparty_process(srcFrame.textureId, srcFrame.width, srcFrame.height, dstFrame.textureId);
  747 + * return 0;
  748 + * }
  749 + * ```
  750 + * ```java
  751 + * int onProcessVideoFrame(TRTCCloudDef.TRTCVideoFrame srcFrame, TRTCCloudDef.TRTCVideoFrame dstFrame) {
  752 + * thirdparty_process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height, dstFrame.texture.textureId);
  753 + * return 0;
  754 + * }
  755 + * ```
  756 + */
  757 +@optional
  758 +- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame *_Nonnull)srcFrame dstFrame:(TRTCVideoFrame *_Nonnull)dstFrame;
  759 +
  760 +/**
  761 + * SDK 内部 OpenGL 环境被销的通知
  762 + */
  763 +@optional
  764 +- (void)onGLContextDestory;
  765 +
  766 +@end // End of class TRTCVideoFrameDelegate
  767 +
  768 +/// @}
  769 +/////////////////////////////////////////////////////////////////////////////////
  770 +//
  771 +// 音频数据自定义回调
  772 +//
  773 +/////////////////////////////////////////////////////////////////////////////////
  774 +/// @name 音频数据自定义回调
  775 +/// @{
  776 +
  777 +@protocol TRTCAudioFrameDelegate <NSObject>
  778 +@optional
  779 +
  780 +/**
  781 + * 本地采集并经过音频模块前处理后的音频数据回调
  782 + *
  783 + * 当您设置完音频数据自定义回调之后,SDK 内部会把刚采集到并经过前处理(ANS、AEC、AGC)之后的数据,以 PCM 格式的形式通过本接口回调给您。
  784 + * - 此接口回调出的音频时间帧长固定为0.02s,格式为 PCM 格式。
  785 + * - 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
  786 + * - 以 TRTC 默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  787 + *
  788 + * @param frame PCM 格式的音频数据帧
  789 + * @note
  790 + * 1. 请不要在此回调函数中做任何耗时操作,由于 SDK 每隔 20ms 就要处理一帧音频数据,如果您的处理时间超过 20ms,就会导致声音异常。
  791 + * 2. 此接口回调出的音频数据是可读写的,也就是说您可以在回调函数中同步修改音频数据,但请保证处理耗时。
  792 + * 3. 此接口回调出的音频数据已经经过了前处理(ANS、AEC、AGC),但**不包含**背景音、音效、混响等前处理效果,延迟较低。
  793 + */
  794 +- (void)onCapturedRawAudioFrame:(TRTCAudioFrame *)frame;
  795 +
  796 +/**
  797 + * 本地采集并经过音频模块前处理、音效处理和混 BGM 后的音频数据回调
  798 + *
  799 + * 当您设置完音频数据自定义回调之后,SDK 内部会把刚采集到并经过前处理、音效处理和混 BGM 之后的数据,在最终进行网络编码之前,以 PCM 格式的形式通过本接口回调给您。
  800 + * - 此接口回调出的音频时间帧长固定为0.02s,格式为 PCM 格式。
  801 + * - 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
  802 + * - 以 TRTC 默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  803 + *
  804 + * 特殊说明:
  805 + * 您可以通过设置接口中的 `TRTCAudioFrame.extraData` 字段,达到传输信令的目的。
  806 + * 由于音频帧头部的数据块不能太大,建议您写入 `extraData` 时,尽量将信令控制在几个字节的大小,如果超过 100 个字节,写入的数据不会被发送。
  807 + * 房间内其他用户可以通过 {@link TRTCAudioFrameDelegate} 中的 `onRemoteUserAudioFrame` 中的 `TRTCAudioFrame.extraData` 字段回调接收数据。
  808 + *
  809 + * @param frame PCM 格式的音频数据帧
  810 + * @note
  811 + * 1. 请不要在此回调函数中做任何耗时操作,由于 SDK 每隔 20ms 就要处理一帧音频数据,如果您的处理时间超过 20ms,就会导致声音异常。
  812 + * 2. 此接口回调出的音频数据是可读写的,也就是说您可以在回调函数中同步修改音频数据,但请保证处理耗时。
  813 + * 3. 此接口回调出的数据已经经过了前处理(ANS、AEC、AGC)、音效和混 BGM 处理,声音的延迟相比于 {@link onCapturedRawAudioFrame} 要高一些。
  814 + */
  815 +- (void)onLocalProcessedAudioFrame:(TRTCAudioFrame *)frame;
  816 +
  817 +/**
  818 + * 混音前的每一路远程用户的音频数据
  819 + *
  820 + * 当您设置完音频数据自定义回调之后,SDK 内部会把远端的每一路原始数据,在最终混音之前,以 PCM 格式的形式通过本接口回调给您。
  821 + * - 此接口回调出的音频时间帧长固定为0.02s,格式为 PCM 格式。
  822 + * - 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
  823 + * - 以 TRTC 默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  824 + *
  825 + * @param frame PCM 格式的音频数据帧
  826 + * @param userId 用户标识
  827 + * @note 此接口回调出的音频数据是只读的,不支持修改
  828 + */
  829 +- (void)onRemoteUserAudioFrame:(TRTCAudioFrame *)frame userId:(NSString *)userId;
  830 +
  831 +/**
  832 + * 将各路待播放音频混合之后并在最终提交系统播放之前的数据回调
  833 + *
  834 + * 当您设置完音频数据自定义回调之后,SDK 内部会把各路待播放的音频混合之后的音频数据,在提交系统播放之前,以 PCM 格式的形式通过本接口回调给您。
  835 + * - 此接口回调出的音频时间帧长固定为0.02s,格式为 PCM 格式。
  836 + * - 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
  837 + * - 以 TRTC 默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  838 + *
  839 + * @param frame PCM 格式的音频数据帧
  840 + * @note
  841 + * 1. 请不要在此回调函数中做任何耗时操作,由于 SDK 每隔 20ms 就要处理一帧音频数据,如果您的处理时间超过 20ms,就会导致声音异常。
  842 + * 2. 此接口回调出的音频数据是可读写的,也就是说您可以在回调函数中同步修改音频数据,但请保证处理耗时。
  843 + * 3. 此接口回调出的是对各路待播放音频数据的混合,但其中并不包含耳返的音频数据。
  844 + */
  845 +- (void)onMixedPlayAudioFrame:(TRTCAudioFrame *)frame;
  846 +
  847 +/**
  848 + * SDK 所有音频混合后的音频数据(包括采集到的和待播放的)
  849 + *
  850 + * 当您设置完音频数据自定义回调之后,SDK 内部会把所有采集到的和待播放的音频数据混合起来,以 PCM 格式的形式通过本接口回调给您,便于您进行自定义录制。
  851 + * - 此接口回调出的音频时间帧长固定为0.02s,格式为 PCM 格式。
  852 + * - 由时间帧长转化为字节帧长的公式为【采样率 × 时间帧长 × 声道数 × 采样点位宽】。
  853 + * - 以 TRTC 默认的音频录制格式48000采样率、单声道、16采样点位宽为例,字节帧长为【48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  854 + *
  855 + * @param frame PCM 格式的音频数据帧
  856 + * @note
  857 + * 1. 此接口回调出的是SDK所有音频数据的混合数据,包括:经过 3A 前处理、特效叠加以及背景音乐混音后的本地音频,所有远端音频,但不包括耳返音频。
  858 + * 2. 此接口回调出的音频数据不支持修改。
  859 + */
  860 +- (void)onMixedAllAudioFrame:(TRTCAudioFrame *)frame;
  861 +
  862 +@end // End of class TRTCAudioFrameDelegate
  863 +
  864 +/// @}
  865 +/////////////////////////////////////////////////////////////////////////////////
  866 +//
  867 +// 更多事件回调接口
  868 +//
  869 +/////////////////////////////////////////////////////////////////////////////////
  870 +/// @name 更多事件回调接口
  871 +/// @{
  872 +
  873 +@protocol TRTCLogDelegate <NSObject>
  874 +
  875 +@optional
  876 +
  877 +/**
  878 + * 本地 LOG 的打印回调
  879 + *
  880 + * 如果您希望捕获 SDK 的本地日志打印行为,可以通过设置日志回调,让 SDK 将要打印的日志都通过本回调接口抛送给您。
  881 + * @param log 日志内容
  882 + * @param level 日志等级 参见 TRTC_LOG_LEVEL
  883 + * @param module 保留字段,暂无具体意义,目前为固定值 TXLiteAVSDK
  884 + */
  885 +- (void)onLog:(nullable NSString *)log LogLevel:(TRTCLogLevel)level WhichModule:(nullable NSString *)module;
  886 +
  887 +@end // End of class TRTCLogDelegate
  888 +/// @}
  889 +NS_ASSUME_NONNULL_END
  890 +
  891 +/// @}
  1 +/**
  2 + * Module: TRTC 音视频统计指标(只读)
  3 + * Function: TRTC SDK 会以两秒钟一次的频率向您汇报当前实时的音视频指标(帧率、码率、卡顿情况等)
  4 + */
  5 +/// @defgroup TRTCStatisic_ios TRTCStatisic
  6 +/// TRTC 音视频统计指标
  7 +/// @{
  8 +
  9 +/////////////////////////////////////////////////////////////////////////////////
  10 +//
  11 +// 本地的音视频统计指标
  12 +//
  13 +/////////////////////////////////////////////////////////////////////////////////
  14 +/// @name 本地的音视频统计指标
  15 +/// @{
  16 +
  17 +@interface TRTCLocalStatistics : NSObject
  18 +
  19 +///【字段含义】本地视频的宽度,单位 px
  20 +@property(nonatomic, assign) uint32_t width;
  21 +
  22 +///【字段含义】本地视频的高度,单位 px
  23 +@property(nonatomic, assign) uint32_t height;
  24 +
  25 +///【字段含义】本地视频的帧率,即每秒钟会有多少视频帧,单位:FPS
  26 +@property(nonatomic, assign) uint32_t frameRate;
  27 +
  28 +///【字段含义】远端视频的码率,即每秒钟新产生视频数据的多少,单位 Kbps
  29 +@property(nonatomic, assign) uint32_t videoBitrate;
  30 +
  31 +///【字段含义】远端音频的采样率,单位 Hz
  32 +@property(nonatomic, assign) uint32_t audioSampleRate;
  33 +
  34 +///【字段含义】本地音频的码率,即每秒钟新产生音频数据的多少,单位 Kbps
  35 +@property(nonatomic, assign) uint32_t audioBitrate;
  36 +
  37 +///【字段含义】视频流类型(高清大画面|低清小画面|辅流画面)
  38 +@property(nonatomic, assign) TRTCVideoStreamType streamType;
  39 +
  40 +///【字段含义】音频设备采集状态(用于检测音频外设的健康度)
  41 +/// 0:采集设备状态正常;1:检测到长时间静音;2:检测到破音;3:检测到声音异常间断。
  42 +@property(nonatomic, assign) uint32_t audioCaptureState;
  43 +@end
  44 +
  45 +/// @}
  46 +/////////////////////////////////////////////////////////////////////////////////
  47 +//
  48 +// 远端的音视频统计指标
  49 +//
  50 +/////////////////////////////////////////////////////////////////////////////////
  51 +/// @name 远端的音视频统计指标
  52 +/// @{
  53 +
  54 +@interface TRTCRemoteStatistics : NSObject
  55 +
  56 +///【字段含义】用户 ID
  57 +@property(nonatomic, retain) NSString* userId;
  58 +
  59 +///【字段含义】音频流的总丢包率(%)
  60 +/// audioPacketLoss 代表音频流历经“主播 => 云端 => 观众”这样一条完整的传输链路后,最终在观众端统计到的丢包率。
  61 +/// audioPacketLoss 越小越好,丢包率为0即表示该路音频流的所有数据均已经完整地到达了观众端。
  62 +///如果出现了 downLoss == 0 但 audioPacketLoss != 0 的情况,说明该路音频流在“云端=>观众”这一段链路上没有出现丢包,但是在“主播=>云端”这一段链路上出现了不可恢复的丢包。
  63 +@property(nonatomic, assign) uint32_t audioPacketLoss;
  64 +
  65 +///【字段含义】该路视频流的总丢包率(%)
  66 +/// videoPacketLoss 代表该路视频流历经“主播 => 云端 => 观众”这样一条完整的传输链路后,最终在观众端统计到的丢包率。
  67 +/// videoPacketLoss 越小越好,丢包率为0即表示该路视频流的所有数据均已经完整地到达了观众端。
  68 +///如果出现了 downLoss == 0 但 videoPacketLoss != 0 的情况,说明该路视频流在“云端=>观众”这一段链路上没有出现丢包,但是在“主播=>云端”这一段链路上出现了不可恢复的丢包。
  69 +@property(nonatomic, assign) uint32_t videoPacketLoss;
  70 +
  71 +///【字段含义】远端视频的宽度,单位 px
  72 +@property(nonatomic, assign) uint32_t width;
  73 +
  74 +///【字段含义】远端视频的高度,单位 px
  75 +@property(nonatomic, assign) uint32_t height;
  76 +
  77 +///【字段含义】远端视频的帧率,单位:FPS
  78 +@property(nonatomic, assign) uint32_t frameRate;
  79 +
  80 +///【字段含义】远端视频的码率,单位 Kbps
  81 +@property(nonatomic, assign) uint32_t videoBitrate;
  82 +
  83 +///【字段含义】本地音频的采样率,单位 Hz
  84 +@property(nonatomic, assign) uint32_t audioSampleRate;
  85 +
  86 +///【字段含义】本地音频的码率,单位 Kbps
  87 +@property(nonatomic, assign) uint32_t audioBitrate;
  88 +
  89 +///【字段含义】播放延迟,单位 ms
  90 +///为了避免网络抖动和网络包乱序导致的声音和画面卡顿,TRTC 会在播放端管理一个播放缓冲区,用于对接收到的网络数据包进行整理,
  91 +///该缓冲区的大小会根据当前的网络质量进行自适应调整,该缓冲区的大小折算成以毫秒为单位的时间长度,也就是 jitterBufferDelay。
  92 +@property(nonatomic, assign) uint32_t jitterBufferDelay;
  93 +
  94 +///【字段含义】端到端延迟,单位 ms
  95 +/// point2PointDelay 代表 “主播=>云端=>观众” 的延迟,更准确地说,它代表了“采集=>编码=>网络传输=>接收=>缓冲=>解码=>播放” 全链路的延迟。
  96 +/// point2PointDelay 需要本地和远端的 SDK 均为 8.5 及以上的版本才生效,若远端用户为 8.5 以前的版本,此数值会一直为0,代表无意义。
  97 +@property(nonatomic, assign) uint32_t point2PointDelay;
  98 +
  99 +///【字段含义】音频播放的累计卡顿时长,单位 ms
  100 +@property(nonatomic, assign) uint32_t audioTotalBlockTime;
  101 +
  102 +///【字段含义】音频播放卡顿率,单位 (%)
  103 +///音频播放卡顿率(audioBlockRate) = 音频播放的累计卡顿时长(audioTotalBlockTime) / 音频播放的总时长
  104 +@property(nonatomic, assign) uint32_t audioBlockRate;
  105 +
  106 +///【字段含义】视频播放的累计卡顿时长,单位 ms
  107 +@property(nonatomic, assign) uint32_t videoTotalBlockTime;
  108 +
  109 +///【字段含义】视频播放卡顿率,单位 (%)
  110 +///视频播放卡顿率(videoBlockRate) = 视频播放的累计卡顿时长(videoTotalBlockTime) / 视频播放的总时长
  111 +@property(nonatomic, assign) uint32_t videoBlockRate;
  112 +
  113 +///【字段含义】该路音视频流的总丢包率(%)
  114 +///已废弃,不推荐使用;建议使用 audioPacketLoss、videoPacketLoss 替代
  115 +@property(nonatomic, assign) uint32_t finalLoss __attribute__((deprecated("Use audioPacketLoss and videoPacketLoss instead.")));
  116 +
  117 +///【字段含义】视频流类型(高清大画面|低清小画面|辅流画面)
  118 +@property(nonatomic, assign) TRTCVideoStreamType streamType;
  119 +@end
  120 +
  121 +/// @}
  122 +/////////////////////////////////////////////////////////////////////////////////
  123 +//
  124 +// 网络和性能的汇总统计指标
  125 +//
  126 +/////////////////////////////////////////////////////////////////////////////////
  127 +/// @name 网络和性能的汇总统计指标
  128 +/// @{
  129 +
  130 +@interface TRTCStatistics : NSObject
  131 +
  132 +///【字段含义】当前应用的 CPU 使用率,单位 (%)
  133 +@property(nonatomic, assign) uint32_t appCpu;
  134 +
  135 +///【字段含义】当前系统的 CPU 使用率,单位 (%)
  136 +@property(nonatomic, assign) uint32_t systemCpu;
  137 +
  138 +///【字段含义】从 SDK 到云端的上行丢包率,单位 (%)
  139 +///该数值越小越好,如果 upLoss 为 0%,则意味着上行链路的网络质量很好,上传到云端的数据包基本不发生丢失。
  140 +///如果 upLoss 为 30%,则意味着 SDK 向云端发送的音视频数据包中,会有 30% 丢失在传输链路中。
  141 +@property(nonatomic, assign) uint32_t upLoss;
  142 +
  143 +///【字段含义】从云端到 SDK 的下行丢包率,单位 (%)
  144 +///该数值越小越好,如果 downLoss 为 0%,则意味着下行链路的网络质量很好,从云端接收的数据包基本不发生丢失。
  145 +///如果 downLoss 为 30%,则意味着云端向 SDK 传输的音视频数据包中,会有 30% 丢失在传输链路中。
  146 +@property(nonatomic, assign) uint32_t downLoss;
  147 +
  148 +///【字段含义】从 SDK 到云端的往返延时,单位 ms
  149 +///该数值代表从 SDK 发送一个网络包到云端,再从云端回送一个网络包到 SDK 的总计耗时,也就是一个网络包经历 “SDK=>云端=>SDK” 的总耗时。
  150 +///该数值越小越好:如果 rtt < 50ms,意味着较低的音视频通话延迟;如果 rtt > 200ms,则意味着较高的音视频通话延迟。
  151 +///需要特别解释的是,rtt 代表 “SDK=>云端=>SDK” 的总耗时,所不需要区分 upRtt 和 downRtt。
  152 +@property(nonatomic, assign) uint32_t rtt;
  153 +
  154 +///【字段含义】从 SDK 到本地路由器的往返时延,单位 ms
  155 +///该数值代表从 SDK 发送一个网络包到本地路由器网关,再从网关回送一个网络包到 SDK 的总计耗时,也就是一个网络包经历 “SDK=>网关=>SDK” 的总耗时。
  156 +///该数值越小越好:如果 gatewayRtt < 50ms,意味着较低的音视频通话延迟;如果 gatewayRtt > 200ms,则意味着较高的音视频通话延迟。
  157 +///当网络类型为蜂窝网时,该值无效。
  158 +@property(nonatomic, assign) uint32_t gatewayRtt;
  159 +
  160 +///【字段含义】总发送字节数(包含信令数据和音视频数据),单位:字节数(Bytes)
  161 +@property(nonatomic, assign) uint64_t sentBytes;
  162 +
  163 +///【字段含义】总接收字节数(包含信令数据和音视频数据),单位:字节数(Bytes)
  164 +@property(nonatomic, assign) uint64_t receivedBytes;
  165 +
  166 +///【字段含义】本地的音视频统计信息
  167 +///由于本地可能有三路音视频流(即高清大画面,低清小画面,以及辅流画面),因此本地的音视频统计信息是一个数组。
  168 +@property(nonatomic, strong) NSArray<TRTCLocalStatistics*>* localStatistics;
  169 +
  170 +///【字段含义】远端的音视频统计信息
  171 +///因为同时可能有多个远端用户,而且每个远端用户同时可能有多路音视频流(即高清大画面,低清小画面,以及辅流画面),因此远端的音视频统计信息是一个数组。
  172 +@property(nonatomic, strong) NSArray<TRTCRemoteStatistics*>* remoteStatistics;
  173 +
  174 +@end
  175 +/// @}
  176 +
  177 +/// @}
  1 +//
  2 +// TXAudioCustomProcessDelegate.h
  3 +// TXLiteAVSDK
  4 +//
  5 +// Created by realingzhou on 2018/1/15.
  6 +// Copyright © 2018年 Tencent. All rights reserved.
  7 +//
  8 +
  9 +#ifndef TXAudioCustomProcessDelegate_h
  10 +#define TXAudioCustomProcessDelegate_h
  11 +#import <Foundation/Foundation.h>
  12 +
  13 +@protocol TXAudioCustomProcessDelegate <NSObject>
  14 +
  15 +/**
  16 + * 原始声音的回调
  17 + * @param data pcm数据
  18 + * @param timeStamp 时间戳
  19 + * @param sampleRate 采样率
  20 + * @param channels 声道数
  21 + * @param withBgm 回调的数据是否包含bgm,当不开启回声消除时,回调的raw pcm会包含bgm
  22 + */
  23 +@optional
  24 +- (void)onRecordRawPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels withBgm:(BOOL)withBgm;
  25 +
  26 +/**
  27 + * 经过特效处理的声音回调
  28 + * @param data pcm数据
  29 + * @param timeStamp 时间戳
  30 + * @param sampleRate 采样率
  31 + * @param channels 声道数
  32 + */
  33 +@optional
  34 +- (void)onRecordPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels;
  35 +
  36 +@end
  37 +
  38 +#endif /* TXAudioCustomProcessDelegate_h */
  1 +/**
  2 + * Module: TRTC 背景音乐、短音效和人声特效的管理类
  3 + * Function: 用于对背景音乐、短音效和人声特效进行设置的管理类
  4 + */
  5 +/// @defgroup TXAudioEffectManager_ios TXAudioEffectManager
  6 +/// TRTC 背景音乐、短音效和人声特效的管理类
  7 +/// @{
  8 +#import <Foundation/Foundation.h>
  9 +
  10 +/////////////////////////////////////////////////////////////////////////////////
  11 +//
  12 +// 音效相关的枚举值定义
  13 +//
  14 +/////////////////////////////////////////////////////////////////////////////////
  15 +/// @name 音效相关的枚举值定义
  16 +/// @{
  17 +
  18 +/**
  19 + * 1.1 混响特效
  20 + *
  21 + * 混响特效可以作用于人声之上,通过声学算法对声音进行叠加处理,模拟出各种不同环境下的临场感受,目前支持如下几种混响效果:
  22 + * 0:关闭;1:KTV;2:小房间;3:大会堂;4:低沉;5:洪亮;6:金属声;7:磁性;8:空灵;9:录音棚;10:悠扬;11:留声机;12:自然。
  23 + */
  24 +typedef NS_ENUM(NSInteger, TXVoiceReverbType) {
  25 + TXVoiceReverbType_0 = 0, ///< disable
  26 + TXVoiceReverbType_1 = 1, ///< KTV
  27 + TXVoiceReverbType_2 = 2, ///< small room
  28 + TXVoiceReverbType_3 = 3, ///< great hall
  29 + TXVoiceReverbType_4 = 4, ///< deep voice
  30 + TXVoiceReverbType_5 = 5, ///< loud voice
  31 + TXVoiceReverbType_6 = 6, ///< metallic sound
  32 + TXVoiceReverbType_7 = 7, ///< magnetic sound
  33 + TXVoiceReverbType_8 = 8, ///< ethereal
  34 + TXVoiceReverbType_9 = 9, ///< studio
  35 + TXVoiceReverbType_10 = 10, ///< melodious
  36 + TXVoiceReverbType_11 = 11, ///< phonograph
  37 + TXVoiceReverbType_12 = 12, ///< nature
  38 +};
  39 +
  40 +/**
  41 + * 1.2 变声特效
  42 + *
  43 + * 变声特效可以作用于人声之上,通过声学算法对人声进行二次处理,以获得与原始声音所不同的音色,目前支持如下几种变声特效:
  44 + * 0:关闭;1:熊孩子;2:萝莉;3:大叔;4:重金属;5:感冒;6:外语腔;7:困兽;8:肥宅;9:强电流;10:重机械;11:空灵。
  45 + */
  46 +typedef NS_ENUM(NSInteger, TXVoiceChangeType) {
  47 + TXVoiceChangeType_0 = 0, ///< disable
  48 + TXVoiceChangeType_1 = 1, ///< naughty kid
  49 + TXVoiceChangeType_2 = 2, ///< Lolita
  50 + TXVoiceChangeType_3 = 3, ///< uncle
  51 + TXVoiceChangeType_4 = 4, ///< heavy metal
  52 + TXVoiceChangeType_5 = 5, ///< catch cold
  53 + TXVoiceChangeType_6 = 6, ///< foreign accent
  54 + TXVoiceChangeType_7 = 7, ///< caged animal trapped beast
  55 + TXVoiceChangeType_8 = 8, ///< indoorsman
  56 + TXVoiceChangeType_9 = 9, ///< strong current
  57 + TXVoiceChangeType_10 = 10, ///< heavy machinery
  58 + TXVoiceChangeType_11 = 11, ///< intangible
  59 +};
  60 +
  61 +/// @}
  62 +/////////////////////////////////////////////////////////////////////////////////
  63 +//
  64 +// 背景音乐的播放事件回调
  65 +//
  66 +/////////////////////////////////////////////////////////////////////////////////
  67 +/// @name 背景音乐的事件回调接口
  68 +/// @{
  69 +
  70 +// Playback progress block of background music
  71 +
  72 +///背景音乐开始播放
  73 +typedef void (^TXAudioMusicStartBlock)(NSInteger errCode);
  74 +
  75 +///背景音乐的播放进度
  76 +typedef void (^TXAudioMusicProgressBlock)(NSInteger progressMs, NSInteger durationMs);
  77 +
  78 +///背景音乐已经播放完毕
  79 +typedef void (^TXAudioMusicCompleteBlock)(NSInteger errCode);
  80 +
  81 +/// @}
  82 +/////////////////////////////////////////////////////////////////////////////////
  83 +//
  84 +// 背景音乐的播放控制信息
  85 +//
  86 +/////////////////////////////////////////////////////////////////////////////////
  87 +/// @name 背景音乐的播放控制信息
  88 +/// @{
  89 +
  90 +/**
  91 + * 背景音乐的播放控制信息
  92 + *
  93 + * 该信息用于在接口 {@link startPlayMusic} 中指定背景音乐的相关信息,包括播放 ID、文件路径和循环次数等:
  94 + * 1. 如果要多次播放同一首背景音乐,请不要每次播放都分配一个新的 ID,我们推荐使用相同的 ID。
  95 + * 2. 若您希望同时播放多首不同的音乐,请为不同的音乐分配不同的 ID 进行播放。
  96 + * 3. 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。
  97 + */
  98 +@interface TXAudioMusicParam : NSObject
  99 +
  100 +///【字段含义】音乐 ID <br/>
  101 +///【特殊说明】SDK 允许播放多路音乐,因此需要使用 ID 进行标记,用于控制音乐的开始、停止、音量等。
  102 +@property(nonatomic) int32_t ID;
  103 +
  104 +///【字段含义】音效文件的完整路径或 URL 地址。支持的音频格式包括 MP3、AAC、M4A、WAV
  105 +@property(nonatomic, copy) NSString *path;
  106 +
  107 +///【字段含义】音乐循环播放的次数 <br/>
  108 +///【推荐取值】取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推
  109 +@property(nonatomic) NSInteger loopCount;
  110 +
  111 +///【字段含义】是否将音乐传到远端 <br/>
  112 +///【推荐取值】YES:音乐在本地播放的同时,远端用户也能听到该音乐;NO:主播只能在本地听到该音乐,远端观众听不到。默认值:NO。
  113 +@property(nonatomic) BOOL publish;
  114 +
  115 +///【字段含义】播放的是否为短音乐文件 <br/>
  116 +///【推荐取值】YES:需要重复播放的短音乐文件;NO:正常的音乐文件。默认值:NO
  117 +@property(nonatomic) BOOL isShortFile;
  118 +
  119 +///【字段含义】音乐开始播放时间点,单位:毫秒。
  120 +@property(nonatomic) NSInteger startTimeMS;
  121 +
  122 +///【字段含义】音乐结束播放时间点,单位毫秒,0表示播放至文件结尾。
  123 +@property(nonatomic) NSInteger endTimeMS;
  124 +@end
  125 +/// @}
  126 +
  127 +// Definition of audio effect management module
  128 +@interface TXAudioEffectManager : NSObject
  129 +
  130 +/**
  131 + * TXAudioEffectManager对象不可直接被创建
  132 + * 要通过 `TRTCCloud` 或 `TXLivePush` 中的 `getAudioEffectManager` 接口获取
  133 + */
  134 +- (instancetype)init NS_UNAVAILABLE;
  135 +
  136 +/////////////////////////////////////////////////////////////////////////////////
  137 +//
  138 +// 人声相关的特效接口
  139 +//
  140 +/////////////////////////////////////////////////////////////////////////////////
  141 +/// @name 人声相关的特效接口
  142 +/// @{
  143 +
  144 +/**
  145 + * 1.1 开启耳返
  146 + *
  147 + * 主播开启耳返后,可以在耳机里听到麦克风采集到的自己发出的声音,该特效适用于主播唱歌的应用场景中。
  148 + *
  149 + * 需要您注意的是,由于蓝牙耳机的硬件延迟非常高,所以在主播佩戴蓝牙耳机时无法开启此特效,请尽量在用户界面上提示主播佩戴有线耳机。
  150 + * 同时也需要注意,并非所有的手机开启此特效后都能达到优秀的耳返效果,我们已经对部分耳返效果不佳的手机屏蔽了该特效。
  151 + *
  152 + * @note 仅在主播佩戴耳机时才能开启此特效,同时请您提示主播佩戴有线耳机。
  153 + * @param enable YES:开启;NO:关闭。
  154 + */
  155 +- (void)enableVoiceEarMonitor:(BOOL)enable;
  156 +
  157 +/**
  158 + * 1.2 设置耳返音量
  159 + *
  160 + * 通过该接口您可以设置耳返特效中声音的音量大小。
  161 + *
  162 + * @param volume 音量大小,取值范围为0 - 100,默认值:100。
  163 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  164 + */
  165 +- (void)setVoiceEarMonitorVolume:(NSInteger)volume;
  166 +
  167 +/**
  168 + * 1.3 设置人声的混响效果
  169 + *
  170 + * 通过该接口您可以设置人声的混响效果,具体特效请参考枚举定义{@link TXVoiceReverbType}。
  171 + *
  172 + * @note 设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置。
  173 + */
  174 +- (void)setVoiceReverbType:(TXVoiceReverbType)reverbType;
  175 +
  176 +/**
  177 + * 1.4 设置人声的变声特效
  178 + *
  179 + * 通过该接口您可以设置人声的变声特效,具体特效请参考枚举定义{@link TXVoiceChangeType}。
  180 + *
  181 + * @note 设置的效果在退出房间后会自动失效,如果下次进房还需要对应特效,需要调用此接口再次进行设置。
  182 + */
  183 +- (void)setVoiceChangerType:(TXVoiceChangeType)changerType;
  184 +
  185 +/**
  186 + * 1.5 设置语音音量
  187 + *
  188 + * 该接口可以设置语音音量的大小,一般配合音乐音量的设置接口 {@link setAllMusicVolume} 协同使用,用于调谐语音和音乐在混音前各自的音量占比。
  189 + *
  190 + * @param volume 音量大小,取值范围为0 - 100,默认值:100。
  191 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  192 + */
  193 +- (void)setVoiceVolume:(NSInteger)volume;
  194 +
  195 +/**
  196 + * 1.6 设置语音音调
  197 + *
  198 + * 该接口可以设置语音音调,用于实现变调不变速的目的。
  199 + *
  200 + * @param pitch 音调,取值范围为-1.0f~1.0f,默认值:0.0f。
  201 + */
  202 +- (void)setVoicePitch:(double)pitch;
  203 +
  204 +/// @}
  205 +/////////////////////////////////////////////////////////////////////////////////
  206 +//
  207 +// 背景音乐的相关接口
  208 +//
  209 +/////////////////////////////////////////////////////////////////////////////////
  210 +/// @name 背景音乐的相关接口
  211 +/// @{
  212 +
  213 +/**
  214 + * 2.1 开始播放背景音乐
  215 + *
  216 + * 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。
  217 + *
  218 + * @note
  219 + * 1. 如果要多次播放同一首背景音乐,请不要每次播放都分配一个新的 ID,我们推荐使用相同的 ID。
  220 + * 2. 若您希望同时播放多首不同的音乐,请为不同的音乐分配不同的 ID 进行播放。
  221 + * 3. 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。
  222 + *
  223 + * @param musicParam 音乐参数
  224 + * @param startBlock 播放开始回调
  225 + * @param progressBlock 播放进度回调
  226 + * @param completeBlock 播放结束回调
  227 + */
  228 +- (void)startPlayMusic:(TXAudioMusicParam *)musicParam onStart:(TXAudioMusicStartBlock _Nullable)startBlock onProgress:(TXAudioMusicProgressBlock _Nullable)progressBlock onComplete:(TXAudioMusicCompleteBlock _Nullable)completeBlock;
  229 +
  230 +/**
  231 + * 2.2 停止播放背景音乐
  232 + *
  233 + * @param id 音乐 ID
  234 + */
  235 +- (void)stopPlayMusic:(int32_t)id;
  236 +
  237 +/**
  238 + * 2.3 暂停播放背景音乐
  239 + *
  240 + * @param id 音乐 ID
  241 + */
  242 +- (void)pausePlayMusic:(int32_t)id;
  243 +
  244 +/**
  245 + * 2.4 恢复播放背景音乐
  246 + *
  247 + * @param id 音乐 ID
  248 + */
  249 +- (void)resumePlayMusic:(int32_t)id;
  250 +
  251 +/**
  252 + * 2.5 设置所有背景音乐的本地音量和远端音量的大小
  253 + *
  254 + * 该接口可以设置所有背景音乐的本地音量和远端音量。
  255 + * - 本地音量:即主播本地可以听到的背景音乐的音量大小。
  256 + * - 远端音量:即观众端可以听到的背景音乐的音量大小。
  257 + *
  258 + * @param volume 音量大小,取值范围为0 - 100,默认值:100。
  259 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  260 + */
  261 +- (void)setAllMusicVolume:(NSInteger)volume;
  262 +
  263 +/**
  264 + * 2.6 设置某一首背景音乐的远端音量的大小
  265 + *
  266 + * 该接口可以细粒度地控制每一首背景音乐的远端音量,也就是观众端可听到的背景音乐的音量大小。
  267 + *
  268 + * @param id 音乐 ID
  269 + * @param volume 音量大小,取值范围为0 - 100;默认值:100
  270 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  271 + */
  272 +- (void)setMusicPublishVolume:(int32_t)id volume:(NSInteger)volume;
  273 +
  274 +/**
  275 + * 2.7 设置某一首背景音乐的本地音量的大小
  276 + *
  277 + * 该接口可以细粒度地控制每一首背景音乐的本地音量,也就是主播本地可以听到的背景音乐的音量大小。
  278 + *
  279 + * @param id 音乐 ID
  280 + * @param volume 音量大小,取值范围为0 - 100,默认值:100。
  281 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  282 + */
  283 +- (void)setMusicPlayoutVolume:(int32_t)id volume:(NSInteger)volume;
  284 +
  285 +/**
  286 + * 2.8 调整背景音乐的音调高低
  287 + *
  288 + * @param id 音乐 ID
  289 + * @param pitch 音调,默认值是0.0f,范围是:[-1 ~ 1] 之间的浮点数;
  290 + */
  291 +- (void)setMusicPitch:(int32_t)id pitch:(double)pitch;
  292 +
  293 +/**
  294 + * 2.9 调整背景音乐的变速效果
  295 + *
  296 + * @param id 音乐 ID
  297 + * @param speedRate 速度,默认值是1.0f,范围是:[0.5 ~ 2] 之间的浮点数;
  298 + */
  299 +- (void)setMusicSpeedRate:(int32_t)id speedRate:(double)speedRate;
  300 +
  301 +/**
  302 + * 2.10 获取背景音乐的播放进度(单位:毫秒)
  303 + *
  304 + * @param id 音乐 ID
  305 + * @return 成功返回当前播放时间,单位:毫秒,失败返回-1
  306 + */
  307 +- (NSInteger)getMusicCurrentPosInMS:(int32_t)id;
  308 +
  309 +/**
  310 + * 2.11 获取背景音乐的总时长(单位:毫秒)
  311 + *
  312 + * @param path 音乐文件路径。
  313 + * @return 成功返回时长,失败返回-1
  314 + */
  315 +- (NSInteger)getMusicDurationInMS:(NSString *)path;
  316 +
  317 +/**
  318 + * 2.12 设置背景音乐的播放进度(单位:毫秒)
  319 + *
  320 + * @note 请尽量避免过度频繁地调用该接口,因为该接口可能会再次读写音乐文件,耗时稍高。
  321 + * 因此,当用户拖拽音乐的播放进度条时,请在用户完成拖拽操作后再调用本接口。
  322 + * 因为 UI 上的进度条控件往往会以很高的频率反馈用户的拖拽进度,如不做频率限制,会导致较差的用户体验。
  323 + *
  324 + * @param id 音乐 ID
  325 + * @param pts 单位: 毫秒
  326 + */
  327 +- (void)seekMusicToPosInMS:(int32_t)id pts:(NSInteger)pts;
  328 +
  329 +/// @}
  330 +@end // End of interface TXAudioEffectManager
  331 +/// @}
  1 +//
  2 +// TXAudioRawDataDelegate.h
  3 +// TXLiteAVSDK
  4 +//
  5 +// Created by realingzhou on 2018/2/24.
  6 +// Copyright © 2018年 Tencent. All rights reserved.
  7 +//
  8 +
  9 +#ifndef TXAudioRawDataDelegate_h
  10 +#define TXAudioRawDataDelegate_h
  11 +
  12 +@protocol TXAudioRawDataDelegate <NSObject>
  13 +
  14 +/**
  15 + * 音频播放信息回调
  16 + *
  17 + * @param sampleRate 采样率
  18 + * @param channels 声道数
  19 + */
  20 +@optional
  21 +- (void)onAudioInfoChanged:(int)sampleRate channels:(int)channels;
  22 +
  23 +/**
  24 + * 音频播放数据回调,数据格式 :PCM
  25 + *
  26 + * <!!!注意!!!> 该函数内不要做耗时操作<!!!注意!!!>
  27 + * 音频播放器会在播放数据的前一刻,调用此函数,同步回调将要播放的数据。因此在函数内部做耗时操作可能会影响播放
  28 + *
  29 + *
  30 + * @param data pcm数据
  31 + * @param timestamp 时间戳。注 :会有连续相同的时间戳回调出来,超过2048字节,时间戳才会变化。
  32 + */
  33 +@optional
  34 +- (void)onPcmDataAvailable:(NSData *)data pts:(unsigned long long)timestamp;
  35 +
  36 +@end
  37 +
  38 +#endif /* TXAudioRawDataDelegate_h */
  1 +/**
  2 + * Module: 美颜与图像处理参数设置类
  3 + * Function: 修改美颜、滤镜、绿幕等参数
  4 + */
  5 +#import <Foundation/Foundation.h>
  6 +#import <TargetConditionals.h>
  7 +#if TARGET_OS_IPHONE
  8 +#import <UIKit/UIKit.h>
  9 +typedef UIImage TXImage;
  10 +#else
  11 +#import <AppKit/AppKit.h>
  12 +typedef NSImage TXImage;
  13 +#endif
  14 +
  15 +NS_ASSUME_NONNULL_BEGIN
  16 +
  17 +/// @defgroup TXBeautyManager_ios TXBeautyManager
  18 +/// 美颜与图像处理参数设置类
  19 +/// @{
  20 +
  21 +/**
  22 + * 美颜(磨皮)算法
  23 + * TRTC 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案。
  24 + */
  25 +typedef NS_ENUM(NSInteger, TXBeautyStyle) {
  26 +
  27 + ///光滑,算法比较激进,磨皮效果比较明显,适用于秀场直播。
  28 + TXBeautyStyleSmooth = 0,
  29 +
  30 + ///自然,算法更多地保留了面部细节,磨皮效果更加自然,适用于绝大多数直播场景。
  31 + TXBeautyStyleNature = 1,
  32 +
  33 + ///优图,由优图实验室提供,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高。
  34 + TXBeautyStylePitu = 2
  35 +};
  36 +
  37 +@interface TXBeautyManager : NSObject
  38 +
  39 +/**
  40 + * 设置美颜(磨皮)算法
  41 + *
  42 + * TRTC 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案:
  43 + *
  44 + * @param beautyStyle 美颜风格,TXBeautyStyleSmooth:光滑;TXBeautyStyleNature:自然;TXBeautyStylePitu:优图。
  45 + */
  46 +- (void)setBeautyStyle:(TXBeautyStyle)beautyStyle;
  47 +
  48 +/**
  49 + * 设置美颜级别
  50 + *
  51 + * @param beautyLevel 美颜级别,取值范围0 - 9; 0表示关闭,9表示效果最明显。
  52 + */
  53 +- (void)setBeautyLevel:(float)beautyLevel;
  54 +
  55 +/**
  56 + * 设置美白级别
  57 + *
  58 + * @param whitenessLevel 美白级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  59 + */
  60 +- (void)setWhitenessLevel:(float)whitenessLevel;
  61 +
  62 +/**
  63 + * 开启清晰度增强
  64 + */
  65 +- (void)enableSharpnessEnhancement:(BOOL)enable;
  66 +
  67 +/**
  68 + * 设置红润级别
  69 + *
  70 + * @param ruddyLevel 红润级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  71 + */
  72 +- (void)setRuddyLevel:(float)ruddyLevel;
  73 +
  74 +/**
  75 + * 设置色彩滤镜效果
  76 + *
  77 + * 色彩滤镜,是一副包含色彩映射关系的颜色查找表图片,您可以在我们提供的官方 Demo 中找到预先准备好的几张滤镜图片。
  78 + * SDK 会根据该查找表中的映射关系,对摄像头采集出的原始视频画面进行二次处理,以达到预期的滤镜效果。
  79 + * @param image 包含色彩映射关系的颜色查找表图片,必须是 png 格式。
  80 + */
  81 +- (void)setFilter:(nullable TXImage *)image;
  82 +
  83 +/**
  84 + * 设置色彩滤镜的强度
  85 + *
  86 + * 该数值越高,色彩滤镜的作用强度越明显,经过滤镜处理后的视频画面跟原画面的颜色差异越大。
  87 + * 我默认的滤镜浓度是0.5,如果您觉得默认的滤镜效果不明显,可以设置为 0.5 以上的数字,最大值为1。
  88 + *
  89 + * @param strength 从0到1,数值越大滤镜效果越明显,默认值为0.5。
  90 + */
  91 +- (void)setFilterStrength:(float)strength;
  92 +
  93 +/**
  94 + * 设置绿幕背景视频,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  95 + *
  96 + * 此接口所开启的绿幕功能不具备智能去除背景的能力,需要被拍摄者的背后有一块绿色的幕布来辅助产生特效。
  97 + *
  98 + * @param path MP4格式的视频文件路径; 设置空值表示关闭特效。
  99 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  100 + */
  101 +- (int)setGreenScreenFile:(nullable NSString *)path;
  102 +
  103 +/**
  104 + * 设置大眼级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  105 + *
  106 + * @param eyeScaleLevel 大眼级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  107 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  108 + */
  109 +#if TARGET_OS_IPHONE
  110 +- (int)setEyeScaleLevel:(float)eyeScaleLevel;
  111 +#endif
  112 +
  113 +/**
  114 + * 设置瘦脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  115 + *
  116 + * @param faceSlimLevel 瘦脸级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  117 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  118 + */
  119 +#if TARGET_OS_IPHONE
  120 +- (int)setFaceSlimLevel:(float)faceSlimLevel;
  121 +#endif
  122 +
  123 +/**
  124 + * 设置 V 脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  125 + *
  126 + * @param faceVLevel V脸级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  127 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  128 + */
  129 +#if TARGET_OS_IPHONE
  130 +- (int)setFaceVLevel:(float)faceVLevel;
  131 +#endif
  132 +
  133 +/**
  134 + * 设置下巴拉伸或收缩,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  135 + *
  136 + * @param chinLevel 下巴拉伸或收缩级别,取值范围-9 - 9;0 表示关闭,小于0表示收缩,大于0表示拉伸。
  137 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  138 + */
  139 +#if TARGET_OS_IPHONE
  140 +- (int)setChinLevel:(float)chinLevel;
  141 +#endif
  142 +
  143 +/**
  144 + * 设置短脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  145 + *
  146 + * @param faceShortLevel 短脸级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  147 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  148 + */
  149 +#if TARGET_OS_IPHONE
  150 +- (int)setFaceShortLevel:(float)faceShortLevel;
  151 +#endif
  152 +
  153 +/**
  154 + * 设置窄脸级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  155 + *
  156 + * @param level 窄脸级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  157 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  158 + */
  159 +#if TARGET_OS_IPHONE
  160 +- (int)setFaceNarrowLevel:(float)faceNarrowLevel;
  161 +#endif
  162 +
  163 +/**
  164 + * 设置瘦鼻级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  165 + *
  166 + * @param noseSlimLevel 瘦鼻级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  167 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  168 + */
  169 +#if TARGET_OS_IPHONE
  170 +- (int)setNoseSlimLevel:(float)noseSlimLevel;
  171 +#endif
  172 +
  173 +/**
  174 + * 设置亮眼级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  175 + *
  176 + * @param eyeLightenLevel 亮眼级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  177 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  178 + */
  179 +#if TARGET_OS_IPHONE
  180 +- (int)setEyeLightenLevel:(float)eyeLightenLevel;
  181 +#endif
  182 +
  183 +/**
  184 + * 设置牙齿美白级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  185 + *
  186 + * @param toothWhitenLevel 白牙级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  187 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  188 + */
  189 +#if TARGET_OS_IPHONE
  190 +- (int)setToothWhitenLevel:(float)toothWhitenLevel;
  191 +#endif
  192 +
  193 +/**
  194 + * 设置祛皱级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  195 + *
  196 + * @param wrinkleRemoveLevel 祛皱级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  197 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  198 + */
  199 +#if TARGET_OS_IPHONE
  200 +- (int)setWrinkleRemoveLevel:(float)wrinkleRemoveLevel;
  201 +#endif
  202 +
  203 +/**
  204 + * 设置祛眼袋级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  205 + *
  206 + * @param pounchRemoveLevel 祛眼袋级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  207 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  208 + */
  209 +#if TARGET_OS_IPHONE
  210 +- (int)setPounchRemoveLevel:(float)pounchRemoveLevel;
  211 +#endif
  212 +
  213 +/**
  214 + * 设置法令纹去除级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  215 + *
  216 + * @param smileLinesRemoveLevel 法令纹级别,取值范围0 - 9;0表示关闭,9表示效果最明显。
  217 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  218 + */
  219 +#if TARGET_OS_IPHONE
  220 +- (int)setSmileLinesRemoveLevel:(float)smileLinesRemoveLevel;
  221 +#endif
  222 +
  223 +/**
  224 + * 设置发际线调整级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  225 + *
  226 + * @param foreheadLevel 发际线级别,取值范围-9 - 9;0表示关闭,9表示效果最明显。
  227 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  228 + */
  229 +#if TARGET_OS_IPHONE
  230 +- (int)setForeheadLevel:(float)foreheadLevel;
  231 +#endif
  232 +
  233 +/**
  234 + * 设置眼距,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  235 + *
  236 + * @param eyeDistanceLevel 眼距级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
  237 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  238 + */
  239 +#if TARGET_OS_IPHONE
  240 +- (int)setEyeDistanceLevel:(float)eyeDistanceLevel;
  241 +#endif
  242 +
  243 +/**
  244 + * 设置眼角调整级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  245 + *
  246 + * @param eyeAngleLevel 眼角调整级别,取值范围-9 - 9;0表示关闭,9表示效果最明显。
  247 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  248 + */
  249 +#if TARGET_OS_IPHONE
  250 +- (int)setEyeAngleLevel:(float)eyeAngleLevel;
  251 +#endif
  252 +
  253 +/**
  254 + * 设置嘴型调整级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  255 + *
  256 + * @param mouthShapeLevel 嘴型级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
  257 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  258 + */
  259 +#if TARGET_OS_IPHONE
  260 +- (int)setMouthShapeLevel:(float)mouthShapeLevel;
  261 +#endif
  262 +
  263 +/**
  264 + * 设置鼻翼调整级别,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  265 + *
  266 + * @param noseWingLevel 鼻翼调整级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
  267 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  268 + */
  269 +#if TARGET_OS_IPHONE
  270 +- (int)setNoseWingLevel:(float)noseWingLevel;
  271 +#endif
  272 +
  273 +/**
  274 + * 设置鼻子位置,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  275 + *
  276 + * @param nosePositionLevel 鼻子位置级别,取值范围-9 - 9;0表示关闭,小于0表示抬高,大于0表示降低。
  277 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  278 + */
  279 +#if TARGET_OS_IPHONE
  280 +- (int)setNosePositionLevel:(float)nosePositionLevel;
  281 +#endif
  282 +
  283 +/**
  284 + * 设置嘴唇厚度,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  285 + *
  286 + * @param lipsThicknessLevel 嘴唇厚度级别,取值范围-9 - 9;0表示关闭,小于0表示拉伸,大于0表示收缩。
  287 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  288 + */
  289 +#if TARGET_OS_IPHONE
  290 +- (int)setLipsThicknessLevel:(float)lipsThicknessLevel;
  291 +#endif
  292 +
  293 +/**
  294 + * 设置脸型,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  295 + *
  296 + * @param faceBeautyLevel 美型级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  297 + * @return 0:成功;-5:当前 License 对应 feature 不支持。
  298 + */
  299 +#if TARGET_OS_IPHONE
  300 +- (int)setFaceBeautyLevel:(float)faceBeautyLevel;
  301 +#endif
  302 +
  303 +/**
  304 + * 选择 AI 动效挂件,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  305 + *
  306 + * @param tmplName 动效挂件名称
  307 + * @param tmplDir 动效素材文件所在目录
  308 + */
  309 +#if TARGET_OS_IPHONE
  310 +- (void)setMotionTmpl:(nullable NSString *)tmplName inDir:(nullable NSString *)tmplDir;
  311 +#endif
  312 +
  313 +/**
  314 + * 是否在动效素材播放时静音,该接口仅在 [企业版 SDK](https://cloud.tencent.com/document/product/647/32689#Enterprise) 中生效
  315 + * 有些挂件本身会有声音特效,通过此 API 可以关闭这些特效播放时所带的声音效果。
  316 + *
  317 + * @param motionMute YES:静音;NO:不静音。
  318 + */
  319 +#if TARGET_OS_IPHONE
  320 +- (void)setMotionMute:(BOOL)motionMute;
  321 +#endif
  322 +
  323 +@end
  324 +/// @}
  325 +
  326 +NS_ASSUME_NONNULL_END
  1 +/**
  2 + * Module: TRTC 音视频设备管理模块
  3 + * Function: 用于管理摄像头、麦克风和扬声器等音视频相关的硬件设备
  4 + */
  5 +/// @defgroup TXDeviceManager_ios TXDeviceManager
  6 +/// TRTC 音视频设备管理模块
  7 +/// @{
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +#if TARGET_OS_IPHONE
  11 +#import <UIKit/UIKit.h>
  12 +#elif TARGET_OS_MAC
  13 +#import <AppKit/AppKit.h>
  14 +#endif
  15 +
  16 +/////////////////////////////////////////////////////////////////////////////////
  17 +//
  18 +// 音视频设备相关的类型定义
  19 +//
  20 +/////////////////////////////////////////////////////////////////////////////////
  21 +/// @name 音视频设备相关的类型定义
  22 +/// @{
  23 +
  24 +/**
  25 + * 系统音量类型(仅适用于移动设备)
  26 + *
  27 + * @deprecated v9.5 版本开始不推荐使用。
  28 + *
  29 + * 现代智能手机中一般都具备两套系统音量类型,即“通话音量”和“媒体音量”。
  30 + * - 通话音量:手机专门为接打电话所设计的音量类型,自带回声抵消(AEC)功能,并且支持通过蓝牙耳机上的麦克风进行拾音,缺点是音质比较一般。
  31 + * 当您通过手机侧面的音量按键下调手机音量时,如果无法将其调至零(也就是无法彻底静音),说明您的手机当前出于通话音量。
  32 + * - 媒体音量:手机专门为音乐场景所设计的音量类型,无法使用系统的 AEC 功能,并且不支持通过蓝牙耳机的麦克风进行拾音,但具备更好的音乐播放效果。
  33 + * 当您通过手机侧面的音量按键下调手机音量时,如果能够将手机音量调至彻底静音,说明您的手机当前出于媒体音量。
  34 + *
  35 + * SDK 目前提供了三种系统音量类型的控制模式:自动切换模式、全程通话音量模式、全程媒体音量模式。
  36 + */
  37 +#if TARGET_OS_IPHONE
  38 +typedef NS_ENUM(NSInteger, TXSystemVolumeType) {
  39 +
  40 + ///自动切换模式
  41 + TXSystemVolumeTypeAuto = 0,
  42 +
  43 + ///全程媒体音量
  44 + TXSystemVolumeTypeMedia = 1,
  45 +
  46 + ///全程通话音量
  47 + TXSystemVolumeTypeVOIP = 2,
  48 +
  49 +};
  50 +#endif
  51 +
  52 +/**
  53 + * 音频路由(即声音的播放模式)
  54 + *
  55 + * 音频路由,即声音是从手机的扬声器还是从听筒中播放出来,因此该接口仅适用于手机等移动端设备。
  56 + * 手机有两个扬声器:一个是位于手机顶部的听筒,一个是位于手机底部的立体声扬声器。
  57 + * - 设置音频路由为听筒时,声音比较小,只有将耳朵凑近才能听清楚,隐私性较好,适合用于接听电话。
  58 + * - 设置音频路由为扬声器时,声音比较大,不用将手机贴脸也能听清,因此可以实现“免提”的功能。
  59 + */
  60 +#if TARGET_OS_IPHONE
  61 +typedef NS_ENUM(NSInteger, TXAudioRoute) {
  62 +
  63 + /// Speakerphone:使用扬声器播放(即“免提”),扬声器位于手机底部,声音偏大,适合外放音乐。
  64 + TXAudioRouteSpeakerphone = 0,
  65 +
  66 + /// Earpiece:使用听筒播放,听筒位于手机顶部,声音偏小,适合需要保护隐私的通话场景。
  67 + TXAudioRouteEarpiece = 1,
  68 +
  69 +};
  70 +#endif
  71 +
  72 +/**
  73 + * 设备类型(仅适用于桌面平台)
  74 + *
  75 + * 该枚举值用于定义三种类型的音视频设备,即摄像头、麦克风和扬声器,以便让一套设备管理接口可以操控三种不同类型的设备。
  76 + */
  77 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  78 +typedef NS_ENUM(NSInteger, TXMediaDeviceType) {
  79 + TXMediaDeviceTypeUnknown = -1, ///< undefined device type
  80 + TXMediaDeviceTypeAudioInput = 0, ///< microphone
  81 + TXMediaDeviceTypeAudioOutput = 1, ///< speaker or earpiece
  82 + TXMediaDeviceTypeVideoCamera = 2, ///< camera
  83 +};
  84 +#endif
  85 +
  86 +/**
  87 + * 设备操作
  88 + *
  89 + * 该枚举值用于本地设备的状态变化通知{@link onDeviceChanged}。
  90 + */
  91 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  92 +typedef NS_ENUM(NSInteger, TXMediaDeviceState) {
  93 +
  94 + ///设备已被插入
  95 + TXMediaDeviceStateAdd = 0,
  96 +
  97 + ///设备已被移除
  98 + TXMediaDeviceStateRemove = 1,
  99 +
  100 + ///设备已启用
  101 + TXMediaDeviceStateActive = 2,
  102 +
  103 +};
  104 +#endif
  105 +
  106 +/**
  107 + * 音视频设备的相关信息(仅适用于桌面平台)
  108 + *
  109 + * 该结构体用于描述一个音视频设备的关键信息,比如设备ID、设备名称等等,以便用户能够在用户界面上选择自己期望使用的音视频设备。
  110 + */
  111 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  112 +@interface TXMediaDeviceInfo : NSObject
  113 +/// device type
  114 +@property(assign, nonatomic) TXMediaDeviceType type;
  115 +/// device id
  116 +@property(copy, nonatomic, nullable) NSString *deviceId;
  117 +/// device name
  118 +@property(copy, nonatomic, nullable) NSString *deviceName;
  119 +/// device properties
  120 +@property(copy, nonatomic, nullable) NSString *deviceProperties;
  121 +@end
  122 +#endif
  123 +/// @}
  124 +
  125 +/**
  126 + * 本地设备的通断状态发生变化(仅适用于桌面系统)
  127 + *
  128 + * 当本地设备(包括摄像头、麦克风以及扬声器)被插入或者拔出时,SDK 便会抛出此事件回调。
  129 + *
  130 + * @param deviceId 设备 ID
  131 + * @param type 设备类型
  132 + * @param state 通断状态,0:设备已添加;1:设备已被移除;2:设备已启用。
  133 + */
  134 +#if TARGET_OS_MAC && !TARGET_OS_IPHONE
  135 +@protocol TXDeviceObserver <NSObject>
  136 +
  137 +- (void)onDeviceChanged:(NSString *)deviceId type:(TXMediaDeviceType)mediaType state:(TXMediaDeviceState)mediaState;
  138 +
  139 +@end
  140 +#endif
  141 +
  142 +@interface TXDeviceManager : NSObject
  143 +
  144 +/////////////////////////////////////////////////////////////////////////////////
  145 +//
  146 +// 移动端设备操作接口(iOS Android)
  147 +//
  148 +/////////////////////////////////////////////////////////////////////////////////
  149 +/// @name 移动端设备操作接口
  150 +/// @{
  151 +
  152 +/**
  153 + * 1.1 判断当前是否为前置摄像头(仅适用于移动端)
  154 + */
  155 +#if TARGET_OS_IPHONE
  156 +- (BOOL)isFrontCamera;
  157 +
  158 +/**
  159 + * 1.2 切换前置或后置摄像头(仅适用于移动端)
  160 + */
  161 +- (NSInteger)switchCamera:(BOOL)frontCamera;
  162 +
  163 +/**
  164 + * 1.3 查询当前摄像头是否支持缩放(仅适用于移动端)
  165 + */
  166 +- (BOOL)isCameraZoomSupported;
  167 +
  168 +/**
  169 + * 1.3 获取摄像头的最大缩放倍数(仅适用于移动端)
  170 + */
  171 +- (CGFloat)getCameraZoomMaxRatio;
  172 +
  173 +/**
  174 + * 1.4 设置摄像头的缩放倍数(仅适用于移动端)
  175 + *
  176 + * @param zoomRatio 取值范围1 - 5,取值为1表示最远视角(正常镜头),取值为5表示最近视角(放大镜头)。
  177 + */
  178 +- (NSInteger)setCameraZoomRatio:(CGFloat)zoomRatio;
  179 +
  180 +/**
  181 + * 1.5 查询是否支持自动识别人脸位置(仅适用于移动端)
  182 + */
  183 +- (BOOL)isAutoFocusEnabled;
  184 +
  185 +/**
  186 + * 1.6 开启自动对焦功能(仅适用于移动端)
  187 + *
  188 + * 开启后,SDK 会自动检测画面中的人脸位置,并将摄像头的焦点始终对焦在人脸位置上。
  189 + */
  190 +- (NSInteger)enableCameraAutoFocus:(BOOL)enabled;
  191 +
  192 +/**
  193 + * 1.7 设置摄像头的对焦位置(仅适用于移动端)
  194 + *
  195 + * 您可以通过该接口实现如下交互:
  196 + * 1. 在本地摄像头的预览画面上,允许用户单击操作。
  197 + * 2. 在用户的单击位置显示一个矩形方框,以示摄像头会在此处对焦。
  198 + * 3. 随后将用户点击位置的坐标通过本接口传递给 SDK,之后 SDK 会操控摄像头按照用户期望的位置进行对焦。
  199 + * @note 使用该接口的前提是先通过 {@link enableCameraAutoFocus} 关闭自动对焦功能。
  200 + * @param position 对焦位置,请传入期望对焦点的坐标值
  201 + * @return 0:操作成功;负数:操作失败。
  202 + */
  203 +- (NSInteger)setCameraFocusPosition:(CGPoint)position;
  204 +
  205 +/**
  206 + * 1.8 查询是否支持开启闪光灯(仅适用于移动端)
  207 + */
  208 +- (BOOL)isCameraTorchSupported;
  209 +
  210 +/**
  211 + * 1.8 开启/关闭闪光灯,也就是手电筒模式(仅适用于移动端)
  212 + */
  213 +- (NSInteger)enableCameraTorch:(BOOL)enabled;
  214 +
  215 +/**
  216 + * 1.9 设置音频路由(仅适用于移动端)
  217 + *
  218 + * 手机有两个音频播放设备:一个是位于手机顶部的听筒,一个是位于手机底部的立体声扬声器。
  219 + * 设置音频路由为听筒时,声音比较小,只有将耳朵凑近才能听清楚,隐私性较好,适合用于接听电话。
  220 + * 设置音频路由为扬声器时,声音比较大,不用将手机贴脸也能听清,因此可以实现“免提”的功能。
  221 + */
  222 +- (NSInteger)setAudioRoute:(TXAudioRoute)route;
  223 +#endif
  224 +
  225 +/// @}
  226 +/////////////////////////////////////////////////////////////////////////////////
  227 +//
  228 +// 桌面端设备操作接口(Windows Mac)
  229 +//
  230 +/////////////////////////////////////////////////////////////////////////////////
  231 +/// @name 桌面端设备操作接口
  232 +/// @{
  233 +
  234 +/**
  235 + * 2.1 获取设备列表(仅适用于桌面端)
  236 + *
  237 + * @param type 设备类型,指定需要获取哪种设备的列表。详见 TXMediaDeviceType 定义。
  238 + * @note
  239 + * - 使用完毕后请调用 release 方法释放资源,这样可以让 SDK 维护 ITXDeviceCollection 对象的生命周期。
  240 + * - 不要使用 delete 释放返回的 Collection 对象,delete ITXDeviceCollection* 指针会导致异常崩溃。
  241 + * - type 只支持 TXMediaDeviceTypeMic、TXMediaDeviceTypeSpeaker、TXMediaDeviceTypeCamera。
  242 + * - 此接口只支持 Mac 和 Windows 平台
  243 + */
  244 +#if !TARGET_OS_IPHONE && TARGET_OS_MAC
  245 +- (NSArray<TXMediaDeviceInfo *> *_Nullable)getDevicesList:(TXMediaDeviceType)type;
  246 +
  247 +/**
  248 + * 2.2 设置当前要使用的设备(仅适用于桌面端)
  249 + *
  250 + * @param type 设备类型,详见 TXMediaDeviceType 定义。
  251 + * @param deviceId 设备ID,您可以通过接口 {@link getDevicesList} 获得设备 ID。
  252 + * @return 0:操作成功;负数:操作失败。
  253 + */
  254 +- (NSInteger)setCurrentDevice:(TXMediaDeviceType)type deviceId:(NSString *)deviceId;
  255 +
  256 +/**
  257 + * 2.3 获取当前正在使用的设备(仅适用于桌面端)
  258 + */
  259 +- (TXMediaDeviceInfo *_Nullable)getCurrentDevice:(TXMediaDeviceType)type;
  260 +
  261 +/**
  262 + * 2.4 设置当前设备的音量(仅适用于桌面端)
  263 + *
  264 + * 这里的音量指的是麦克风的采集音量或者扬声器的播放音量,摄像头是不支持设置音量的。
  265 + *
  266 + * @param volume 音量大小,取值范围为0 - 100,默认值:100。
  267 + * @note 如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
  268 + */
  269 +- (NSInteger)setCurrentDeviceVolume:(NSInteger)volume deviceType:(TXMediaDeviceType)type;
  270 +
  271 +/**
  272 + * 2.5 获取当前设备的音量(仅适用于桌面端)
  273 + *
  274 + * 这里的音量指的是麦克风的采集音量或者扬声器的播放音量,摄像头是不支持获取音量的。
  275 + */
  276 +- (NSInteger)getCurrentDeviceVolume:(TXMediaDeviceType)type;
  277 +
  278 +/**
  279 + * 2.6 设置当前设备的静音状态(仅适用于桌面端)
  280 + *
  281 + * 这里的音量指的是麦克风和扬声器,摄像头是不支持静音操作的。
  282 + */
  283 +- (NSInteger)setCurrentDeviceMute:(BOOL)mute deviceType:(TXMediaDeviceType)type;
  284 +
  285 +/**
  286 + * 2.7 获取当前设备的静音状态(仅适用于桌面端)
  287 + *
  288 + * 这里的音量指的是麦克风和扬声器,摄像头是不支持静音操作的。
  289 + */
  290 +- (BOOL)getCurrentDeviceMute:(TXMediaDeviceType)type;
  291 +
  292 +/**
  293 + * 2.8 开始摄像头测试(仅适用于桌面端)
  294 + *
  295 + * @note 在测试过程中可以使用 {@link setCurrentDevice} 接口切换摄像头。
  296 + */
  297 +- (NSInteger)startCameraDeviceTest:(NSView *)view;
  298 +
  299 +/**
  300 + * 2.9 结束摄像头测试(仅适用于桌面端)
  301 + */
  302 +- (NSInteger)stopCameraDeviceTest;
  303 +
  304 +/**
  305 + * 2.10 开始麦克风测试(仅适用于桌面端)
  306 + *
  307 + * 该接口可以测试麦克风是否能正常工作,测试到的麦克风采集音量的大小,会以回调的形式通知给您,其中 volume 的取值范围为0 - 100。
  308 + * @param interval 麦克风音量的回调间隔。
  309 + */
  310 +- (NSInteger)startMicDeviceTest:(NSInteger)interval testEcho:(void (^)(NSInteger volume))testEcho;
  311 +
  312 +/**
  313 + * 2.11 结束麦克风测试(仅适用于桌面端)
  314 + */
  315 +- (NSInteger)stopMicDeviceTest;
  316 +
  317 +/**
  318 + * 2.12 开始扬声器测试(仅适用于桌面端)
  319 + *
  320 + * 该接口通过播放指定的音频文件,用于测试播放设备是否能正常工作。如果用户在测试时能听到声音,说明播放设备能正常工作。
  321 + * @param filePath 声音文件的路径
  322 + */
  323 +- (NSInteger)startSpeakerDeviceTest:(NSString *)audioFilePath onVolumeChanged:(void (^)(NSInteger volume, BOOL isLastFrame))volumeBlock;
  324 +
  325 +/**
  326 + * 2.13 结束扬声器测试(仅适用于桌面端)
  327 + */
  328 +- (NSInteger)stopSpeakerDeviceTest;
  329 +
  330 +/**
  331 + * 2.14 设备热插拔回调(仅适用于 Mac 系统)
  332 + */
  333 +- (void)setObserver:(nullable id<TXDeviceObserver>)observer;
  334 +#endif
  335 +
  336 +/// @}
  337 +/////////////////////////////////////////////////////////////////////////////////
  338 +//
  339 +// 弃用接口(建议使用对应的新接口)
  340 +//
  341 +/////////////////////////////////////////////////////////////////////////////////
  342 +/// @name 弃用接口(建议使用对应的新接口)
  343 +/// @{
  344 +
  345 +/**
  346 + * 设置系统音量类型(仅适用于移动端)
  347 + *
  348 + * @deprecated v9.5 版本开始不推荐使用,建议使用 {@link TRTCCloud} 中的 startLocalAudio(quality) 接口替代之,通过 quality 参数来决策音质。
  349 + */
  350 +#if TARGET_OS_IPHONE
  351 +- (NSInteger)setSystemVolumeType:(TXSystemVolumeType)type __attribute__((deprecated("use TRTCCloud#startLocalAudio:quality instead")));
  352 +#endif
  353 +
  354 +/// @}
  355 +@end
  356 +/// @}
  1 +
  2 +
  3 +#ifndef TXLiteAVBuffer_h
  4 +#define TXLiteAVBuffer_h
  5 +
  6 +#include <stdio.h>
  7 +#include <stdlib.h>
  8 +#include <stdint.h>
  9 +
  10 +namespace liteav {
  11 +
  12 +/**
  13 + * Buffer 数据类型
  14 + */
  15 +class TXLiteAVBuffer {
  16 +
  17 +public:
  18 + virtual ~TXLiteAVBuffer() {}
  19 +
  20 + /**
  21 + * 获取 buffer 的内存地址
  22 + */
  23 + virtual uint8_t * data() = 0;
  24 +
  25 + /**
  26 + * 获取 buffer 的内存地址
  27 + */
  28 + virtual const uint8_t * cdata() const = 0;
  29 +
  30 + /**
  31 + * 获取 buffer 的内存size
  32 + */
  33 + virtual size_t size() const = 0;
  34 +
  35 + /**
  36 + * 设置 buffe 的有效数据 size
  37 + * 如果此 size 超过当前 capacity,会造成重新分配内存,并复制数据
  38 + */
  39 + virtual void SetSize(size_t size) = 0;
  40 +
  41 + /**
  42 + * 确保 buffer 分配的内存空间足够,不用多次分配拷贝内存。此方法会引起内存分配,data / cdata 方法获取的指针失效
  43 + * @param capacity buffer 预分配的内存size
  44 + */
  45 + virtual void EnsureCapacity(size_t capacity) = 0;
  46 +};
  47 +}
  48 +
  49 +#endif /* TXLiteAVBuffer_h */
  1 +#ifndef __TXLITEAVCODE_H__
  2 +#define __TXLITEAVCODE_H__
  3 +
  4 +/////////////////////////////////////////////////////////////////////////////////
  5 +//
  6 +// 错误码
  7 +//
  8 +/////////////////////////////////////////////////////////////////////////////////
  9 +
  10 +typedef enum TXLiteAVError
  11 +{
  12 + /////////////////////////////////////////////////////////////////////////////////
  13 + //
  14 + // 基础错误码
  15 + //
  16 + /////////////////////////////////////////////////////////////////////////////////
  17 + ERR_NULL = 0, ///< 无错误
  18 +
  19 + /////////////////////////////////////////////////////////////////////////////////
  20 + //
  21 + // 进房(enterRoom)相关错误码
  22 + // NOTE: 通过回调函数 TRTCCloudDelegate##onEnterRoom() 和 TRTCCloudDelegate##OnError() 通知
  23 + //
  24 + /////////////////////////////////////////////////////////////////////////////////
  25 + ERR_ROOM_ENTER_FAIL = -3301, ///< 进入房间失败,请查看 onError 中的 -3301 对应的 msg 提示确认失败原因
  26 + ERR_ROOM_REQUEST_IP_TIMEOUT = -3307, ///< 请求 IP 和 sig 超时,请检查网络是否正常,或网络防火墙是否放行 UDP。可尝试访问下列 IP:162.14.22.165:8000 162.14.6.105:8000 和域名:default-query.trtc.tencent-cloud.com:8000
  27 + ERR_ROOM_REQUEST_ENTER_ROOM_TIMEOUT = -3308, ///< 请求进房超时,请检查是否断网或者是否开启vpn,您也可以切换4G进行测试确认
  28 + ERR_ENTER_ROOM_PARAM_NULL = -3316, ///< 进房参数为空,请检查: enterRoom:appScene: 接口调用是否传入有效的 param
  29 + ERR_SDK_APPID_INVALID = -3317, ///< 进房参数 sdkAppId 错误,请检查 TRTCParams.sdkAppId 是否为空
  30 + ERR_ROOM_ID_INVALID = -3318, ///< 进房参数 roomId 错误,请检查 TRTCParams.roomId 或 TRTCParams.strRoomId 是否为空,注意 roomId 和 strRoomId 不可混用
  31 + ERR_USER_ID_INVALID = -3319, ///< 进房参数 userId 不正确,请检查 TRTCParams.userId 是否为空
  32 + ERR_USER_SIG_INVALID = -3320, ///< 进房参数 userSig 不正确,请检查 TRTCParams.userSig 是否为空
  33 + ERR_ROOM_REQUEST_ENTER_ROOM_REFUSED = -3340, ///< 进房请求被拒绝,请检查是否连续调用 enterRoom 进入相同 Id 的房间
  34 + ERR_SERVER_INFO_PRIVILEGE_FLAG_ERROR = -100006, ///< 您开启了高级权限控制,但参数 TRTCParams.privateMapKey 校验失败,您可参考 https://cloud.tencent.com/document/product/647/32240 进行检查
  35 + ERR_SERVER_INFO_SERVICE_SUSPENDED = -100013, ///< 服务不可用。请检查:套餐包剩余分钟数是否大于0,腾讯云账号是否欠费。您可参考 https://cloud.tencent.com/document/product/647/50492 进行查看与配置
  36 + ERR_SERVER_INFO_ECDH_GET_TINYID = -100018, ///< UserSig 校验失败,请检查参数 TRTCParams.userSig 是否填写正确,或是否已经过期。您可参考 https://cloud.tencent.com/document/product/647/50686 进行校验
  37 +
  38 + /////////////////////////////////////////////////////////////////////////////////
  39 + //
  40 + // 退房(exitRoom)相关错误码
  41 + // NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
  42 + //
  43 + /////////////////////////////////////////////////////////////////////////////////
  44 + ERR_ROOM_REQUEST_QUIT_ROOM_TIMEOUT = -3325, ///< 请求退房超时
  45 +
  46 + /////////////////////////////////////////////////////////////////////////////////
  47 + //
  48 + // 设备(摄像头、麦克风、扬声器)相关错误码
  49 + // NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
  50 + // 区段:-6000 ~ -6999
  51 + //
  52 + /////////////////////////////////////////////////////////////////////////////////
  53 + ERR_CAMERA_START_FAIL = -1301, ///< 打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
  54 + ERR_CAMERA_NOT_AUTHORIZED = -1314, ///< 摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
  55 + ERR_CAMERA_SET_PARAM_FAIL = -1315, ///< 摄像头参数设置出错(参数不支持或其它)
  56 + ERR_CAMERA_OCCUPY = -1316, ///< 摄像头正在被占用中,可尝试打开其他摄像头
  57 + ERR_MIC_START_FAIL = -1302, ///< 打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
  58 + ERR_MIC_NOT_AUTHORIZED = -1317, ///< 麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
  59 + ERR_MIC_SET_PARAM_FAIL = -1318, ///< 麦克风设置参数失败
  60 + ERR_MIC_OCCUPY = -1319, ///< 麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败
  61 + ERR_MIC_STOP_FAIL = -1320, ///< 停止麦克风失败
  62 + ERR_SPEAKER_START_FAIL = -1321, ///< 打开扬声器失败,例如在 Windows 或 Mac 设备,扬声器的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序
  63 + ERR_SPEAKER_SET_PARAM_FAIL = -1322, ///< 扬声器设置参数失败
  64 + ERR_SPEAKER_STOP_FAIL = -1323, ///< 停止扬声器失败
  65 +
  66 + /////////////////////////////////////////////////////////////////////////////////
  67 + //
  68 + // 系统声音采集相关错误码
  69 + // NOTE: 通过回调函数 TRTCCloudDelegate##onSystemAudioLoopbackError() 通知
  70 + //
  71 + /////////////////////////////////////////////////////////////////////////////////
  72 + ERR_AUDIO_PLUGIN_START_FAIL = -1330, ///< 开启系统声音录制失败,例如音频驱动插件不可用
  73 + ERR_AUDIO_PLUGIN_INSTALL_NOT_AUTHORIZED = -1331, ///< 安装音频驱动插件未授权
  74 + ERR_AUDIO_PLUGIN_INSTALL_FAILED = -1332, ///< 安装音频驱动插件失败
  75 +
  76 + /////////////////////////////////////////////////////////////////////////////////
  77 + //
  78 + // 屏幕分享相关错误码
  79 + // NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
  80 + //
  81 + /////////////////////////////////////////////////////////////////////////////////
  82 + ERR_SCREEN_CAPTURE_START_FAIL = -1308, ///< 开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了,如果在 Windows 或 Mac 系统的设备出现,请检查录屏接口的参数是否符合要求
  83 + ERR_SCREEN_CAPTURE_UNSURPORT = -1309, ///< 录屏失败,在 Android 平台,需要5.0以上的系统,在 iOS 平台,需要11.0以上的系统
  84 + ERR_SERVER_CENTER_NO_PRIVILEDGE_PUSH_SUB_VIDEO = -102015, ///< 没有权限上行辅路
  85 + ERR_SERVER_CENTER_ANOTHER_USER_PUSH_SUB_VIDEO = -102016, ///< 其他用户正在上行辅路
  86 + ERR_SCREEN_CAPTURE_STOPPED = -7001, ///< 录屏被系统中止
  87 +
  88 + /////////////////////////////////////////////////////////////////////////////////
  89 + //
  90 + // 编解码相关错误码
  91 + // NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
  92 + //
  93 + /////////////////////////////////////////////////////////////////////////////////
  94 + ERR_VIDEO_ENCODE_FAIL = -1303, ///< 视频帧编码失败,例如 iOS 设备切换到其他应用时,硬编码器可能被系统释放,再切换回来时,硬编码器重启前,可能会抛出
  95 + ERR_UNSUPPORTED_RESOLUTION = -1305, ///< 不支持的视频分辨率
  96 + ERR_AUDIO_ENCODE_FAIL = -1304, ///< 音频帧编码失败,例如传入自定义音频数据,SDK 无法处理
  97 + ERR_UNSUPPORTED_SAMPLERATE = -1306, ///< 不支持的音频采样率
  98 +
  99 + /////////////////////////////////////////////////////////////////////////////////
  100 + //
  101 + // 自定义采集相关错误码
  102 + // NOTE: 通过回调函数 TRTCCloudDelegate##OnError() 通知
  103 + //
  104 + /////////////////////////////////////////////////////////////////////////////////
  105 + ERR_PIXEL_FORMAT_UNSUPPORTED = -1327, ///< 设置的 pixel format 不支持
  106 + ERR_BUFFER_TYPE_UNSUPPORTED = -1328, ///< 设置的 buffer type 不支持
  107 +
  108 + /////////////////////////////////////////////////////////////////////////////////
  109 + //
  110 + // CDN 绑定和混流相关错误码
  111 + // NOTE: 通过回调函数 TRTCCloudDelegate##onStartPublishing() 和 TRTCCloudDelegate##onSetMixTranscodingConfig 通知。
  112 + //
  113 + /////////////////////////////////////////////////////////////////////////////////
  114 + ERR_PUBLISH_CDN_STREAM_REQUEST_TIME_OUT = -3321, ///< 旁路转推请求超时
  115 + ERR_CLOUD_MIX_TRANSCODING_REQUEST_TIME_OUT = -3322, ///< 云端混流请求超时
  116 + ERR_PUBLISH_CDN_STREAM_SERVER_FAILED = -3323, ///< 旁路转推回包异常
  117 + ERR_CLOUD_MIX_TRANSCODING_SERVER_FAILED = -3324, ///< 云端混流回包异常
  118 + ERR_ROOM_REQUEST_START_PUBLISHING_TIMEOUT = -3333, ///< 开始向腾讯云的直播 CDN 推流信令超时
  119 + ERR_ROOM_REQUEST_START_PUBLISHING_ERROR = -3334, ///< 开始向腾讯云的直播 CDN 推流信令异常
  120 + ERR_ROOM_REQUEST_STOP_PUBLISHING_TIMEOUT = -3335, ///< 停止向腾讯云的直播 CDN 推流信令超时
  121 + ERR_ROOM_REQUEST_STOP_PUBLISHING_ERROR = -3336, ///< 停止向腾讯云的直播 CDN 推流信令异常
  122 +
  123 + /////////////////////////////////////////////////////////////////////////////////
  124 + //
  125 + // 跨房连麦(ConnectOtherRoom)相关错误码
  126 + // NOTE: 通过回调函数 TRTCCloudDelegate##onConnectOtherRoom() 通知。
  127 + //
  128 + /////////////////////////////////////////////////////////////////////////////////
  129 + ERR_ROOM_REQUEST_CONN_ROOM_TIMEOUT = -3326, ///< 请求连麦超时
  130 + ERR_ROOM_REQUEST_DISCONN_ROOM_TIMEOUT = -3327, ///< 请求退出连麦超时
  131 + ERR_ROOM_REQUEST_CONN_ROOM_INVALID_PARAM = -3328, ///< 无效参数
  132 + ERR_CONNECT_OTHER_ROOM_AS_AUDIENCE = -3330, ///< 当前是观众角色,不能请求或断开跨房连麦,需要先 switchRole() 到主播
  133 + ERR_SERVER_CENTER_CONN_ROOM_NOT_SUPPORT = -102031, ///< 不支持跨房间连麦
  134 + ERR_SERVER_CENTER_CONN_ROOM_REACH_MAX_NUM = -102032, ///< 达到跨房间连麦上限
  135 + ERR_SERVER_CENTER_CONN_ROOM_REACH_MAX_RETRY_TIMES = -102033, ///< 跨房间连麦重试次数耗尽
  136 + ERR_SERVER_CENTER_CONN_ROOM_REQ_TIMEOUT = -102034, ///< 跨房间连麦请求超时
  137 + ERR_SERVER_CENTER_CONN_ROOM_REQ = -102035, ///< 跨房间连麦请求格式错误
  138 + ERR_SERVER_CENTER_CONN_ROOM_NO_SIG = -102036, ///< 跨房间连麦无签名
  139 + ERR_SERVER_CENTER_CONN_ROOM_DECRYPT_SIG = -102037, ///< 跨房间连麦签名解密失败
  140 + ERR_SERVER_CENTER_CONN_ROOM_NO_KEY = -102038, ///< 未找到跨房间连麦签名解密密钥
  141 + ERR_SERVER_CENTER_CONN_ROOM_PARSE_SIG = -102039, ///< 跨房间连麦签名解析错误
  142 + ERR_SERVER_CENTER_CONN_ROOM_INVALID_SIG_TIME = -102040, ///< 跨房间连麦签名时间戳错误
  143 + ERR_SERVER_CENTER_CONN_ROOM_SIG_GROUPID = -102041, ///< 跨房间连麦签名不匹配
  144 + ERR_SERVER_CENTER_CONN_ROOM_NOT_CONNED = -102042, ///< 本房间无连麦
  145 + ERR_SERVER_CENTER_CONN_ROOM_USER_NOT_CONNED = -102043, ///< 本用户未发起连麦
  146 + ERR_SERVER_CENTER_CONN_ROOM_FAILED = -102044, ///< 跨房间连麦失败
  147 + ERR_SERVER_CENTER_CONN_ROOM_CANCEL_FAILED = -102045, ///< 取消跨房间连麦失败
  148 + ERR_SERVER_CENTER_CONN_ROOM_CONNED_ROOM_NOT_EXIST = -102046, ///< 被连麦房间不存在
  149 + ERR_SERVER_CENTER_CONN_ROOM_CONNED_REACH_MAX_ROOM = -102047, ///< 被连麦房间达到连麦上限
  150 + ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_NOT_EXIST = -102048, ///< 被连麦用户不存在
  151 + ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_DELETED = -102049, ///< 被连麦用户已被删除
  152 + ERR_SERVER_CENTER_CONN_ROOM_CONNED_USER_FULL = -102050, ///< 被连麦用户达到资源上限
  153 + ERR_SERVER_CENTER_CONN_ROOM_INVALID_SEQ = -102051, ///< 连麦请求序号错乱
  154 +
  155 + /////////////////////////////////////////////////////////////////////////////////
  156 + //
  157 + // 客户无需关心的内部错误码
  158 + //
  159 + /////////////////////////////////////////////////////////////////////////////////
  160 +
  161 + // - Remove From Head
  162 + ERR_RTMP_PUSH_NET_DISCONNECT = -1307, ///< 直播,推流出现网络断开,且经过多次重试无法恢复
  163 + ERR_RTMP_PUSH_INVALID_ADDRESS = -1313, ///< 直播,推流地址非法,例如不是 RTMP 协议的地址
  164 + ERR_RTMP_PUSH_NET_ALLADDRESS_FAIL = -1324, ///< 直播,连接推流服务器失败(若支持智能选路,IP 全部失败)
  165 + ERR_RTMP_PUSH_NO_NETWORK = -1325, ///< 直播,网络不可用,请确认 Wi-Fi、移动数据或者有线网络是否正常
  166 + ERR_RTMP_PUSH_SERVER_REFUSE = -1326, ///< 直播,服务器拒绝连接请求,可能是该推流地址已经被占用,或者 TXSecret 校验失败,或者是过期了,或者是欠费了
  167 +
  168 + ERR_PLAY_LIVE_STREAM_NET_DISCONNECT = -2301, ///< 直播,网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启播放
  169 + ERR_GET_RTMP_ACC_URL_FAIL = -2302, ///< 直播,获取加速拉流的地址失败
  170 + ERR_FILE_NOT_FOUND = -2303, ///< 播放的文件不存在
  171 + ERR_HEVC_DECODE_FAIL = -2304, ///< H265 解码失败
  172 + ERR_VOD_DECRYPT_FAIL = -2305, ///< 点播,音视频流解密失败
  173 + ERR_GET_VODFILE_MEDIAINFO_FAIL = -2306, ///< 点播,获取点播文件信息失败
  174 + ERR_PLAY_LIVE_STREAM_SWITCH_FAIL = -2307, ///< 直播,切流失败(切流可以播放不同画面大小的视频)
  175 + ERR_PLAY_LIVE_STREAM_SERVER_REFUSE = -2308, ///< 直播,服务器拒绝连接请求
  176 + ERR_RTMP_ACC_FETCH_STREAM_FAIL = -2309, ///< 直播,RTMPACC 低延时拉流失败,且经过多次重试无法恢复
  177 + ERR_HEVC_ENCODE_FAIL = -2310, ///< 265编码失败
  178 + ERR_HEVC_ENCODE_NOT_SUPPORT = -2311, ///< 265编码判断不支持
  179 + ERR_HEVC_SOFTDECODER_START_FAIL = -2312, ///< 265软解启动失败
  180 +
  181 + ERR_ROOM_HEARTBEAT_FAIL = -3302, ///< 心跳失败,客户端定时向服务器发送数据包,告诉服务器自己活着,这个错误通常是发包超时
  182 + ERR_ROOM_REQUEST_IP_FAIL = -3303, ///< 拉取接口机服务器地址失败
  183 + ERR_ROOM_CONNECT_FAIL = -3304, ///< 连接接口机服务器失败
  184 + ERR_ROOM_REQUEST_AVSEAT_FAIL = -3305, ///< 请求视频位失败
  185 + ERR_ROOM_REQUEST_TOKEN_HTTPS_TIMEOUT = -3306, ///< 请求 token HTTPS 超时,请检查网络是否正常,或网络防火墙是否放行 HTTPS 访问 official.opensso.tencent-cloud.com:443
  186 + ERR_ROOM_REQUEST_VIDEO_FLAG_TIMEOUT = -3309, ///< 请求视频位超时
  187 + ERR_ROOM_REQUEST_VIDEO_DATA_ROOM_TIMEOUT = -3310, ///< 请求视频数据超时
  188 + ERR_ROOM_REQUEST_CHANGE_ABILITY_TIMEOUT = -3311, ///< 请求修改视频能力项超时
  189 + ERR_ROOM_REQUEST_STATUS_REPORT_TIMEOUT = -3312, ///< 请求状态上报超时
  190 + ERR_ROOM_REQUEST_CLOSE_VIDEO_TIMEOUT = -3313, ///< 请求关闭视频超时
  191 + ERR_ROOM_REQUEST_SET_RECEIVE_TIMEOUT = -3314, ///< 请求接收视频项超时
  192 + ERR_ROOM_REQUEST_TOKEN_INVALID_PARAMETER = -3315, ///< 请求 token 无效参数,请检查 TRTCParams.userSig 是否填写正确
  193 + ERR_ROOM_REQUEST_EXIT_ROOM_WHEN_ENTERING_ROOM = -3341, ///< 进房尚未成功时,收到了退房请求
  194 +
  195 + ERR_ROOM_REQUEST_AES_TOKEN_RETURN_ERROR = -3329, ///< 请求 AES TOKEN 时,server 返回的内容是空的
  196 + ERR_ACCIP_LIST_EMPTY = -3331, ///< 请求接口机 IP 返回的列表为空的
  197 + ERR_ROOM_REQUEST_SEND_JSON_CMD_TIMEOUT = -3332, ///< 请求发送Json 信令超时
  198 +
  199 + // Info 服务器(查询接口机 IP), 服务器错误码,数值范围[-100000, -110000]
  200 + ERR_SERVER_INFO_UNPACKING_ERROR = -100000, ///< server 解包错误,可能请求数据被篡改
  201 + ERR_SERVER_INFO_TOKEN_ERROR = -100001, ///< TOKEN 错误
  202 + ERR_SERVER_INFO_ALLOCATE_ACCESS_FAILED = -100002, ///< 分配接口机错误
  203 + ERR_SERVER_INFO_GENERATE_SIGN_FAILED = -100003, ///< 生成签名错误
  204 + ERR_SERVER_INFO_TOKEN_TIMEOUT = -100004, ///< HTTPS token 超时
  205 + ERR_SERVER_INFO_INVALID_COMMAND = -100005, ///< 无效的命令字
  206 + ERR_SERVER_INFO_GENERATE_KEN_ERROR = -100007, ///< HTTPS 请求时,生成加密 key 错误
  207 + ERR_SERVER_INFO_GENERATE_TOKEN_ERROR = -100008, ///< HTTPS 请求时,生成 token 错误
  208 + ERR_SERVER_INFO_DATABASE = -100009, ///< 数据库查询失败(房间相关存储信息)
  209 + ERR_SERVER_INFO_BAD_ROOMID = -100010, ///< 房间号错误
  210 + ERR_SERVER_INFO_BAD_SCENE_OR_ROLE = -100011, ///< 场景或角色错误
  211 + ERR_SERVER_INFO_ROOMID_EXCHANGE_FAILED = -100012, ///< 房间号转换出错
  212 + ERR_SERVER_INFO_STRGROUP_HAS_INVALID_CHARS = -100014, ///< 房间号非法
  213 + ERR_SERVER_INFO_LACK_SDKAPPID = -100015, ///< 非法SDKAppid
  214 + ERR_SERVER_INFO_INVALID = -100016, ///< 无效请求, 分配接口机失败
  215 + ERR_SERVER_INFO_ECDH_GET_KEY = -100017, ///< 生成公钥失败
  216 +
  217 + // Access 接口机
  218 + ERR_SERVER_ACC_TOKEN_TIMEOUT = -101000, ///< token 过期
  219 + ERR_SERVER_ACC_SIGN_ERROR = -101001, ///< 签名错误
  220 + ERR_SERVER_ACC_SIGN_TIMEOUT = -101002, ///< 签名超时
  221 + ERR_SERVER_ACC_ROOM_NOT_EXIST = -101003, ///< 房间不存在
  222 + ERR_SERVER_ACC_ROOMID = -101004, ///< 后台房间标识 roomId 错误
  223 + ERR_SERVER_ACC_LOCATIONID = -101005, ///< 后台用户位置标识 locationId 错误
  224 + ERR_SERVER_ACC_TOKEN_EORROR = -101006, ///< token里面的tinyid和进房信令tinyid不同 或是 进房信令没有token
  225 +
  226 + // Center 服务器(信令和流控处理等任务)
  227 + ERR_SERVER_CENTER_SYSTEM_ERROR = -102000, ///< 后台错误
  228 +
  229 + ERR_SERVER_CENTER_INVALID_ROOMID = -102001, ///< 无效的房间 Id
  230 + ERR_SERVER_CENTER_CREATE_ROOM_FAILED = -102002, ///< 创建房间失败
  231 + ERR_SERVER_CENTER_SIGN_ERROR = -102003, ///< 签名错误
  232 + ERR_SERVER_CENTER_SIGN_TIMEOUT = -102004, ///< 签名过期
  233 + ERR_SERVER_CENTER_ROOM_NOT_EXIST = -102005, ///< 房间不存在
  234 + ERR_SERVER_CENTER_ADD_USER_FAILED = -102006, ///< 房间添加用户失败
  235 + ERR_SERVER_CENTER_FIND_USER_FAILED = -102007, ///< 查找用户失败
  236 + ERR_SERVER_CENTER_SWITCH_TERMINATION_FREQUENTLY = -102008, ///< 频繁切换终端
  237 + ERR_SERVER_CENTER_LOCATION_NOT_EXIST = -102009, ///< locationid 错误
  238 + ERR_SERVER_CENTER_NO_PRIVILEDGE_CREATE_ROOM = -102010, ///< 没有权限创建房间
  239 + ERR_SERVER_CENTER_NO_PRIVILEDGE_ENTER_ROOM = -102011, ///< 没有权限进入房间
  240 + ERR_SERVER_CENTER_INVALID_PARAMETER_SUB_VIDEO = -102012, ///< 辅路抢视频位、申请辅路请求类型参数错误
  241 + ERR_SERVER_CENTER_NO_PRIVILEDGE_PUSH_VIDEO = -102013, ///< 没有权限上视频
  242 + ERR_SERVER_CENTER_ROUTE_TABLE_ERROR = -102014, ///< 没有空闲路由表
  243 + ERR_SERVER_CENTER_NOT_PUSH_SUB_VIDEO = -102017, ///< 当前用户没有上行辅路
  244 + ERR_SERVER_CENTER_USER_WAS_DELETED = -102018, ///< 用户被删除状态
  245 + ERR_SERVER_CENTER_NO_PRIVILEDGE_REQUEST_VIDEO = -102019, ///< 没有权限请求视频
  246 + ERR_SERVER_CENTER_INVALID_PARAMETER = -102023, ///< 进房参数 bussInfo 错误
  247 + ERR_SERVER_CENTER_I_FRAME_UNKNOW_TYPE = -102024, ///< 请求 I 帧未知 opType
  248 + ERR_SERVER_CENTER_I_FRAME_INVALID_PACKET = -102025, ///< 请求 I 帧包格式错误
  249 + ERR_SERVER_CENTER_I_FRAME_DEST_USER_NOT_EXIST = -102026, ///< 请求 I 帧目标用户不存在
  250 + ERR_SERVER_CENTER_I_FRAME_ROOM_TOO_BIG = -102027, ///< 请求 I 帧房间用户太多
  251 + ERR_SERVER_CENTER_I_FRAME_RPS_INVALID_PARAMETER = -102028, ///< 请求 I 帧参数错误
  252 + ERR_SERVER_CENTER_INVALID_ROOM_ID = -102029, ///< 房间号非法
  253 + ERR_SERVER_CENTER_ROOM_ID_TOO_LONG = -102030, ///< 房间号超过限制
  254 + ERR_SERVER_CENTER_ROOM_FULL = -102052, ///< 房间满员
  255 + ERR_SERVER_CENTER_DECODE_JSON_FAIL = -102053, ///< JSON 串解析失败
  256 + ERR_SERVER_CENTER_UNKNOWN_SUB_CMD = -102054, ///< 未定义命令字
  257 + ERR_SERVER_CENTER_INVALID_ROLE = -102055, ///< 未定义角色
  258 + ERR_SERVER_CENTER_REACH_PROXY_MAX = -102056, ///< 代理机超出限制
  259 + ERR_SERVER_CENTER_RECORDID_STORE = -102057, ///< 无法保存用户自定义 recordId
  260 + ERR_SERVER_CENTER_PB_SERIALIZE = -102058, ///< Protobuf 序列化错误
  261 +
  262 + ERR_SERVER_SSO_SIG_EXPIRED = -70001, ///< sig 过期,请尝试重新生成。如果是刚生成,就过期,请检查有效期填写的是否过小,或者填的 0
  263 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_1 = -70003, ///< sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断
  264 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_2 = -70004, ///< sig 校验失败,请确认下 sig 内容是否被截断,如缓冲区长度不够导致的内容截断
  265 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_3 = -70005, ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
  266 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_4 = -70006, ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
  267 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_5 = -70007, ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
  268 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_6 = -70008, ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
  269 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_7 = -70009, ///< 用业务公钥验证 sig 失败,请确认生成的 usersig 使用的私钥和 sdkAppId 是否对应
  270 + ERR_SERVER_SSO_SIG_VERIFICATION_FAILED_8 = -70010, ///< sig 校验失败,可用工具自行验证生成的 sig 是否正确
  271 + ERR_SERVER_SSO_SIG_VERIFICATION_ID_NOT_MATCH = -70013, ///< sig 中 identifier 与请求时的 identifier 不匹配,请检查登录时填写的 identifier 与 sig 中的是否一致
  272 + ERR_SERVER_SSO_APPID_NOT_MATCH = -70014, ///< sig 中 sdkAppId 与请求时的 sdkAppId 不匹配,请检查登录时填写的 sdkAppId 与 sig 中的是否一致
  273 + ERR_SERVER_SSO_VERIFICATION_EXPIRED = -70017, ///< 内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604
  274 + ERR_SERVER_SSO_VERIFICATION_FAILED = -70018, ///< 内部第三方票据验证超时,请重试,如多次重试不成功,请@TLS 帐号支持,QQ 3268519604
  275 +
  276 + ERR_SERVER_SSO_APPID_NOT_FOUND = -70020, ///< sdkAppId 未找到,请确认是否已经在腾讯云上配置
  277 + ERR_SERVER_SSO_ACCOUNT_IN_BLACKLIST = -70051, ///< 帐号已被拉入黑名单,请联系 TLS 帐号支持 QQ 3268519604
  278 + ERR_SERVER_SSO_SIG_INVALID = -70052, ///< usersig 已经失效,请重新生成,再次尝试
  279 + ERR_SERVER_SSO_LIMITED_BY_SECURITY = -70114, ///< 安全原因被限制
  280 + ERR_SERVER_SSO_INVALID_LOGIN_STATUS = -70221, ///< 登录状态无效,请使用 usersig 重新鉴权
  281 + ERR_SERVER_SSO_APPID_ERROR = -70252, ///< sdkAppId 填写错误
  282 + ERR_SERVER_SSO_TICKET_VERIFICATION_FAILED = -70346, ///< 票据校验失败,请检查各项参数是否正确
  283 + ERR_SERVER_SSO_TICKET_EXPIRED = -70347, ///< 票据因过期原因校验失败
  284 + ERR_SERVER_SSO_ACCOUNT_EXCEED_PURCHASES = -70398, ///< 创建账号数量超过已购买预付费数量限制
  285 + ERR_SERVER_SSO_INTERNAL_ERROR = -70500, ///< 服务器内部错误,请重试
  286 +
  287 + //秒级监控上报错误码
  288 + ERR_REQUEST_QUERY_CONFIG_TIMEOUT = -4001, ///< 请求通用配置超时
  289 + ERR_CUSTOM_STREAM_INVALID = -4002, ///< 自定义流id错误
  290 + ERR_USER_DEFINE_RECORD_ID_INVALID = -4003, ///< userDefineRecordId错误
  291 + ERR_MIX_PARAM_INVALID = -4004, ///< 混流参数校验失败
  292 + ERR_REQUEST_ACC_BY_HOST_IP = -4005, ///< 通过域名进行0x1请求
  293 + // - /Remove From Head
  294 +} TXLiteAVError;
  295 +
  296 +/////////////////////////////////////////////////////////////////////////////////
  297 +//
  298 +// 警告码
  299 +//
  300 +//> 不需要特别关注,但您可以根据其中某些感兴趣的警告码,对当前用户进行相应的提示
  301 +//
  302 +/////////////////////////////////////////////////////////////////////////////////
  303 +
  304 +typedef enum TXLiteAVWarning
  305 +{
  306 + WARNING_HW_ENCODER_START_FAIL = 1103, ///< 硬编码启动出现问题,自动切换到软编码
  307 + WARNING_CURRENT_ENCODE_TYPE_CHANGED = 1104, ///< 当前编码格式, 通过key 为type获取,值为1时是265编码,值为0时是264编码
  308 + WARNING_VIDEO_ENCODER_SW_TO_HW = 1107, ///< 当前 CPU 使用率太高,无法满足软件编码需求,自动切换到硬件编码
  309 + WARNING_INSUFFICIENT_CAPTURE_FPS = 1108, ///< 摄像头采集帧率不足,部分自带美颜算法的 Android 手机上会出现
  310 + WARNING_SW_ENCODER_START_FAIL = 1109, ///< 软编码启动失败
  311 + WARNING_REDUCE_CAPTURE_RESOLUTION = 1110, ///< 摄像头采集分辨率被降低,以满足当前帧率和性能最优解。
  312 + WARNING_CAMERA_DEVICE_EMPTY = 1111, ///< 没有检测到可用的摄像头设备
  313 + WARNING_CAMERA_NOT_AUTHORIZED = 1112, ///< 用户未授权当前应用使用摄像头
  314 + WARNING_MICROPHONE_DEVICE_EMPTY = 1201, ///< 没有检测到可用的麦克风设备
  315 + WARNING_SPEAKER_DEVICE_EMPTY = 1202, ///< 没有检测到可用的扬声器设备
  316 + WARNING_MICROPHONE_NOT_AUTHORIZED = 1203, ///< 用户未授权当前应用使用麦克风
  317 + WARNING_MICROPHONE_DEVICE_ABNORMAL = 1204, ///< 音频采集设备不可用(例如被占用或者PC判定无效设备)
  318 + WARNING_SPEAKER_DEVICE_ABNORMAL = 1205, ///< 音频播放设备不可用(例如被占用或者PC判定无效设备)
  319 + WARNING_SCREEN_CAPTURE_NOT_AUTHORIZED = 1206, ///< 用户未授权当前应用使用屏幕录制
  320 + WARNING_VIDEO_FRAME_DECODE_FAIL = 2101, ///< 当前视频帧解码失败
  321 + WARNING_AUDIO_FRAME_DECODE_FAIL = 2102, ///< 当前音频帧解码失败
  322 + WARNING_VIDEO_PLAY_LAG = 2105, ///< 当前视频播放出现卡顿
  323 + WARNING_HW_DECODER_START_FAIL = 2106, ///< 硬解启动失败,采用软解码
  324 + WARNING_VIDEO_DECODER_HW_TO_SW = 2108, ///< 当前流硬解第一个 I 帧失败,SDK 自动切软解
  325 + WARNING_SW_DECODER_START_FAIL = 2109, ///< 软解码器启动失败
  326 + WARNING_VIDEO_RENDER_FAIL = 2110, ///< 视频渲染失败
  327 + WARNING_START_CAPTURE_IGNORED = 4000, ///< 已经在采集,启动采集被忽略
  328 + WARNING_AUDIO_RECORDING_WRITE_FAIL = 7001, ///< 音频录制写入文件失败
  329 + WARNING_ROOM_DISCONNECT = 5101, ///< 网络断开连接
  330 + WARNING_IGNORE_UPSTREAM_FOR_AUDIENCE = 6001, ///< 当前是观众角色,忽略上行音视频数据
  331 + WARNING_MICROPHONE_HOWLING_DETECTED = 7002, ///< 录制音频时监测到啸叫。请调节两台客户端之间的距离或降低播放音量,检测到啸叫后,5s后会再次进行重新检测
  332 +
  333 + // - Remove From Head
  334 + WARNING_NET_BUSY = 1101, ///< 网络状况不佳:上行带宽太小,上传数据受阻
  335 + WARNING_RTMP_SERVER_RECONNECT = 1102, ///< 直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃)
  336 + WARNING_LIVE_STREAM_SERVER_RECONNECT = 2103, ///< 直播,网络断连, 已启动自动重连(自动重连连续失败超过三次会放弃)
  337 + WARNING_RECV_DATA_LAG = 2104, ///< 网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀
  338 + WARNING_RTMP_DNS_FAIL = 3001, ///< 直播,DNS 解析失败
  339 + WARNING_RTMP_SEVER_CONN_FAIL = 3002, ///< 直播,服务器连接失败
  340 + WARNING_RTMP_SHAKE_FAIL = 3003, ///< 直播,与 RTMP 服务器握手失败
  341 + WARNING_RTMP_SERVER_BREAK_CONNECT = 3004, ///< 直播,服务器主动断开
  342 + WARNING_RTMP_READ_WRITE_FAIL = 3005, ///< 直播,RTMP 读/写失败,将会断开连接
  343 + WARNING_RTMP_WRITE_FAIL = 3006, ///< 直播,RTMP 写失败(SDK 内部错误码,不会对外抛出)
  344 + WARNING_RTMP_READ_FAIL = 3007, ///< 直播,RTMP 读失败(SDK 内部错误码,不会对外抛出)
  345 + WARNING_RTMP_NO_DATA = 3008, ///< 直播,超过30s 没有数据发送,主动断开连接
  346 + WARNING_PLAY_LIVE_STREAM_INFO_CONNECT_FAIL = 3009, ///< 直播,connect 服务器调用失败(SDK 内部错误码,不会对外抛出)
  347 + WARNING_NO_STEAM_SOURCE_FAIL = 3010, ///< 直播,连接失败,该流地址无视频(SDK 内部错误码,不会对外抛出)
  348 + WARNING_ROOM_RECONNECT = 5102, ///< 网络断连,已启动自动重连
  349 + WARNING_ROOM_NET_BUSY = 5103, ///< 网络状况不佳:上行带宽太小,上传数据受阻
  350 + // - /Remove From Head
  351 +} TXLiteAVWarning;
  352 +
  353 +// - Remove From Head
  354 +/////////////////////////////////////////////////////////////////////////////////
  355 +//
  356 +// (三)事件列表
  357 +//
  358 +/////////////////////////////////////////////////////////////////////////////////
  359 +
  360 +typedef enum TXLiteAVEvent
  361 +{
  362 + EVT_RTMP_PUSH_CONNECT_SUCC = 1001, ///< 直播,已经连接 RTMP 推流服务器
  363 + EVT_RTMP_PUSH_BEGIN = 1002, ///< 直播,已经与 RTMP 服务器握手完毕,开始推流
  364 + EVT_CAMERA_START_SUCC = 1003, ///< 打开摄像头成功
  365 + EVT_SCREEN_CAPTURE_SUCC = 1004, ///< 录屏启动成功
  366 + EVT_UP_CHANGE_RESOLUTION = 1005, ///< 上行动态调整分辨率
  367 + EVT_UP_CHANGE_BITRATE = 1006, ///< 码率动态调整
  368 + EVT_FIRST_FRAME_AVAILABLE = 1007, ///< 首帧画面采集完成
  369 + EVT_START_VIDEO_ENCODER = 1008, ///< 编码器启动成功
  370 + EVT_SNAPSHOT_COMPLETE = 1022, ///< 一帧截图完成
  371 + EVT_CAMERA_REMOVED = 1023, ///< 摄像头设备已被移出(Windows 和 Mac 版 SDK 使用)
  372 + EVT_CAMERA_AVAILABLE = 1024, ///< 摄像头设备重新可用(Windows 和 Mac 版 SDK 使用)
  373 + EVT_CAMERA_CLOSE = 1025, ///< 关闭摄像头完成(Windows 和 Mac 版 SDK 使用)
  374 + EVT_RTMP_PUSH_PUBLISH_START = 1026, ///< 直播,与 RTMP 服务器连接后,收到 NetStream.Publish.Start 消息,表明流发布成功(SDK 内部事件,不会对外抛出)
  375 + EVT_HW_ENCODER_START_SUCC = 1027, ///< 硬编码器启动成功
  376 + EVT_SW_ENCODER_START_SUCC = 1028, ///< 软编码器启动成功
  377 + EVT_LOCAL_RECORD_RESULT = 1029, ///< 本地录制结果
  378 + EVT_LOCAL_RECORD_PROGRESS = 1030, ///< 本地录制状态通知
  379 +
  380 + EVT_PLAY_LIVE_STREAM_CONNECT_SUCC = 2001, ///< 直播,已经连接 RTMP 拉流服务器
  381 + EVT_PLAY_LIVE_STREAM_BEGIN = 2002, ///< 直播,已经与 RTMP 服务器握手完毕,开始拉流
  382 + EVT_RENDER_FIRST_I_FRAME = 2003, ///< 渲染首个视频数据包(IDR)
  383 + EVT_VIDEO_PLAY_BEGIN = 2004, ///< 视频播放开始
  384 + EVT_VIDEO_PLAY_PROGRESS = 2005, ///< 视频播放进度
  385 + EVT_VIDEO_PLAY_END = 2006, ///< 视频播放结束
  386 + EVT_VIDEO_PLAY_LOADING = 2007, ///< 视频播放 loading
  387 + EVT_START_VIDEO_DECODER = 2008, ///< 解码器启动
  388 + EVT_DOWN_CHANGE_RESOLUTION = 2009, ///< 下行视频分辨率改变
  389 + EVT_GET_VODFILE_MEDIAINFO_SUCC = 2010, ///< 点播,获取点播文件信息成功
  390 + EVT_VIDEO_CHANGE_ROTATION = 2011, ///< 视频旋转角度发生改变
  391 + EVT_PLAY_GET_MESSAGE = 2012, ///< 消息事件
  392 + EVT_VOD_PLAY_PREPARED = 2013, ///< 点播,视频加载完毕
  393 + EVT_VOD_PLAY_LOADING_END = 2014, ///< 点播,loading 结束
  394 + EVT_PLAY_LIVE_STREAM_SWITCH_SUCC = 2015, ///< 直播,切流成功(切流可以播放不同画面大小的视频)
  395 + EVT_VOD_PLAY_TCP_CONNECT_SUCC = 2016, ///< 点播,TCP 连接成功(SDK 内部事件,不会对外抛出)
  396 + EVT_VOD_PLAY_FIRST_VIDEO_PACKET = 2017, ///< 点播,收到首帧数据(SDK 内部事件,不会对外抛出)
  397 + EVT_VOD_PLAY_DNS_RESOLVED = 2018, ///< 点播,DNS 解析完成(SDK 内部事件,不会对外抛出)
  398 + EVT_VOD_PLAY_SEEK_COMPLETE = 2019, ///< 点播,视频播放 Seek 完成(SDK 内部事件,不会对外抛出)
  399 + EVT_VIDEO_DECODER_CACHE_TOO_MANY_FRAMES = 2020, ///< 视频解码器缓存帧数过多,超过40帧(SDK 内部事件,不会对外抛出)
  400 + EVT_HW_DECODER_START_SUCC = 2021, ///< 硬解码器启动成功(SDK 内部事件,不会对外抛出)
  401 + EVT_SW_DECODER_START_SUCC = 2022, ///< 软解码器启动成功(SDK 内部事件,不会对外抛出)
  402 + EVT_AUDIO_JITTER_STATE_FIRST_LOADING = 2023, ///< 音频首次加载(SDK 内部事件,不会对外抛出)
  403 + EVT_AUDIO_JITTER_STATE_LOADING = 2024, ///< 音频正在加载(SDK 内部事件,不会对外抛出)
  404 + EVT_AUDIO_JITTER_STATE_PLAYING = 2025, ///< 音频正在播放(SDK 内部事件,不会对外抛出)
  405 + EVT_AUDIO_JITTER_STATE_FIRST_PLAY = 2026, ///< 音频首次播放(SDK 内部事件,不会对外抛出)
  406 + EVT_MIC_START_SUCC = 2027, ///< 麦克风启动成功
  407 + EVT_PLAY_GET_METADATA = 2028, ///< 视频流MetaData事件
  408 + EVT_MIC_RELEASE_SUCC = 2029, ///< 释放麦克风占用
  409 + EVT_AUDIO_DEVICE_ROUTE_CHANGED = 2030, ///< 音频设备的route发生改变,即当前的输入输出设备发生改变,比如耳机被拔出
  410 + EVT_PLAY_GET_FLVSESSIONKEY = 2031, ///< TXLivePlayer 接收到http响应头中的 flvSessionKey 信息
  411 + EVT_AUDIO_SESSION_INTERRUPT = 2032, ///< Audio Session Interrupt事件
  412 +
  413 +
  414 + EVT_ROOM_ENTER = 1018, ///< 进入房间成功
  415 + EVT_ROOM_EXIT = 1019, ///< 退出房间
  416 + EVT_ROOM_USERLIST = 1020, ///< 下发房间成员列表(不包括自己)
  417 + EVT_ROOM_NEED_REENTER = 1021, ///< WiFi 切换到4G 会触发断线重连,此时需要重新进入房间(拉取最优的服务器地址)
  418 + EVT_ROOM_ENTER_FAILED = 1022, ///< 自己进入房间失败
  419 + EVT_ROOM_USER_ENTER = 1031, ///< 进房通知
  420 + EVT_ROOM_USER_EXIT = 1032, ///< 退房通知
  421 + EVT_ROOM_USER_VIDEO_STATE = 1033, ///< 视频状态位变化通知
  422 + EVT_ROOM_USER_AUDIO_STATE = 1034, ///< 音频状态位变化通知
  423 +
  424 + EVT_ROOM_REQUEST_IP_SUCC = 8001, ///< 拉取接口机服务器地址成功
  425 + EVT_ROOM_CONNECT_SUCC = 8002, ///< 连接接口机服务器成功
  426 + EVT_ROOM_REQUEST_AVSEAT_SUCC = 8003, ///< 请求视频位成功
  427 +} TXLiteAVEvent;
  428 +// - /Remove From Head
  429 +
  430 +#endif /* __TXLITEAVCODE_H__ */
  1 +/*
  2 +* Module: live 编码数据回调
  3 +*
  4 +* Function: 回调推流端编码完,和 播放端解码前的数据
  5 +*
  6 +*/
  7 +
  8 +
  9 +#ifndef TXLiteAVEncodedDataProcessingListener_h
  10 +#define TXLiteAVEncodedDataProcessingListener_h
  11 +
  12 +#include <stdio.h>
  13 +#include "TXLiteAVBuffer.h"
  14 +
  15 +namespace liteav {
  16 +
  17 +struct TXLiteAVEncodedData {
  18 + const char * userId; // didEncodeVideo 和 didEncodeAudio 回调时,此字段为null;
  19 + int streamType; // 视频流类型,参考 TRTCVideoStreamType,audio时,此字段为0
  20 + const liteav::TXLiteAVBuffer * originData; // 原始数据
  21 + liteav::TXLiteAVBuffer * processedData; // 写回处理后的数据
  22 +};
  23 +
  24 +class ITXLiteAVEncodedDataProcessingListener {
  25 +public:
  26 + virtual ~ITXLiteAVEncodedDataProcessingListener() {}
  27 +
  28 + /**
  29 + * 回调编码完的视频数据。
  30 + * @note videoData.userId = nullptr
  31 + */
  32 + virtual bool didEncodeVideo(TXLiteAVEncodedData & videoData) { return false; }
  33 +
  34 + /**
  35 + * 回调解码前的视频数据。
  36 + * @note videoData.userId 表示对应的user,当userId 为 nullptr时,表示此时先接收到数据了,对应的userId还未完成同步。获取到userId之后会回调正确的userId
  37 + */
  38 + virtual bool willDecodeVideo(TXLiteAVEncodedData & videoData) { return false; }
  39 +
  40 + /**
  41 + * 回调编码完的音频数据。
  42 + * @note audioData.userId = nullptr
  43 + */
  44 + virtual bool didEncodeAudio(TXLiteAVEncodedData & audioData) { return false; }
  45 +
  46 + /**
  47 + * 回调解码前的音频数据。
  48 + * @note audioData.userId 表示对应的user,当userId 为 nullptr时,表示此时先接收到数据了,对应的userId还未完成同步。获取到userId之后会回调正确的userId
  49 + */
  50 + virtual bool willDecodeAudio(TXLiteAVEncodedData & audioData) { return false; }
  51 +};
  52 +}
  53 +
  54 +#endif /* TXLiteAVEncodedDataProcessingListener_h */
  1 +//
  2 +// TXLiteAVSDK.h
  3 +// TXLiteAVSDK
  4 +//
  5 +// Created by alderzhang on 2017/6/9.
  6 +// Copyright © 2017年 Tencent. All rights reserved.
  7 +//
  8 +
  9 +
  10 +
  11 +#import <TXLiteAVSDK_TRTC/TRTCCloud.h>
  12 +#import <TXLiteAVSDK_TRTC/TRTCCloudDef.h>
  13 +#import <TXLiteAVSDK_TRTC/TRTCCloudDelegate.h>
  14 +#import <TXLiteAVSDK_TRTC/TRTCStatistics.h>
  15 +#import <TXLiteAVSDK_TRTC/TXAudioCustomProcessDelegate.h>
  16 +#import <TXLiteAVSDK_TRTC/TXAudioEffectManager.h>
  17 +#import <TXLiteAVSDK_TRTC/TXAudioRawDataDelegate.h>
  18 +#import <TXLiteAVSDK_TRTC/TXBeautyManager.h>
  19 +#import <TXLiteAVSDK_TRTC/TXDeviceManager.h>
  20 +#import <TXLiteAVSDK_TRTC/TXLiteAVCode.h>
  21 +#import <TXLiteAVSDK_TRTC/TXLiveAudioSessionDelegate.h>
  22 +#import <TXLiteAVSDK_TRTC/TXLiveBase.h>
  23 +#import <TXLiteAVSDK_TRTC/TXLivePlayConfig.h>
  24 +#import <TXLiteAVSDK_TRTC/TXLivePlayListener.h>
  25 +#import <TXLiteAVSDK_TRTC/TXLivePlayer.h>
  26 +#import <TXLiteAVSDK_TRTC/TXLiveRecordListener.h>
  27 +#import <TXLiteAVSDK_TRTC/TXLiveRecordTypeDef.h>
  28 +#import <TXLiteAVSDK_TRTC/TXLiveSDKEventDef.h>
  29 +#import <TXLiteAVSDK_TRTC/TXLiveSDKTypeDef.h>
  30 +#import <TXLiteAVSDK_TRTC/TXVideoCustomProcessDelegate.h>
  31 +#import <TXLiteAVSDK_TRTC/V2TXLiveCode.h>
  32 +#import <TXLiteAVSDK_TRTC/V2TXLiveDef.h>
  33 +#import <TXLiteAVSDK_TRTC/V2TXLivePlayer.h>
  34 +#import <TXLiteAVSDK_TRTC/V2TXLivePlayerObserver.h>
  35 +#import <TXLiteAVSDK_TRTC/V2TXLivePremier.h>
  1 +#ifndef TXLiveAudioSessionDelegate_h
  2 +#define TXLiveAudioSessionDelegate_h
  3 +
  4 +#import <AVFoundation/AVFoundation.h>
  5 +
  6 +@protocol TXLiveAudioSessionDelegate <NSObject>
  7 +#if TARGET_OS_IPHONE
  8 +
  9 +@optional
  10 +- (BOOL)setActive:(BOOL)active error:(NSError **)outError;
  11 +
  12 +@optional
  13 +- (BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError **)outError;
  14 +
  15 +@optional
  16 +- (BOOL)setMode:(NSString *)mode error:(NSError **)outError;
  17 +
  18 +@optional
  19 +- (BOOL)setCategory:(NSString *)category error:(NSError **)outError;
  20 +
  21 +@optional
  22 +- (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError;
  23 +
  24 +@optional
  25 +- (BOOL)setCategory:(NSString *)category mode:(NSString *)mode options:(AVAudioSessionCategoryOptions)options error:(NSError **)outError;
  26 +@optional
  27 +- (BOOL)setPreferredIOBufferDuration:(NSTimeInterval)duration error:(NSError **)outError;
  28 +
  29 +@optional
  30 +- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError **)outError;
  31 +
  32 +@optional
  33 +- (BOOL)setPreferredOutputNumberOfChannels:(NSInteger)count error:(NSError **)outError;
  34 +
  35 +@optional
  36 +- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError **)outError;
  37 +
  38 +@optional
  39 +- (BOOL)setPreferredInput:(nullable AVAudioSessionPortDescription *)inPort error:(NSError **)outError;
  40 +
  41 +#endif
  42 +@end
  43 +#endif /* TXLiveAudioSessionDelegate_h */
  1 +#import "TXLiveAudioSessionDelegate.h"
  2 +
  3 +typedef NS_ENUM(NSInteger, TX_Enum_Type_LogLevel) {
  4 + ///输出所有级别的log
  5 + LOGLEVEL_VERBOSE = 0,
  6 + /// 输出 DEBUG,INFO,WARNING,ERROR 和 FATAL 级别的log
  7 + LOGLEVEL_DEBUG = 1,
  8 + /// 输出 INFO,WARNING,ERROR 和 FATAL 级别的log
  9 + LOGLEVEL_INFO = 2,
  10 + /// 只输出WARNING,ERROR 和 FATAL 级别的log
  11 + LOGLEVEL_WARN = 3,
  12 + /// 只输出ERROR 和 FATAL 级别的log
  13 + LOGLEVEL_ERROR = 4,
  14 + /// 只输出 FATAL 级别的log
  15 + LOGLEVEL_FATAL = 5,
  16 + /// 不输出任何sdk log
  17 + LOGLEVEL_NULL = 6,
  18 +};
  19 +
  20 +@protocol TXLiveBaseDelegate <NSObject>
  21 +@optional
  22 +
  23 +/**
  24 + @brief Log回调 
  25 + @discussion
  26 + 1.实现TXLiveBaseDelegate,建议在一个比较早的初始化类中如AppDelegate
  27 + 2.在初始化中设置此回调,eg:[TXLiveBase sharedInstance].delegate = self;
  28 + 3.level类型参见TX_Enum_Type_LogLevel
  29 + 4.module值暂无具体意义,目前为固定值TXLiteAVSDK
  30 + */
  31 +- (void)onLog:(NSString*)log LogLevel:(int)level WhichModule:(NSString*)module;
  32 +
  33 +/**
  34 + * @brief NTP 校时回调,调用 TXLiveBase updateNetworkTime 后会触发
  35 + * @param errCode 0:表示校时成功且偏差在30ms以内,1:表示校时成功但偏差可能在 30ms 以上,-1:表示校时失败
  36 + */
  37 +- (void)onUpdateNetworkTime:(int)errCode message:(NSString *)errMsg;
  38 +
  39 +/**
  40 + @brief setLicenceURL 接口回调, result = 0 成功,负数失败。
  41 + @discussion
  42 + 需在调用 setLicenceURL 前设置 delegate
  43 + */
  44 +- (void)onLicenceLoaded:(int)result Reason:(NSString *)reason;
  45 +
  46 +@end
  47 +
  48 +@interface TXLiveBase : NSObject
  49 +
  50 +/// 通过这个delegate将全部log回调给SDK使用者,由SDK使用者来决定log如何处理
  51 +@property (nonatomic, weak) id<TXLiveBaseDelegate> delegate;
  52 +
  53 ++ (instancetype)sharedInstance;
  54 +
  55 +/**
  56 + * 设置 liteav SDK 接入的环境。
  57 + * 腾讯云在全球各地区部署的环境,按照各地区政策法规要求,需要接入不同地区接入点。
  58 + *
  59 + * @param env_config 需要接入的环境,SDK 默认接入的环境是:默认正式环境。
  60 + * @return 0:成功;其他:错误
  61 + *
  62 + * @note 目标市场为中国大陆的客户请不要调用此接口,如果目标市场为海外用户,请通过技术支持联系我们,了解 env_config 的配置方法,以确保 App 遵守 GDPR 标准。
  63 + */
  64 ++ (int)setGlobalEnv:(const char *)env_config;
  65 +
  66 +/**
  67 + * 设置 log 输出级别
  68 + * @param level 参见 LOGLEVEL
  69 + */
  70 ++ (void)setLogLevel:(TX_Enum_Type_LogLevel)level;
  71 +
  72 +/**
  73 + * 启用或禁用控制台日志打印
  74 + * @param enabled 指定是否启用
  75 + */
  76 ++ (void)setConsoleEnabled:(BOOL)enabled;
  77 +
  78 ++ (void)setAppVersion:(NSString *)verNum;
  79 +
  80 ++ (void)setAudioSessionDelegate:(id<TXLiveAudioSessionDelegate>)delegate;
  81 +
  82 +/**
  83 + * @brief 获取 SDK 版本信息
  84 + * @return SDK 版本信息
  85 + */
  86 ++ (NSString *)getSDKVersionStr;
  87 +
  88 +/**
  89 + * @brief 获取 pitu 版本信息
  90 + * @return pitu 版本信息
  91 + */
  92 ++ (NSString *)getPituSDKVersion;
  93 +
  94 +/**
  95 + * @brief 设置 appID,云控使用
  96 + */
  97 ++ (void)setAppID:(NSString*)appID;
  98 +
  99 +/**
  100 + * @brief 设置 sdk 的 Licence 下载 url 和 key
  101 + */
  102 ++ (void)setLicenceURL:(NSString *)url key:(NSString *)key;
  103 +
  104 +/**
  105 + * @brief 设置 userId,用于数据上报
  106 + */
  107 ++ (void)setUserId:(NSString *)userId;
  108 +
  109 +/**
  110 + * @brief 获取 Licence 信息
  111 + * @return Licence 信息
  112 + */
  113 ++ (NSString *)getLicenceInfo;
  114 +
  115 +/**
  116 + * @brief 设置外部扩展Dev ID
  117 + * @brief 采用键、值对的方式来进行数据传输
  118 + * @return 不合法的 ‘extKey’ 会返回 NO
  119 + */
  120 ++ (BOOL)setExtDevID:(NSString *)extKey value:(NSString *)extValue;
  121 +
  122 +/**
  123 + * @brief 设置 HEVC 外部解码器工厂实例
  124 + */
  125 ++ (void)setExternalDecoderFactory:(id)decoderFactory;
  126 +
  127 +/**
  128 + * 启动 NTP 校时服务
  129 + *
  130 + * @return 0:启动成功;< 0:启动失败
  131 + */
  132 ++ (NSInteger)updateNetworkTime;
  133 +
  134 +/**
  135 + * 获取 NTP 时间戳(毫秒),请在收到 onUpdateNetworkTime 回调后使用
  136 + *
  137 + * @return NTP 时间戳(毫秒),若返回 0:未启动 NTP 校时或校时失败,请重启校时
  138 + */
  139 ++ (NSInteger)getNetworkTimestamp;
  140 +
  141 +@end
  1 +/*
  2 + * Module: TXLivePlayConfig @ TXLiteAVSDK
  3 + *
  4 + * Function: 腾讯云直播播放器的参数配置模块
  5 + *
  6 + * Version: <:Version:>
  7 + */
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +
  11 +/// @defgroup TXLivePlayConfig_ios TXLivePlayConfig
  12 +/// 腾讯云直播播放器的参数配置模块
  13 +/// @{
  14 +
  15 +/**
  16 + * 腾讯云直播播放器的参数配置模块
  17 + *
  18 + * 主要负责 TXLivePlayer 对应的参数设置,其中绝大多数设置项在播放开始之后再设置是无效的。
  19 + */
  20 +@interface TXLivePlayConfig : NSObject
  21 +
  22 +/////////////////////////////////////////////////////////////////////////////////
  23 +//
  24 +// 常用设置项
  25 +//
  26 +/////////////////////////////////////////////////////////////////////////////////
  27 +
  28 +///【字段含义】播放器缓存时间,单位秒,取值需要大于0,默认值:5
  29 +@property(nonatomic, assign) float cacheTime;
  30 +
  31 +///【字段含义】是否自动调整播放器缓存时间,默认值:YES
  32 +/// YES:启用自动调整,自动调整的最大值和最小值可以分别通过修改 maxCacheTime 和 minCacheTime 来设置
  33 +/// NO:关闭自动调整,采用默认的指定缓存时间(1s),可以通过修改 cacheTime 来调整缓存时间
  34 +@property(nonatomic, assign) BOOL bAutoAdjustCacheTime;
  35 +
  36 +///【字段含义】播放器缓存自动调整的最大时间,单位秒,取值需要大于0,默认值:5
  37 +@property(nonatomic, assign) float maxAutoAdjustCacheTime;
  38 +
  39 +///【字段含义】播放器缓存自动调整的最小时间,单位秒,取值需要大于0,默认值为1
  40 +@property(nonatomic, assign) float minAutoAdjustCacheTime;
  41 +
  42 +///【字段含义】播放器视频卡顿报警阈值,单位毫秒
  43 +///【推荐取值】800
  44 +///【特别说明】只有渲染间隔超过这个阈值的卡顿才会有 PLAY_WARNING_VIDEO_PLAY_LAG 通知
  45 +@property(nonatomic, assign) int videoBlockThreshold;
  46 +
  47 +///【字段含义】播放器遭遇网络连接断开时 SDK 默认重试的次数,取值范围1 - 10,默认值:3。
  48 +@property(nonatomic, assign) int connectRetryCount;
  49 +
  50 +///【字段含义】网络重连的时间间隔,单位秒,取值范围3 - 30,默认值:3。
  51 +@property(nonatomic, assign) int connectRetryInterval;
  52 +
  53 +///【字段含义】是否开启回声消除, 默认值为 NO
  54 +@property(nonatomic, assign) BOOL enableAEC;
  55 +
  56 +///【字段含义】是否开启消息通道, 默认值为 NO
  57 +@property(nonatomic, assign) BOOL enableMessage;
  58 +
  59 +///【字段含义】是否开启 MetaData 数据回调,默认值为 NO。
  60 +/// YES:SDK 通过 EVT_PLAY_GET_METADATA 消息抛出视频流的 MetaData 数据;
  61 +/// NO:SDK 不抛出视频流的 MetaData 数据。
  62 +/// 标准直播流都会在最开始的阶段有一个 MetaData 数据头,该数据头支持定制。
  63 +/// 您可以通过 TXLivePushConfig 中的 metaData 属性设置一些自定义数据,再通过 TXLivePlayListener 中的
  64 +/// onPlayEvent(EVT_PLAY_GET_METADATA) 消息接收到这些数据。
  65 +///【特别说明】每条音视频流中只能设置一个 MetaData 数据头,除非断网重连,否则 TXLivePlayer 的 EVT_PLAY_GET_METADATA 消息也只会收到一次。
  66 +@property(nonatomic, assign) BOOL enableMetaData;
  67 +
  68 +///【字段含义】是否开启 HTTP 头信息回调,默认值为 @“”
  69 +/// HTTP 响应头中除了“content-length”、“content-type”等标准字段,不同云服务商还可能会添加一些非标准字段。
  70 +/// 比如腾讯云会在直播 CDN 的 HTTP-FLV 格式的直播流中增加 “X-Tlive-SpanId” 响应头,并在其中设置一个随机字符串,用来唯一标识一次直播。
  71 +///
  72 +/// 如果您在使用腾讯云的直播 CDN,可以设置 flvSessionKey 为 @“X-Tlive-SpanId”,SDK 会在 HTTP 响应头里解析这个字段,
  73 +/// 并通过 TXLivePlayListener 中的 onPlayEvent(EVT_PLAY_GET_FLVSESSIONKEY) 事件通知给您的 App。
  74 +///
  75 +///【特别说明】每条音视频流中只能解析一个 flvSessionKey,除非断网重连,否则 EVT_PLAY_GET_FLVSESSIONKEY 只会抛送一次。
  76 +@property(nonatomic, copy) NSString* flvSessionKey;
  77 +
  78 +///【字段含义】视频渲染对象回调的视频格式,默认值:kCVPixelFormatType_420YpCbCr8Planar
  79 +///【特别说明】支持:kCVPixelFormatType_420YpCbCr8Planar 和 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
  80 +@property(nonatomic, assign) OSType playerPixelFormatType;
  81 +
  82 +
  83 +/////////////////////////////////////////////////////////////////////////////////
  84 +//
  85 +// 待废弃设置项
  86 +//
  87 +/////////////////////////////////////////////////////////////////////////////////
  88 +
  89 +///【字段含义】是否开启就近选路,待废弃,默认值:YES
  90 +@property(nonatomic, assign) BOOL enableNearestIP;
  91 +
  92 +///【字段含义】RTMP 传输通道的类型,待废弃,默认值为:RTMP_CHANNEL_TYPE_AUTO
  93 +@property (nonatomic, assign) int rtmpChannelType;
  94 +
  95 +///【字段含义】视频缓存目录,点播 MP4、HLS 有效
  96 +@property NSString *cacheFolderPath;
  97 +///【字段含义】最多缓存文件个数,默认值:0
  98 +@property int maxCacheItems;
  99 +///【字段含义】自定义 HTTP Headers
  100 +@property NSDictionary *headers;
  101 +
  102 +@end
  103 +/// @}
  1 +/*
  2 + * Module: TXLivePlayListener @ TXLiteAVSDK
  3 + *
  4 + * Function: 腾讯云直播播放的回调通知
  5 + *
  6 + * Version: <:Version:>
  7 + */
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +#import "TXLiveSDKTypeDef.h"
  11 +
  12 +/// @defgroup TXLivePlayListener_ios TXLivePlayListener
  13 +/// 腾讯云直播播放的回调通知
  14 +/// @{
  15 +@protocol TXLivePlayListener <NSObject>
  16 +
  17 +/**
  18 + * 直播事件通知
  19 + * @param EvtID 参见 TXLiveSDKEventDef.h
  20 + * @param param 参见 TXLiveSDKTypeDef.h
  21 + */
  22 +- (void)onPlayEvent:(int)EvtID withParam:(NSDictionary *)param;
  23 +
  24 +/**
  25 + * 网络状态通知
  26 + * @param param 参见 TXLiveSDKTypeDef.h
  27 + */
  28 +- (void)onNetStatus:(NSDictionary *)param;
  29 +
  30 +@end
  31 +/// @}
  1 +/*
  2 + *
  3 + * Module: TXLivePlayer @ TXLiteAVSDK
  4 + *
  5 + * Function: 腾讯云直播播放器
  6 + *
  7 + * Version: <:Version:>
  8 + */
  9 +
  10 +#import <Foundation/Foundation.h>
  11 +#import "TXLiveSDKTypeDef.h"
  12 +#import "TXLivePlayListener.h"
  13 +#import "TXLivePlayConfig.h"
  14 +#import "TXVideoCustomProcessDelegate.h"
  15 +#import "TXLiveRecordTypeDef.h"
  16 +#import "TXLiveRecordListener.h"
  17 +#import "TXAudioRawDataDelegate.h"
  18 +
  19 +/// @defgroup TXLivePlayer_ios TXLivePlayer
  20 +/// 腾讯云直播播放器接口类
  21 +/// @{
  22 +
  23 +/**
  24 + * 支持的直播和点播类型
  25 + *
  26 + * @note 新版本的点播 SDK,推荐参考 TXVodPlayer.h
  27 + */
  28 +typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
  29 + /// RTMP 直播
  30 + PLAY_TYPE_LIVE_RTMP = 0,
  31 + /// FLV 直播
  32 + PLAY_TYPE_LIVE_FLV = 1,
  33 + /// FLV 点播
  34 + PLAY_TYPE_VOD_FLV = 2,
  35 + /// HLS 点播
  36 + PLAY_TYPE_VOD_HLS = 3,
  37 + /// MP4点播
  38 + PLAY_TYPE_VOD_MP4 = 4,
  39 + /// RTMP 直播加速播放
  40 + PLAY_TYPE_LIVE_RTMP_ACC = 5,
  41 + /// 本地视频文件
  42 + PLAY_TYPE_LOCAL_VIDEO = 6,
  43 +};
  44 +
  45 +
  46 +/**
  47 + * 视频播放器
  48 + *
  49 + * 主要负责将直播流的音视频画面进行解码和本地渲染,包含如下技术特点:
  50 + * - 针对腾讯云的拉流地址,可使用低延时拉流,实现直播连麦等相关场景。
  51 + * - 针对腾讯云的拉流地址,可使用直播时移功能,能够实现直播观看与时移观看的无缝切换。
  52 + * - 支持自定义的音视频数据处理,让您可以根据项目需要处理直播流中的音视频数据后,进行渲染以及播放。
  53 + */
  54 +@interface TXLivePlayer : NSObject
  55 +
  56 +/////////////////////////////////////////////////////////////////////////////////
  57 +//
  58 +// (一)SDK 基础函数
  59 +//
  60 +/////////////////////////////////////////////////////////////////////////////////
  61 +
  62 +/// @name SDK 基础函数
  63 +/// @{
  64 +/**
  65 + * 1.1 设置播放回调,见 “TXLivePlayListener.h” 文件中的详细定义
  66 + */
  67 +@property(nonatomic, weak) id <TXLivePlayListener> delegate;
  68 +
  69 +/**
  70 + * 1.2 设置视频处理回调,见 “TXVideoCustomProcessDelegate.h” 文件中的详细定义
  71 + */
  72 +@property(nonatomic, weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
  73 +
  74 +/**
  75 + * 1.3 设置音频处理回调,见 “TXAudioRawDataDelegate.h” 文件中的详细定义
  76 + */
  77 +@property(nonatomic, weak) id <TXAudioRawDataDelegate> audioRawDataDelegate;
  78 +
  79 +/**
  80 + * 1.4 是否开启硬件加速,默认值:NO
  81 + */
  82 +@property(nonatomic, assign) BOOL enableHWAcceleration;
  83 +
  84 +/**
  85 + * 1.5 设置 TXLivePlayConfig 播放配置项,见 “TXLivePlayConfig.h” 文件中的详细定义
  86 + */
  87 +@property(nonatomic, copy) TXLivePlayConfig *config;
  88 +
  89 +/**
  90 + * 1.6 设置短视频录制回调,见 “TXLiveRecordListener.h” 文件中的详细定义
  91 + */
  92 +@property (nonatomic, weak) id<TXLiveRecordListener> recordDelegate;
  93 +
  94 +/**
  95 + * 1.7 startPlay 后是否立即播放,默认 YES,只有点播有效
  96 + */
  97 +@property (nonatomic) BOOL isAutoPlay;
  98 +
  99 +
  100 +/// @}
  101 +
  102 +/////////////////////////////////////////////////////////////////////////////////
  103 +//
  104 +// (二)播放基础接口
  105 +//
  106 +/////////////////////////////////////////////////////////////////////////////////
  107 +
  108 +/// @name 播放基础接口
  109 +/// @{
  110 +/**
  111 + * 2.1 创建 Video 渲染 View,该控件承载着视频内容的展示。
  112 + *
  113 + * 变更历史:1.5.2版本将参数 frame 废弃,设置此参数无效,控件大小与参数 view 的大小保持一致,如需修改控件的大小及位置,请调整父 view 的大小及位置。 参考文档:[绑定渲染界面](https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2)
  114 + *
  115 + * @param frame Widget 在父 view 中的 frame
  116 + * @param view 父 view
  117 + * @param idx Widget 在父 view 上 的层级位置
  118 + */
  119 +- (void)setupVideoWidget:(CGRect)frame containView:(TXView *)view insertIndex:(unsigned int)idx;
  120 +
  121 +/*
  122 + * 修改 VideoWidget frame
  123 + * 变更历史:1.5.2版本将此方法废弃,调用此方法无效,如需修改控件的大小及位置,请调整父 view 的大小及位置
  124 + * 参考文档:https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2
  125 + */
  126 +//- (void)resetVideoWidgetFrame:(CGRect)frame;
  127 +
  128 +/**
  129 + * 2.2 移除 Video 渲染 Widget
  130 + */
  131 +- (void)removeVideoWidget;
  132 +
  133 +/**
  134 + * 2.3 启动从指定 URL 播放 RTMP 音视频流
  135 + *
  136 + * @param url 完整的 URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
  137 + * @param playType 播放类型
  138 + * @return 0表示成功,其它为失败
  139 + */
  140 +- (int)startPlay:(NSString *)url type:(TX_Enum_PlayType)playType;
  141 +
  142 +/**
  143 + * 2.4 停止播放音视频流
  144 + *
  145 + * @return 0:成功;其它:失败
  146 + */
  147 +- (int)stopPlay;
  148 +
  149 +/**
  150 + * 2.5 是否正在播放
  151 + *
  152 + * @return YES 拉流中,NO 没有拉流
  153 + */
  154 +- (BOOL)isPlaying;
  155 +
  156 +/**
  157 + * 2.6 暂停播放
  158 + *
  159 + * 适用于点播,直播(此接口会暂停数据拉流,不会销毁播放器,暂停后,播放器会显示最后一帧数据图像)
  160 + */
  161 +- (void)pause;
  162 +
  163 +/**
  164 + * 2.6 继续播放,适用于点播,直播
  165 + */
  166 +- (void)resume;
  167 +
  168 +/// @}
  169 +
  170 +/////////////////////////////////////////////////////////////////////////////////
  171 +//
  172 +// (三)视频相关接口
  173 +//
  174 +/////////////////////////////////////////////////////////////////////////////////
  175 +
  176 +/// @name 视频相关接口
  177 +/// @{
  178 +/**
  179 + * 3.1 设置画面的方向
  180 + *
  181 + * @param rotation 方向
  182 + * @see TX_Enum_Type_HomeOrientation
  183 + */
  184 +- (void)setRenderRotation:(TX_Enum_Type_HomeOrientation)rotation;
  185 +
  186 +/**
  187 + * 3.2 设置画面的裁剪模式
  188 + *
  189 + * @param renderMode 裁剪
  190 + * @see TX_Enum_Type_RenderMode
  191 + */
  192 +- (void)setRenderMode:(TX_Enum_Type_RenderMode)renderMode;
  193 +
  194 +/**
  195 + * 3.3 截屏
  196 + *
  197 + * @param snapshotCompletionBlock 通过回调返回当前图像
  198 + */
  199 +- (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
  200 +
  201 +/**
  202 + * 3.4 获取当前渲染帧 pts
  203 + *
  204 + * @return 0:当前未处于正在播放状态(例如:未起播)
  205 + * >0:当前渲染视频帧的 pts,处于正在播放状态 (单位: 毫秒)
  206 + */
  207 +- (uint64_t)getCurrentRenderPts;
  208 +
  209 +/// @}
  210 +
  211 +/////////////////////////////////////////////////////////////////////////////////
  212 +//
  213 +// (四)音频相关接口
  214 +//
  215 +/////////////////////////////////////////////////////////////////////////////////
  216 +
  217 +/// @name 音频相关接口
  218 +/// @{
  219 +/**
  220 + * 4.1 设置静音
  221 + */
  222 +- (void)setMute:(BOOL)bEnable;
  223 +
  224 +/**
  225 + * 4.2 设置音量
  226 + *
  227 + * @param volume 音量大小,取值范围0 - 100
  228 + */
  229 +- (void)setVolume:(int)volume;
  230 +
  231 +#if TARGET_OS_IPHONE
  232 +/**
  233 + * 4.3 设置声音播放模式(切换扬声器,听筒)
  234 + * @param audioRoute 声音播放模式
  235 + */
  236 ++ (void)setAudioRoute:(TXAudioRouteType)audioRoute;
  237 +#endif
  238 +
  239 +/**
  240 + * 4.4 设置音量大小回调接口
  241 + *
  242 + * @param volumeEvaluationListener 音量大小回调接口,音量取值范围0 - 100
  243 + */
  244 +- (void)setAudioVolumeEvaluationListener:(void(^)(int))volumeEvaluationListener;
  245 +
  246 +/**
  247 + * 4.5 启用音量大小提示
  248 + *
  249 + * 开启后会在 volumeEvaluationListener 中获取到 SDK 对音量大小值的评估。
  250 + *
  251 + * @param interval 决定了 volumeEvaluationListener 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms;
  252 + */
  253 +- (void)enableAudioVolumeEvaluation:(NSUInteger)interval;
  254 +
  255 +/// @}
  256 +
  257 +/////////////////////////////////////////////////////////////////////////////////
  258 +//
  259 +// (五)直播时移相关接口
  260 +//
  261 +/////////////////////////////////////////////////////////////////////////////////
  262 +
  263 +/// @name 直播时移相关接口
  264 +/// @{
  265 +/**
  266 + * 5.1 直播时移准备,拉取该直播流的起始播放时间。
  267 + *
  268 + * 使用时移功能需在播放开始后调用此方法,否则时移失败。时移的使用请参考文档 [超级播放器](https://cloud.tencent.com/document/product/881/20208#.E6.97.B6.E7.A7.BB.E6.92.AD.E6.94.BE)
  269 + *
  270 + * @warning 非腾讯云直播地址不能时移
  271 + *
  272 + * @param domain 时移域名
  273 + * @param bizId 流 bizId
  274 + *
  275 + * @return 0:OK;-1:无播放地址;-2:appId 未配置
  276 + */
  277 +- (int)prepareLiveSeek:(NSString*)domain bizId:(NSInteger)bizId;
  278 +
  279 +/**
  280 + * 5.2 停止时移播放,返回直播
  281 + *
  282 + * @return 0:成功;其它:失败
  283 + */
  284 +- (int)resumeLive;
  285 +
  286 +#if TARGET_OS_IPHONE
  287 +/**
  288 + * 5.3 播放跳转到音视频流某个时间
  289 + * @param time 流时间,单位为秒
  290 + * @return 0:成功;其它:失败
  291 + */
  292 +- (int)seek:(float)time;
  293 +#endif
  294 +
  295 +/// @}
  296 +
  297 +/////////////////////////////////////////////////////////////////////////////////
  298 +//
  299 +// (六)视频录制相关接口
  300 +//
  301 +/////////////////////////////////////////////////////////////////////////////////
  302 +
  303 +/// @name 视频录制相关接口
  304 +/// @{
  305 +#if TARGET_OS_IPHONE
  306 +/**
  307 + * 6.1 开始录制短视频
  308 + *
  309 + * @param recordType 参见 TXRecordType 定义
  310 + * @return 0:成功;1:正在录制短视频;-2:videoRecorder 初始化失败。
  311 + */
  312 +- (int)startRecord:(TXRecordType)recordType;
  313 +
  314 +/**
  315 + * 6.2 结束录制短视频
  316 + *
  317 + * @return 0:成功;1:不存在录制任务;-2:videoRecorder 未初始化。
  318 + */
  319 +- (int)stopRecord;
  320 +
  321 +/**
  322 + * 6.3 设置播放速率
  323 + *
  324 + * @param rate 正常速度为1.0;小于为慢速;大于为快速。最大建议不超过2.0
  325 + */
  326 +- (void)setRate:(float)rate;
  327 +#endif
  328 +
  329 +/// @}
  330 +
  331 +/////////////////////////////////////////////////////////////////////////////////
  332 +//
  333 +// (七)更多实用接口
  334 +//
  335 +/////////////////////////////////////////////////////////////////////////////////
  336 +
  337 +/// @name 更多实用接口
  338 +/// @{
  339 +/**
  340 + * 7.1 设置状态浮层 view 在渲染 view 上的边距
  341 + *
  342 + * @param margin 边距
  343 + */
  344 +- (void)setLogViewMargin:(TXEdgeInsets)margin;
  345 +
  346 +/**
  347 + * 7.2 是否显示播放状态统计及事件消息浮层 view
  348 + *
  349 + * @param isShow 是否显示
  350 + */
  351 +- (void)showVideoDebugLog:(BOOL)isShow;
  352 +
  353 +/**
  354 + * 7.3 FLV 直播无缝切换
  355 + *
  356 + * @param playUrl 播放地址
  357 + * @return 0:成功;其它:失败
  358 + * @warning playUrl 必须是当前播放直播流的不同清晰度,切换到无关流地址可能会失败
  359 + */
  360 +- (int)switchStream:(NSString *)playUrl;
  361 +
  362 +/**
  363 + * 7.4 调用实验性 API 接口
  364 + *
  365 + * @note 该接口用于调用一些实验性功能
  366 + * @param jsonStr 接口及参数描述的 JSON 字符串
  367 + */
  368 +- (void)callExperimentalAPI:(NSString*)jsonStr;
  369 +
  370 +/// @}
  371 +
  372 +@end
  373 +/// @}