TXLivePush.h
13.3 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
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
//
// TXLivePush.h
// LiteAV
//
// Created by alderzhang on 2017/5/24.
// Copyright © 2017年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <VideoToolbox/VideoToolbox.h>
#if TARGET_OS_IPHONE
#import <ReplayKit/ReplayKit.h>
#endif
#import "TXLivePushConfig.h"
#import "TXLivePushListener.h"
#import "TXVideoCustomProcessDelegate.h"
#import "TXAudioCustomProcessDelegate.h"
#import "TXLiveRecordListener.h"
#import "TXLiveSDKTypeDef.h"
#import <AVFoundation/AVFoundation.h>
///推流器
@interface TXLivePush : NSObject
///推流参数配置
///@see TXLivePushConfig
@property(nonatomic, copy) TXLivePushConfig *config;
///推流回调
///@see TXLivePushListener;
@property(nonatomic, weak) id <TXLivePushListener> delegate;
///视频自定义处理回调
///@see TXVideoCustomProcessDelegate
@property(nonatomic, weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
///音频自定义处理回调
///@see TXAudioCustomProcessDelegate
@property(nonatomic, weak) id <TXAudioCustomProcessDelegate> audioProcessDelegate;
///推流端录制回调
///@see TXLiveRecordListener
@property (nonatomic, weak) id<TXLiveRecordListener> recordDelegate;
///当前推流URL
@property(nonatomic, readonly) NSString *rtmpURL;
///当前是否为前置摄像头
@property(nonatomic, readonly) BOOL frontCamera;
/**
初始化推流器
@param config 推流参数配置
*/
- (id)initWithConfig:(TXLivePushConfig *)config;
/**
启动到指定URL地址推流
@param rtmpURL 推流地址
@return 0:启动成功 -1:出错
*/
- (int)startPush:(NSString *)rtmpURL;
/**
停止推流
*/
- (void)stopPush;
/**
后台推送默认数据,在切后台或打断场合需要调用
当从前台切到后台的时候,调用pausePush会推配置里设置的图片(TXLivePushConfig.pauseImg)
pauseImg 设置后台推流的默认图片,不设置为默认黑色背景
pauseFps 设置后台推流帧率,最小值为5,最大值为20,默认10
pauseTime 设置后台推流持续时长,单位秒,默认300秒
具体使用方式请参考demo里面的示例
@note 暂停推流,后台视频发送TXLivePushConfig里面设置的图像,音频会继续录制声音发送, 如果不需要录制声音,需要再调下setMute接口
*/
- (void)pausePush;
///恢复推流, 当从后台回到前台的时候,调用resumePush恢复推送camera采集的数据
- (void)resumePush;
/**
是否正常推流
@return YES: 推流中,NO: 没有推流
*/
- (bool)isPublishing;
/**
*视频录制
*开始录制短视频,开始推流后才能启动录制
@note 1,录制过程中请勿动态切换分辨率和软硬编,可能导致生成的视频异常
2,目前仅支持 企业版 和 Professional SDK版本,其他版本调用无效
@param videoPath 视频录制后存储路径
@return
返回值 | 涵义
------|------
0 | 成功
-1 | videoPath 为nil
-2 | 上次录制未结束,请先stopRecord
-3 | 推流未开始
*/
-(int) startRecord:(NSString *)videoPath;
/**
结束录制短视频,停止推流后,如果视频还在录制中,SDK内部会自动结束录制
@return 0: 成功 -1:不存在录制任务;
*/
-(int) stopRecord;
/**
开始推流画面的预览
@param view 预览控件所在的父控件
@return 0 (异步处理,返回总是0)
*/
- (int)startPreview:(TXView *)view;
/**
停止预览
*/
- (void)stopPreview;
/**
切换前后摄像头
*/
- (int)switchCamera;
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
- (void)selectCamera:(AVCaptureDevice *)camera;
#endif
/** 设置镜像
@param isMirror YES:播放端看到的是镜像画面 NO:播放端看到的是非镜像画面
@note 推流端前置摄像头默认看到的是镜像画面,后置摄像头默认看到的是非镜像画面
*/
- (void)setMirror:(BOOL)isMirror;
/**
设置美颜 和 美白 效果级别
@param beautyStyle TX_Enum_Type_BeautyStyle
@param beautyLevel : 美颜级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
@param whitenessLevel : 美白级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
@param ruddinessLevel : 红润级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
@see TX_Enum_Type_BeautyStyle
*/
- (void)setBeautyStyle:(TX_Enum_Type_BeautyStyle)beautyStyle beautyLevel:(float)beautyLevel whitenessLevel:(float)whitenessLevel ruddinessLevel:(float)ruddinessLevel;
/**
设置大眼级别(企业版有效,其它版本设置此参数无效)
@param eyeScaleLevel 大眼级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
*/
- (void)setEyeScaleLevel:(float)eyeScaleLevel;
/**设置瘦脸级别(企业版有效,其它版本设置此参数无效)
@param faceScaleLevel 瘦脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
*/
- (void)setFaceScaleLevel:(float)faceScaleLevel;
/**
设置指定素材滤镜特效
@param image 指定素材,即颜色查找表图片。
@note 一定要用png格式!!!demo用到的滤镜查找表图片位于TXLiteAVDemo/Resource/Beauty/filter/FilterResource.bundle中
*/
- (void)setFilter:(TXImage *)image;
/**
设置滤镜效果程度
@param specialValue 从0到1,越大滤镜效果越明显,默认取值0.5
*/
- (void)setSpecialRatio:(float)specialValue;
/**
设置V脸(企业版有效,其它版本设置此参数无效)
@param faceVLevel V脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
*/
- (void)setFaceVLevel:(float)faceVLevel;
/**
设置下巴拉伸或收缩(企业版有效,其它版本设置此参数无效)
@param chinLevel 下巴拉伸或收缩级别取值范围 -9 ~ 9; 0 表示关闭 -9收缩 ~ 9拉伸。
*/
- (void)setChinLevel:(float)chinLevel;
/**
设置短脸(企业版有效,其它版本设置此参数无效)
@param faceShortlevel 短脸级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
*/
- (void)setFaceShortLevel:(float)faceShortlevel;
/**
设置瘦鼻(企业版有效,其它版本设置此参数无效)
@param noseSlimLevel 瘦鼻级别取值范围 0 ~ 9; 0 表示关闭 1 ~ 9值越大 效果越明显。
*/
- (void)setNoseSlimLevel:(float)noseSlimLevel;
/**
打开闪关灯。
@param bEnable YES: 打开 NO: 关闭
@return YES: 打开成功 NO: 打开失败
*/
- (BOOL)toggleTorch:(BOOL)bEnable;
/**
设置本地视频方向
@param rotation 取值为 0 , 90, 180, 270(其他值无效) 表示推流端本地视频向右旋转的角度
@note 横竖屏推流,activty旋转可能会改变本地视频流方向,可以设置此参数让本地视频回到正方向,具体请参考demo设置,如果demo里面的设置满足不了您的业务需求,请自行setRenderRotation到自己想要的方向(tips:推流端setRenderRotation不会改变观众端的视频方向)
*/
- (void)setRenderRotation:(int)rotation;
/**
设置静音
@param bEnable YES: 静音 NO:关闭静音
*/
- (void)setMute:(BOOL)bEnable;
/**
发送客户自定义的音频PCM数据
@param data 要发送的PCM数据
@param len 数据长度
@note 目前SDK只支持16位采样的PCM编码;如果是单声道,请保证传入的PCM长度为2048;如果是双声道,请保证传入的PCM长度为4096
*/
- (void)sendCustomPCMData:(unsigned char *)data len:(unsigned int)len;
/**
发送自定义的SampleBuffer,内部有简单的帧率控制,发太快会自动丢帧;超时则会重发最后一帧
@param sampleBuffer 要发送的视频sampleBuffer
@note autoSampleBufferSize优先级高于sampleBufferSize @see TXLivePushConfig
@property sampleBufferSize,设置输出分辨率,如果此分辨率不等于sampleBuffer中数据分辨率则会对视频数据做缩放
@property autoSampleBufferSize,输出分辨率等于输入分辨率,即sampleBuffer中数据的实际分辨率
*/
- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer;
#if TARGET_OS_IPHONE
/**
Replaykit发送自定义音频包
@prama sampleBuffer 声音sampleBuffer
@prama sampleBufferType RPSampleBufferTypeAudioApp or RPSampleBufferTypeAudioMic,
@note 当两种声音都发送时,内部做混音;否则只发送一路声音
*/
- (void)sendAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType;
#endif
/**
Replaykit发送静音包,在InApp类型录制切后台场合时需要调用。系统屏幕录制不需要
@param muted YES: 静音 NO:关闭静音
*/
- (void)setSendAudioSampleBufferMuted:(BOOL)muted;
/**
调用手动对焦功能
@param touchPoint 为传入的对焦点位置
@note 早期SDK版本手动对焦功能是由SDK内部触发,现在把手动对焦的接口开放出来,客户可以根据自己需求触发 ,如果客户调用这个接口,SDK内部触发对焦的逻辑将会停止,避免重复触发对焦逻辑
*/
- (void)setFocusPosition:(CGPoint)touchPoint;
/**
调整焦距
@param distance 焦距大小, 取值范围 1~5
@note 当为1的时候为最远视角(正常镜头),当为5的时候为最近视角(放大镜头),这里最大值推荐为5,超过5后视频数据会变得模糊不清
*/
- (void)setZoom:(CGFloat)distance;
/**
播放背景音乐, 用于混音处理,背景音与Mic采集到的人声混合
@param path 本地音乐文件路径
@return YES:成功 NO:失败
*/
- (BOOL)playBGM:(NSString *)path;
/**
播放背景音乐
@param path 本地音乐文件路径
@param beginNotify 音乐播放开始的回调通知
@param progressNotify 音乐播放的进度通知,单位毫秒
@param completeNotify 音乐播放结束的回调通知
@return YES:成功 NO:失败
*/
- (BOOL) playBGM:(NSString *)path
withBeginNotify:(void (^)(NSInteger errCode))beginNotify
withProgressNotify:(void (^)(NSInteger progressMS, NSInteger durationMS))progressNotify
andCompleteNotify:(void (^)(NSInteger errCode))completeNotify;
/**
停止播放背景音乐
@return YES:成功 NO:失败
*/
- (BOOL)stopBGM;
/**
暂停播放背景音乐
@return YES:成功 NO:失败
*/
- (BOOL)pauseBGM;
/**
继续播放背景音乐
@return YES:成功 NO:失败
*/
- (BOOL)resumeBGM;
/**
获取音乐文件总时长,单位毫秒
@param path 音乐文件路径,如果path为空,那么返回当前正在播放的music时长
*/
- (int)getMusicDuration:(NSString *)path;
/**
设置麦克风的音量大小,播放背景音乐混音时使用,用来控制麦克风音量大小
@param volume 音量大小,1为正常音量,建议值为0~2,如果需要调大音量可以设置更大的值
@return YES:成功 NO:失败
*/
- (BOOL)setMicVolume:(float)volume;
/**
设置背景音乐的音量大小,播放背景音乐混音时使用,用来控制背景音音量大小
@param volume 音量大小,1为正常音量,建议值为0~2,如果需要调大背景音量可以设置更大的值
@return YES:成功 NO:失败
*/
- (BOOL)setBGMVolume:(float)volume;
/**
设置背景音的变声类型
@param pitch 音调, 默认值是0.f;范围是 [-1,1];
@return YES:成功 NO:失败
*/
- (BOOL)setBgmPitch:(float)pitch;
/**
设置视频质量
@param quality 画质类型(标清,高清,超高清)
@param adjustBitrate 动态码率开关
@param adjustResolution 动态切分辨率开关
*/
- (void)setVideoQuality:(TX_Enum_Type_VideoQuality)quality
adjustBitrate:(BOOL) adjustBitrate
adjustResolution:(BOOL) adjustResolution;
/**
设置混响效果
@param reverbType :混响类型 ,详见 TXReverbType
@return YES:成功 NO:失败
@see TXReverbType
*/
- (BOOL)setReverbType:(TXReverbType)reverbType;
/**
设置变声类型
@param voiceChangerType 变声类型, 详见 TXVoiceChangerType
@return YES:成功 NO:失败
@see TXVoiceChangerType
*/
- (BOOL)setVoiceChangerType:(TXVoiceChangerType)voiceChangerType;
/**
设置绿幕文件。仅企业版有效
@param file 绿幕文件路径。支持mp4; nil 关闭绿幕
*/
- (void)setGreenScreenFile:(NSURL *)file;
/**
选择动效。仅企业版有效
@param tmplName 动效名称
@param tmplDir 动效所在目录
*/
- (void)selectMotionTmpl:(NSString *)tmplName inDir:(NSString *)tmplDir;
/**
设置动效静音 (企业版有效,其它版本设置此参数无效)
@param motionMute YES 静音, NO 不静音
*/
- (void)setMotionMute:(BOOL)motionMute;
/**
设置状态浮层view在渲染view上的边距
@param margin logView在渲染view上的边距
*/
- (void)setLogViewMargin:(TXEdgeInsets)margin;
/**
是否显示播放状态统计及事件消息浮层view
@param isShow YES:显示 NO:隐藏
*/
- (void)showVideoDebugLog:(BOOL)isShow;
/**
推流截图
@params snapshotCompletionBlock 截图完成回调
*/
- (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
/**
发送消息,播放端通过 onPlayEvent(EVT_PLAY_GET_MESSAGE)接收
@param data 要发送的消息数据
@note 1. 若您使用过该接口,切换到sendMessageEx接口时会有兼容性问题: sendMessageEx发送消息给旧版本的SDK(5.0及5.0以下)时,消息会无法正确解析,但播放不受影响。
@note 2. 若您未使用过该接口,请直接使用sendMessageEx
*/
- (void)sendMessage:(NSData *) data;
/**
发送消息,播放端通过 onPlayEvent(EVT_PLAY_GET_MESSAGE)接收
@param data 要发送的消息数据
@note 1. 消息大小不允许超过2K
@note 2. 该接口发送消息,能够解决旧的sendMessage接口会导致在iOS上无法播放对应的HLS流的问题
*/
- (BOOL)sendMessageEx:(NSData *) data;
@end