TXLiveSDKTypeDef.h
18.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
#ifndef __TX_LIVE_SDK_TYPE_DEF_H__
#define __TX_LIVE_SDK_TYPE_DEF_H__
#include "TXLiveSDKEventDef.h"
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
typedef UIView TXView;
typedef UIImage TXImage;
typedef UIEdgeInsets TXEdgeInsets;
#elif TARGET_OS_MAC
#import <AppKit/AppKit.h>
typedef NSView TXView;
typedef NSImage TXImage;
typedef NSEdgeInsets TXEdgeInsets;
#endif
/////////////////////////////////////////////////////////////////////////////////
//
// 【视频相关枚举值定义】
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 视频分辨率
*
* 在普通模式下,TXLivePusher 只支持三种固定的分辨率,即:360 × 640、540 × 960 以及 720 × 1280。
*
*【如何横屏推流】
* 如果希望使用 640 × 360、960 × 540、1280 × 720 这样的横屏分辨率,需要设置 TXLivePushConfig 中的 homeOrientation 属性,
* 并使用 TXLivePusher 中的 setRenderRotation 接口进行画面旋转。
*
*【自定义分辨率】
* 如果希望使用其他分辨率,可以设置 TXLivePushConfig 中的 customModeType 为 CUSTOM_MODE_VIDEO_CAPTURE,
* 自己采集 SampleBuffer 送给 TXLivePusher 的 sendVideoSampleBuffer 接口。
*
*【建议的分辨率】
* 手机直播场景下最常用的分辨率为 9:16 的竖屏分辨率 540 × 960。
* 从清晰的角度,540 × 960 比 360 × 640 要清晰,同时跟 720 × 1280 相当。
* 从性能的角度,540 × 960 可以避免前置摄像头开启 720 × 1280 的采集分辨率,对于美颜开销很大的场景能节省不少的计算量。
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoResolution) {
/// 竖屏分辨率,宽高比为 9:16
VIDEO_RESOLUTION_TYPE_360_640 = 0, ///< 建议码率 800kbps
VIDEO_RESOLUTION_TYPE_540_960 = 1, ///< 建议码率 1200kbps
VIDEO_RESOLUTION_TYPE_720_1280 = 2, ///< 建议码率 1800kbps
VIDEO_RESOLUTION_TYPE_1080_1920 = 30, ///< 建议码率 3000kbps
/// 如下均为内建分辨率,为 SDK 内部使用,不支持通过接口进行设置
VIDEO_RESOLUTION_TYPE_640_360 = 3,
VIDEO_RESOLUTION_TYPE_960_540 = 4,
VIDEO_RESOLUTION_TYPE_1280_720 = 5,
VIDEO_RESOLUTION_TYPE_1920_1080 = 31,
VIDEO_RESOLUTION_TYPE_320_480 = 6,
VIDEO_RESOLUTION_TYPE_180_320 = 7,
VIDEO_RESOLUTION_TYPE_270_480 = 8,
VIDEO_RESOLUTION_TYPE_320_180 = 9,
VIDEO_RESOLUTION_TYPE_480_270 = 10,
VIDEO_RESOLUTION_TYPE_240_320 = 11,
VIDEO_RESOLUTION_TYPE_360_480 = 12,
VIDEO_RESOLUTION_TYPE_480_640 = 13,
VIDEO_RESOLUTION_TYPE_320_240 = 14,
VIDEO_RESOLUTION_TYPE_480_360 = 15,
VIDEO_RESOLUTION_TYPE_640_480 = 16,
VIDEO_RESOLUTION_TYPE_480_480 = 17,
VIDEO_RESOLUTION_TYPE_270_270 = 18,
VIDEO_RESOLUTION_TYPE_160_160 = 19,
};
/**
* 1.2 画面质量挡位
*
* 如果您希望调整直播的编码参数,建议您直接使用 TXLivePusher 提供的 setVideoQuality 接口。
* 由于视频编码参数中的分辨率,码率和帧率对最终效果都有着复杂的影响,如果您之前没有相关操作经验,不建议直接修改这些编码参数。
* 我们在 setVideoQuality 接口中提供了如下几个挡位供您选择:
*
* 1. 标清:采用 360 × 640 的分辨率,码率调控范围 300kbps - 800kbps,关闭网络自适应时的码率为 800kbps,适合网络较差的直播环境。
* 2. 高清:采用 540 × 960 的分辨率,码率调控范围 600kbps - 1500kbps,关闭网络自适应时的码率为 1200kbps,常规手机直播的推荐挡位。
* 3. 超清:采用 720 × 1280 的分辨率,码率调控范围 600kbps - 1800kbps,关闭网络自适应时的码率为 1800kbps,能耗高,但清晰度较标清提升并不明显。
* 4. 连麦(大主播):主播从原来的“推流状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 MAIN_PUBLISHER 挡位。
* 5. 连麦(小主播):观众从原来的“播放状态”进入“连麦状态”后,可以通过 setVideoQuality 接口调整自 SUB_PUBLISHER 挡位。
* 6. 视频通话:该选项后续会逐步废弃,如果您希望实现纯视频通话而非直播功能,推荐使用腾讯云 [TRTC](https://cloud.tencent.com/product/trtc) 服务。
*
* 【推荐设置】如果您对整个平台的清晰度要求比较高,推荐使用 setVideoQuality(HIGH_DEFINITION, NO, NO) 的组合。
* 如果您的主播有很多三四线城市的网络适配要求,推荐使用 setVideoQuality(HIGH_DEFINITION, YES, NO) 的组合。
*
* @note 在开启硬件加速后,您可能会发现诸如 368 × 640 或者 544 × 960 这样的“不完美”分辨率。
* 这是由于部分硬编码器要求像素能被 16 整除所致,属于正常现象,您可以通过播放端的填充模式解决“小黑边”问题。
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_VideoQuality) {
VIDEO_QUALITY_STANDARD_DEFINITION = 1, ///< 标清:采用 360 × 640 的分辨率
VIDEO_QUALITY_HIGH_DEFINITION = 2, ///< 高清:采用 540 × 960 的分辨率
VIDEO_QUALITY_SUPER_DEFINITION = 3, ///< 超清:采用 720 × 1280 的分辨率
VIDEO_QUALITY_ULTRA_DEFINITION = 7, ///< 蓝光:采用 1080 × 1920 的分辨率
VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER = 4, ///< 连麦场景下的大主播使用
VIDEO_QUALITY_LINKMIC_SUB_PUBLISHER = 5, ///< 连麦场景下的小主播(连麦的观众)使用
VIDEO_QUALITY_REALTIME_VIDEOCHAT = 6, ///< 纯视频通话场景使用(已废弃)
};
/**
* 1.3 画面旋转方向
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_HomeOrientation) {
HOME_ORIENTATION_RIGHT = 0, ///< HOME 键在右边,横屏模式
HOME_ORIENTATION_DOWN = 1, ///< HOME 键在下面,手机直播中最常见的竖屏直播模式
HOME_ORIENTATION_LEFT = 2, ///< HOME 键在左边,横屏模式
HOME_ORIENTATION_UP = 3, ///< HOME 键在上边,竖屏直播(适合小米 MIX2)
};
/**
* 1.4 画面填充模式
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_RenderMode) {
RENDER_MODE_FILL_SCREEN = 0, ///< 图像铺满屏幕,不留黑边,如果图像宽高比不同于屏幕宽高比,部分画面内容会被裁剪掉。
RENDER_MODE_FILL_EDGE = 1, ///< 图像适应屏幕,保持画面完整,但如果图像宽高比不同于屏幕宽高比,会有黑边的存在。
};
/**
* 1.5 美颜风格
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyStyle) {
BEAUTY_STYLE_SMOOTH = 0, ///< 光滑,磨皮程度较高,更适合秀场直播类场景下使用。
BEAUTY_STYLE_NATURE = 1, ///< 自然,磨皮算法会最大限度保留皮肤细节。
BEAUTY_STYLE_PITU = 2, ///< 天天P图版美颜, 需要企业版 SDK 才能支持,普通版本设置此选项无效。
};
/**
* 1.6 美颜程度,取值范围1 - 9,该枚举值定义了关闭和最大值。
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_BeautyFilterDepth) {
BEAUTY_FILTER_DEPTH_CLOSE = 0, ///< 关闭美颜
BEAUTY_FILTER_DEPTH_MAX = 9, ///< 最大美颜强度
};
/**
* 1.6 网络自适应算法,推荐选项:AUTO_ADJUST_LIVEPUSH_STRATEGY
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_AutoAdjustStrategy) {
AUTO_ADJUST_NONE = -1, ///< 非法数值,用于 SDK 内部做合法性检查
AUTO_ADJUST_LIVEPUSH_STRATEGY = 0, ///< 最适合直播模式下的流控算法
AUTO_ADJUST_LIVEPUSH_RESOLUTION_STRATEGY = 1, ///< 不推荐:SDK 内部会调整视频分辨率,如果有 H5 分享的需求请勿使用
AUTO_ADJUST_REALTIME_VIDEOCHAT_STRATEGY = 5, ///< 待废弃,请使用腾讯云 TRTC 服务
AUTO_ADJUST_BITRATE_STRATEGY_1 = 0, ///< 已经废弃
AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_1 = 1, ///< 已经废弃
AUTO_ADJUST_BITRATE_STRATEGY_2 = 2, ///< 已经废弃
AUTO_ADJUST_BITRATE_RESOLUTION_STRATEGY_2 = 3, ///< 已经废弃
AUTO_ADJUST_REALTIME_BITRATE_STRATEGY = 4, ///< 已经废弃
AUTO_ADJUST_REALTIME_BITRATE_RESOLUTION_STRATEGY = 5, ///< 已经废弃
};
/**
* 1.7 视频帧的数据格式(未压缩前的)
*/
typedef NS_ENUM(NSInteger, TXVideoType) {
VIDEO_TYPE_420SP = 1, ///< Android 视频采集格式,PixelFormat.YCbCr_420_SP 17
VIDEO_TYPE_420YpCbCr = 2, ///< iOS 视频采集格式,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
VIDEO_TYPE_420P = 3, ///< yuv420p格式
VIDEO_TYPE_BGRA8888 = 4, ///< BGRA8888
VIDEO_TYPE_RGBA8888 = 5, ///< RGBA8888
VIDEO_TYPE_NV12 = 6, ///< NV12(iOS)
};
/**
* 1.8 本地视频预览镜像类型
*
* iOS 的本地画面提供三种设置模式
*/
typedef NS_ENUM(NSUInteger, TXLocalVideoMirrorType) {
LocalVideoMirrorType_Auto = 0, ///< 前置摄像头镜像,后置摄像头不镜像
LocalVideoMirrorType_Enable = 1, ///< 前后置摄像头画面均镜像
LocalVideoMirrorType_Disable = 2, ///< 前后置摄像头画面均不镜像
};
/////////////////////////////////////////////////////////////////////////////////
//
// 【音频相关枚举值定义】
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 音频采样率
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_AudioSampleRate) {
AUDIO_SAMPLE_RATE_8000 = 0, ///< 8k采样率
AUDIO_SAMPLE_RATE_16000 = 1, ///< 16k采样率
AUDIO_SAMPLE_RATE_32000 = 2, ///< 32k采样率
AUDIO_SAMPLE_RATE_44100 = 3, ///< 44.1k采样率
AUDIO_SAMPLE_RATE_48000 = 4, ///< 48k采样率
};
/**
* 2.2 混响类型
*/
typedef NS_ENUM(NSInteger, TXReverbType) {
REVERB_TYPE_0 = 0, ///< 关闭混响
REVERB_TYPE_1 = 1, ///< KTV
REVERB_TYPE_2 = 2, ///< 小房间
REVERB_TYPE_3 = 3, ///< 大会堂
REVERB_TYPE_4 = 4, ///< 低沉
REVERB_TYPE_5 = 5, ///< 洪亮
REVERB_TYPE_6 = 6, ///< 金属声
REVERB_TYPE_7 = 7, ///< 磁性
};
/**
* 2.3 变声选项
*/
typedef NS_ENUM(NSInteger, TXVoiceChangerType) {
VOICECHANGER_TYPE_0 = 0, ///< 关闭变声
VOICECHANGER_TYPE_1 = 1, ///< 熊孩子
VOICECHANGER_TYPE_2 = 2, ///< 萝莉
VOICECHANGER_TYPE_3 = 3, ///< 大叔
VOICECHANGER_TYPE_4 = 4, ///< 重金属
VOICECHANGER_TYPE_5 = 5, ///< 感冒
VOICECHANGER_TYPE_6 = 6, ///< 外国人
VOICECHANGER_TYPE_7 = 7, ///< 困兽
VOICECHANGER_TYPE_8 = 8, ///< 死肥仔
VOICECHANGER_TYPE_9 = 9, ///< 强电流
VOICECHANGER_TYPE_10 = 10, ///< 重机械
VOICECHANGER_TYPE_11 = 11, ///< 空灵
};
/**
* 2.4 声音播放模式(音频路由)
*
* 一般手机都有两个扬声器,设置音频路由的作用就是要决定声音从哪个扬声器播放出来。
* - Speakerphone:扬声器,位于手机底部,声音偏大,适合外放音乐。
* - Earpiece:听筒,位于手机顶部,声音偏小,适合通话。
*/
typedef NS_ENUM(NSInteger, TXAudioRouteType) {
AUDIO_ROUTE_SPEAKER = 0, ///< 扬声器,位于手机底部,声音偏大,适合外放音乐。
AUDIO_ROUTE_RECEIVER = 1, ///< 听筒,位于手机顶部,声音偏小,适合通话。
};
/**
* 2.5 系统音量类型
*
* 该枚举值用于控制推流过程中使用何种系统音量类型
*/
typedef NS_ENUM(NSInteger, TXSystemAudioVolumeType) {
SYSTEM_AUDIO_VOLUME_TYPE_AUTO = 0, ///< 默认类型,SDK会自动选择合适的音量类型
SYSTEM_AUDIO_VOLUME_TYPE_MEDIA = 1, ///< 仅使用媒体音量,SDK不再使用通话音量
SYSTEM_AUDIO_VOLUME_TYPE_VOIP = 2, ///< 仅使用通话音量,SDK一直使用通话音量
};
/**
* 2.6 推流用网络通道(待废弃)
*/
typedef NS_ENUM(NSInteger, TX_Enum_Type_RTMPChannel) {
RTMP_CHANNEL_TYPE_AUTO = 0, ///< 自动:推腾讯云使用加速协议,推友商云使用标准 RTMP 协议。
RTMP_CHANNEL_TYPE_STANDARD = 1, ///< 标准 RTMP 协议
RTMP_CHANNEL_TYPE_PRIVATE = 2, ///< 腾讯云专属加速协议
};
/**
* 2.7 屏幕采集源(用于录屏推流)
*/
#if TARGET_OS_OSX
typedef NS_ENUM(NSInteger, TXCaptureVideoInputSource) {
TXCaptureVideoInputSourceCamera,
TXCaptureVideoInputSourceScreen,
TXCaptureVideoInputSourceWindow
};
#endif
/////////////////////////////////////////////////////////////////////////////////
//
// 【状态通知字段名 onNetStatus】
//
/////////////////////////////////////////////////////////////////////////////////
/**
* TXLivePushListener 和 TXLivePlayListener 的 onNetStatus() 会以 2s 一次的时间间隔,定时通知网络状态和内部指标,
* 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
*/
#define NET_STATUS_CPU_USAGE @"CPU_USAGE" ///> 进程 CPU 占用率
#define NET_STATUS_CPU_USAGE_D @"CPU_USAGE_DEVICE" ///> 系统 CPU 占用率
#define NET_STATUS_VIDEO_WIDTH @"VIDEO_WIDTH" ///> 视频分辨率宽度
#define NET_STATUS_VIDEO_HEIGHT @"VIDEO_HEIGHT" ///> 视频分辨率高度
#define NET_STATUS_VIDEO_FPS @"VIDEO_FPS" ///> 视频帧率:也就是视频编码器每秒生产了多少帧画面。
#define NET_STATUS_VIDEO_GOP @"VIDEO_GOP" ///> 关键帧间隔:即每两个关键帧(I帧)间隔时长,单位:秒。
#define NET_STATUS_VIDEO_BITRATE @"VIDEO_BITRATE" ///> 视频码率:即视频编码器每秒生产了多少视频数据,单位:kbps。
#define NET_STATUS_AUDIO_BITRATE @"AUDIO_BITRATE" ///> 音频码率:即音频编码器每秒生产了多少音频数据,单位:kbps。
#define NET_STATUS_NET_SPEED @"NET_SPEED" ///> 传输速度:即每秒钟发送或接收了多少字节的数据。
#define NET_STATUS_VIDEO_CACHE @"VIDEO_CACHE" ///> TXLivePusher:主播端堆积的视频帧数;TXLivePlayer:播放端缓冲的视频总时长。
#define NET_STATUS_AUDIO_CACHE @"AUDIO_CACHE" ///> TXLivePusher:主播端堆积的音频帧数;TXLivePlayer:播放端缓冲的音频总时长。
#define NET_STATUS_VIDEO_DROP @"VIDEO_DROP" ///> TXLivePusher:主播端主动丢弃的视频帧数;TXLivePlayer: N/A。
#define NET_STATUS_AUDIO_DROP @"AUDIO_DROP" ///> 暂未使用
#define NET_STATUS_V_DEC_CACHE_SIZE @"V_DEC_CACHE_SIZE" ///> TXLivePlayer:播放端解码器中缓存的视频帧数(Android 端硬解码时存在)。
#define NET_STATUS_V_SUM_CACHE_SIZE @"V_SUM_CACHE_SIZE" ///> TXLivePlayer:播放端缓冲的总视频帧数,该数值越大,播放延迟越高。
#define NET_STATUS_AV_PLAY_INTERVAL @"AV_PLAY_INTERVAL" ///> TXLivePlayer:音画同步错位时间(播放),单位 ms,此数值越小,音画同步越好。
#define NET_STATUS_AV_RECV_INTERVAL @"AV_RECV_INTERVAL" ///> TXLivePlayer:音画同步错位时间(网络),单位 ms,此数值越小,音画同步越好。
#define NET_STATUS_AUDIO_CACHE_THRESHOLD @"AUDIO_CACHE_THRESHOLD" ///> TXLivePlayer:音频缓冲时长阈值,缓冲超过该阈值后,播放器会开始调控延时。
#define NET_STATUS_AUDIO_INFO @"AUDIO_INFO" ///> 音频信息:包括采样率信息和声道数信息
#define NET_STATUS_NET_JITTER @"NET_JITTER" ///> 网络抖动:数值越大表示抖动越大,网络越不稳定
#define NET_STATUS_QUALITY_LEVEL @"NET_QUALITY_LEVEL" ///> 网络质量:0:未定义 1:最好 2:好 3:一般 4:差 5:很差 6:不可用
#define NET_STATUS_SERVER_IP @"SERVER_IP" ///> 连接的Server IP地址
/////////////////////////////////////////////////////////////////////////////////
//
// 【事件通知字段名 onPushEvent onPlayEvent】
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 腾讯云 LiteAVSDK 通过 TXLivePushListener 中的 onPushEvent(),TXLivePlayListener 中的 onPlayEvent() 向您通知内部错误、警告和事件:
* - 错误:严重且不可恢复的错误,会中断 SDK 的正常逻辑。
* - 警告:非致命性的提醒和警告,可以不理会。
* - 事件:SDK 的流程和状态通知,比如开始推流,开始播放,等等。
*
* 这些数值采用 key-value 的组织格式,其中 key 值的定义如下:
*/
#define EVT_MSG @"EVT_MSG" ///> 事件ID
#define EVT_TIME @"EVT_TIME" ///> 事件发生的UTC毫秒时间戳
#define EVT_PARAM1 @"EVT_PARAM1" ///> 事件参数1
#define EVT_PARAM2 @"EVT_PARAM2" ///> 事件参数2
#define EVT_GET_MSG @"EVT_GET_MSG" ///> 消息内容,收到PLAY_EVT_GET_MESSAGE事件时,通过该字段获取消息内容
#define EVT_PLAY_PROGRESS @"EVT_PLAY_PROGRESS" ///> 点播:视频播放进度
#define EVT_PLAY_DURATION @"EVT_PLAY_DURATION" ///> 点播:视频总时长
#define EVT_PLAYABLE_DURATION @"PLAYABLE_DURATION" ///> 点播:视频可播放时长
#define EVT_PLAY_COVER_URL @"EVT_PLAY_COVER_URL" ///> 点播:视频封面
#define EVT_PLAY_URL @"EVT_PLAY_URL" ///> 点播:视频播放地址
#define EVT_PLAY_NAME @"EVT_PLAY_NAME" ///> 点播:视频名称
#define EVT_PLAY_DESCRIPTION @"EVT_PLAY_DESCRIPTION" ///> 点播:视频简介
#define STREAM_ID @"STREAM_ID"
#endif