CNLiveStreamingKit.h 10.8 KB
//
//  CNLiveStreamingKit.h
//  QNLiveStreamingDemo
//
//  Created by iOS on 16/12/29.
//  Copyright © 2016年 zhulin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CNLiveQNLivingKit.h"

@protocol CNLiveStreamingKitDelagate <NSObject>

@optional
/**
 *  推流状态发生改变的回调
 */
- (void)streamStateDidChange:(PLStreamState)state;

/**
 *  因产生了某个 error 而断开推流的回调
 */
- (void)didDisconnectWithError:(NSDictionary *)errorDic;

/**
 *  当开始推流时,会每间隔 3s 调用该回调方法来反馈该 3s 内的流状态,包括视频帧率、音频帧率、音视频总码率
 */
- (void)streamStatusDidUpdate:(PLStreamStatus *)status;

/**
 *  摄像头授权状态发生变化的回调
 */
- (void)didGetCameraAuthorizationStatus:(PLAuthorizationStatus)status;

/**
 *  麦克风授权状态发生变化的回调
 */
- (void)didGetMicrophoneAuthorizationStatus:(PLAuthorizationStatus)status;

@end

@interface CNLiveStreamingKit : NSObject

/**
 @abstract      初始化(视讯云)
 @warning       实例化的对象必须赋值给一个全局变量
 @param         videoCaptureConfiguration                   视频采集配置
 @param         audioCaptureConfiguration                   音频采集配置
 @param         videoStreamingConfiguration                 视频推流配置
 @param         audioStreamingConfiguration                 音频推流配置
 @param         activityId              活动ID,确保SP下的唯一性
 @param         channelId               主播ID
 @param         isHorizontalScreen      屏幕方向,0:垂直即竖屏 /1:水平即横屏 ,默认为1
 @warning       必传参数
 */
-(instancetype)initWithVideoCaptureConfiguration:(PLVideoCaptureConfiguration *)videoCaptureConfiguration
                       audioCaptureConfiguration:(PLAudioCaptureConfiguration *)audioCaptureConfiguration
                     videoStreamingConfiguration:(PLVideoStreamingConfiguration *)videoStreamingConfiguration
                     audioStreamingConfiguration:(PLAudioStreamingConfiguration *)audioStreamingConfiguration
                                      activityId:(NSString *)activityId
                                       channelId:(NSString *)channelId
                              isHorizontalScreen:(NSString *)isHorizontalScreen;

/**
 *  初始化(普通推流)
 @warning       实例化的对象必须赋值给一个全局变量
 @param         videoCaptureConfiguration                   视频采集配置
 @param         audioCaptureConfiguration                   音频采集配置
 @param         videoStreamingConfiguration                 视频推流配置
 @param         audioStreamingConfiguration                 音频推流配置
 */
- (instancetype)initWithVideoCaptureConfiguration:(PLVideoCaptureConfiguration *)videoCaptureConfiguration
                         audioCaptureConfiguration:(PLAudioCaptureConfiguration *)audioCaptureConfiguration
                       videoStreamingConfiguration:(PLVideoStreamingConfiguration *)videoStreamingConfiguration
                       audioStreamingConfiguration:(PLAudioStreamingConfiguration *)audioStreamingConfiguration;

/**
 @abstract      是否开启控制台输出日志
 @discussion    默认为开启
 */
@property (nonatomic, assign) BOOL logPrintEnable;

@property (nonatomic, assign) id<CNLiveStreamingKitDelagate> delegate;

#pragma mark -
#pragma mark - 与活动相关参数(非必传)

/**
 @abstract      活动名称(非必传)
 */
@property (nonatomic, strong) NSString *activityName;

/**
 @abstract      活动状态,0:未开始 /1:已开始 /3:已结束 /4 已下线,默认为0(非必传)
 */
@property (nonatomic, strong) NSString *activityStatus;

/**
 @abstract      开始时间,格式yyyyMMddHHmmss(非必传)
 */
@property (nonatomic, strong) NSString *startTime;

/**
 @abstract      结束时间,格式yyyyMMddHHmmss(非必传)
 */
@property (nonatomic, strong) NSString *endTime;

/**
 @abstract      活动封面(非必传)
 */
@property (nonatomic, strong) NSString *coverImgUrl;

/**
 @abstract      活动分类ID(非必传)
 */
@property (nonatomic, strong) NSString *activityCategory;

/**
 @abstract      扩展字段,参数格式为Map对象的Json字符串(主播昵称、头像、)(非必传)
 */
@property (nonatomic, strong) NSString *extensions;

/**
 @abstract      回调通知活动状态(错误,结束、心跳异常等状态),post 参数activityid、activitystatus值...(非必传)
 */
@property (nonatomic, strong) NSString *callbackAcitvityStatushttpPostUrl;

/**
 *  是否正在推流中,只读
 */
@property (nonatomic, assign, readonly) BOOL    isStreamingRunning;

/**
 *  视频编码及推流配置,只读
 */
@property (nonatomic, copy, readonly) PLVideoCaptureConfiguration  *videoCaptureConfiguration;

/**
 *  音频编码及推流配置,只读
 */
@property (nonatomic, copy, readonly) PLAudioCaptureConfiguration  *audioCaptureConfiguration;

/**
 *  视频编码及推流配置,只读
 */
@property (nonatomic, copy, readonly) PLVideoStreamingConfiguration  *videoStreamingConfiguration;

/**
 *  音频编码及推流配置,只读
 */
@property (nonatomic, copy, readonly) PLAudioStreamingConfiguration  *audioStreamingConfiguration;

/**
 *  摄像头的预览视图
 */
@property (nonatomic, strong, readonly) UIView *previewView;

/**
 *  中视频的填充方式,默认使用 PLVideoFillModePreserveAspectRatioAndFill
 */
@property(readwrite, nonatomic) PLVideoFillModeType fillMode;

#pragma mark -
#pragma mark - 与推流相关的接口

/**
 *  流的状态
 */
@property (nonatomic, assign, readonly) PLStreamState   streamState;


/**
 *  网络连接和接收数据超时,以秒作为单位。默认为 15s, 设定最小数值不得低于 3s,否则不变更。
 */
@property (nonatomic, assign) int   receiveTimeout;

/**
 *  网络发送数据超时。reload
 */
@property (nonatomic, assign) int   sendTimeout;

/**
 *  开启动态帧率功能,自动调整的最大帧率不超过 videoStreamingConfiguration.expectedSourceVideoFrameRate。该功能默认为关闭状态。
 */
@property (nonatomic,assign) BOOL dynamicFrameEnable;

/**
 *  开启自适应码率调节功能
 */
- (void)enableAdaptiveBitrateControlWithMinVideoBitRate:(NSUInteger)minVideoBitRate;

/**
 *  关闭自适应码率调节功能,默认即为关闭状态
 */
- (void)disableAdaptiveBitrateControl;

/**
 *  开始推流(视讯云)
 */
- (void)startStreamingWithFeedback:(void (^)(PLStreamStartStateFeedback feedback))handler failure:(void (^)(NSDictionary *errorDic))failureBlock;

/**
 *  普通开始推流
 */
- (void)startStreamingWithPushURL:(NSURL *)pushURL feedback:(void (^)(PLStreamStartStateFeedback feedback))handler;

/**
 * 结束推流
 */
- (void)stopStreaming;

/**
 *  重新加载视频推流配置
 */
- (void)reloadVideoStreamingConfiguration:(PLVideoStreamingConfiguration *)videoStreamingConfiguration;

#pragma mark -
#pragma mark - 与摄像头相关的接口

/**
 *  摄像头配置(默认 AVCaptureDevicePositionBack)
 */
@property (nonatomic, assign) AVCaptureDevicePosition   captureDevicePosition;

/**
 *  摄像头朝向(默认 AVCaptureVideoOrientationPortrait)
 */
@property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;

/**
 *  闪光灯设置(默认 NO)
 */
@property (nonatomic, assign) BOOL    torchOn;

/**
 *  连续自动对焦(默认开启)
 */
@property (nonatomic, assign) BOOL  continuousAutofocusEnable;

/**
 *  手动点击屏幕进行对焦(默认开启)
 */
@property (nonatomic, assign) BOOL touchToFocusEnable;

/**
 *  该属性适用于视频拍摄过程中用来减缓因自动对焦产生的镜头伸缩,使画面不因快速的对焦而产生抖动感。(默认开启)
 */
@property (nonatomic, assign) BOOL  smoothAutoFocusEnabled;

/// 默认为 1.0,设置的数值需要小于等于 videoActiveForat.videoMaxZoomFactor,如果大于会设置失败。
@property (nonatomic, assign) CGFloat videoZoomFactor;

@property (nonatomic, strong, readonly) NSArray<AVCaptureDeviceFormat *> *videoFormats;

@property (nonatomic, strong) AVCaptureDeviceFormat *cnVideoActiveFormat;

/**
 *  采集的视频的 sessionPreset,默认为 AVCaptureSessionPreset640x480
 */
@property (nonatomic, copy) NSString *sessionPreset;

/**
 *  采集的视频数据的帧率,默认为 30
 */
@property (nonatomic, assign) NSUInteger videoFrameRate;

/**
 *  前置预览是否开启镜像,默认为 YES
 */
@property (nonatomic, assign) BOOL previewMirrorFrontFacing;

/**
 *  后置预览是否开启镜像,默认为 NO
 */
@property (nonatomic, assign) BOOL previewMirrorRearFacing;

/**
 *  前置摄像头,推的流是否开启镜像,默认 NO
 */
@property (nonatomic, assign) BOOL streamMirrorFrontFacing;

/**
 *  后置摄像头,推的流是否开启镜像,默认 NO
 */
@property (nonatomic, assign) BOOL streamMirrorRearFacing;

/**
 *  切换前后摄像头
 */
- (void)toggleCamera;

/**
 *  销毁推流核心类
 */
- (void)destroy;

#pragma mark -
#pragma mark - 与麦克风相关接口

/**
 *  耳返(默认NO 关闭)
 */
@property (nonatomic, assign) BOOL   playback;

/**
 *  静音(默认NO 关闭)
 */
@property (nonatomic, assign)   BOOL    muted;

/**
 *  麦克风采集的音量,设置范围为 0~1,各种机型默认值不同。
 *  @warning iPhone 6s 系列不支持调节麦克风采集的音量。
 */
@property (nonatomic, assign) float inputGain;

/**
 *  音效,所有生效音效的一个数组。
 */
@property (nonatomic, strong) NSArray<PLAudioEffectConfiguration *> *audioEffectConfigurations;

/**
 *  绑定一个音频文件播放器。该播放器播放出的声音将和麦克风声音混和,并推流出去。
 *  @param audioFilePath 音频文件路径
 */
- (PLAudioPlayer *)audioPlayerWithFilePath:(NSString *)audioFilePath;

/**
 *  关闭当前的音频文件播放器
 */
- (void)closeCurrentAudio;

#pragma mark -
#pragma mark - 美颜
/**
 *  是否开启美颜
 */
-(void)setBeautifyModeOn:(BOOL)beautifyModeOn;

/**
 *  设置对应 Beauty 的程度参数.
 *  @param beautify 范围从 0 ~ 1,0 为不美颜
 */
-(void)setBeautify:(CGFloat)beautify;

/**
 *  设置美白程度(注意:如果美颜不开启,设置美白程度参数无效)
 *  @param whiten 范围是从 0 ~ 1,0 为不美白
 */
-(void)setWhiten:(CGFloat)whiten;

/**
 *  设置红润的程度参数.(注意:如果美颜不开启,设置美白程度参数无效)
 *  @param redden 范围是从 0 ~ 1,0 为不红润
 */
-(void)setRedden:(CGFloat)redden;

#pragma mark -
#pragma mark - 水印
/**
 *  开启水印
 *  @param wateMarkImage 水印的图片
 *  @param position       水印的位置
 */
-(void)setWaterMarkWithImage:(UIImage *)wateMarkImage position:(CGPoint)position;

/**
 *  移除水印
 */
-(void)clearWaterMark;

@end