您的位置:首页 > 其它

PLCameraStreamingSession 整理

2016-07-07 16:23 363 查看
该文章主要整理了PLCameraStreamingSession里面的方法和属性,推流等操作的方法都是由PLCameraStreamingSession的对象调用

一、首先说明下实现简单的功能的步骤。

开启摄像头和麦克风的权限

配置采集端的信息,如码率,分辨率,摄像头的方向等

即:初始化 PLVideoCaptureConfiguration 和 PLAudioCaptureConfiguration

配置推流端的信息,播放时的效果

即:初始化 PLVideoStreamingConfiguration 和 PLAudioStreamingConfiguration

从服务器获取流的信息 PLStream

初始化 PLCameraStreamingSession 对象 (别忘了设置代理)

设置预览视图 preview

添加水印 或者 滤镜 (可选)

进行推流等操作

二、主要步骤的方法介绍

配置信息

//视频采集端 (PLVideoCaptureConfiguration)

- (instancetype)initWithVideoFrameRate:(NSUInteger)videoFrameRate sessionPreset:(NSString *)sessionPreset horizontallyMirrorFrontFacingCamera:(BOOL)horizontallyMirrorFrontFacingCamera horizontallyMirrorRearFacingCamera:(BOOL)horizontallyMirrorRearFacingCamera cameraPosition:(AVCaptureDevicePosition)position;


//音频采集端 (PLAudioCaptureConfiguration)

+ (instancetype)defaultConfiguration;


//视频推流端 (PLVideoStreamingConfiguration)

//自定义
+ (instancetype)configurationWithVideoSize:(CGSize)videoSize
videoQuality:(NSString *)quality;

//默认 分辨率 (320, 480), video quality PLStreamingQualityMedium1
+ (instancetype)defaultConfiguration;


//音频推流端 (PLAudioStreamingConfiguration)

//自定义
+ (instancetype)configurationWithAudioQuality:(NSString *)quality;

- (instancetype)initWithAudioQuality:(NSString *)quality;

- (instancetype)initWithEncodedAudioSampleRate:(NSUInteger)sampleRate encodedNumberOfChannels:(UInt32)numberOfChannels audioBitRate:(PLStreamingAudioBitRate)audioBitRate;

//默认 kPLAudioStreamingQualityHigh2
+ (instancetype)defaultConfiguration;


//从服务端获取流的信息(字典类型)

+ (instancetype)streamWithJSON:(NSDictionary *)json;
- (instancetype)initWithJSON:(NSDictionary *)json;


//初始化 PLCameraStreamingSession

- (instancetype)initWithVideoCaptureConfiguration:(PLVideoCaptureConfiguration *)videoCaptureConfiguration
audioCaptureConfiguration:(PLAudioCaptureConfiguration *)audioCaptureConfiguration videoStreamingConfiguration:(PLVideoStreamingConfiguration *)videoStreamingConfiguration
audioStreamingConfiguration:(PLAudioStreamingConfiguration *)audioStreamingConfiguration stream:(PLStream *)stream
videoOrientation:(AVCaptureVideoOrientation)videoOrientation;


2.代理方法

一共使用了2个代理,分别是 PLCameraStreamingSessionDelegate ,根据流的不同状态调用方法。PLStreamingSendingBufferDelegate 根据buffer 的状态进行方法调用

//2.1   PLCameraStreamingSessionDelegate

// 流状态已变更的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session streamStateDidChange:(PLStreamState)state;

// 因产生了某个 error 而断开时的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session didDisconnectWithError:(NSError *)error;

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

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

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

// 获取到摄像头原数据时的回调, 便于开发者做滤镜等处理
- (CVPixelBufferRef)cameraStreamingSession:(PLCameraStreamingSession *)session cameraSourceDidGetPixelBuffer:(CVPixelBufferRef)pixelBuffer;

//2.2  PLStreamingSendingBufferDelegate

//  当发送队列从有数据变为无数据时,会触发该队列为空的回调。
//  session 调用该代理方法的 session 对象
- (void)streamingSessionSendingBufferDidEmpty:(id)session;

//  当发送队列包满时,会触发该队列已满的回调。
//  session 调用该代理方法的 session 对象
- (void)streamingSessionSendingBufferDidFull:(id)session;

//2.3 推流方法介绍

//开始推流,当调用过一次并且开始推流时,如果再调用该方法会直接返回不会做任何操作,尽管如此,也不要在没有断开时重复调用该方法.当采用 dynamic 认证且过期时,需要更新 Stream 对象,否则推流将失败。
- (void)startWithCompleted:(void (^)(BOOL success))handler;

//重新加载视频推流配置,videoStreamingConfiguration 新的视频编码配置videoCaptureConfiguration   新的视频采集配置
- (void)reloadVideoStreamingConfiguration:(PLVideoStreamingConfiguration *)videoStreamingConfiguration videoCaptureConfiguration:(PLVideoCaptureConfiguration *)videoCaptureConfiguration;

//重新开始推流,当处于正在推流过程中时,由于业务原因(如用户网络从 3G/4G 切换到 WIFI)需要快速重新开始推流时,可以调用该方法;非推流过程中调用该方法会直接返回, 当采用 dynamic 认证且过期时,需要更新 Stream 对象,否则推流将失败。
- (void)restartWithCompleted:(void (^)(BOOL success))handler;

//结束推流
- (void)stop;

//销毁 session 的方法,销毁前不需要调用 stop 方法。
- (void)destroy;

//2.4 水印或滤镜等操作
// waterMark 水印图片  origin 水印坐标 如果传入的水印图片为 nil 或水印边界超过采集图像的大小则返回 nil, 否则返回创建成功的水印 filter 对应的 handler
- (PLFilterHandler)addWaterMark:(UIImage *)waterMark origin:(CGPoint)origin;

//滤镜 需要自己代码实现
- (PLFilterHandler)addGPUImageFilter:(GPUImageFilter *)filter;

//移除 handler 对应的 filter handler 需要移除的 filter handler
- (void)removeFilter:(PLFilterHandler)handler;

//2.5 其他的方法

// 开启摄像头 session 一般不需要调用,当 App 中需要同时使用到 AVCaptureSession 时,在调用过 - (void)stopCaptureSession 方法后,如果要重新启用推流的摄像头,可以调用这个方法

- (void)startCaptureSession;

// 停止摄像头 session 这个方法一般不需要调用,当 App 中需要同时使用到 AVCaptureSession 时,当你需要暂且切换到你自己定制的摄像头做别的操作时, 你需要调用这个方法来暂停当前 streaming session 对 captureSession 的占用。当需要恢复时,调用 -(void)startCaptureSession 方法。

- (void)stopCaptureSession;

// PLCameraStreamingSession(Authorization)与设备授权相关的接口
// Camera
+ (PLAuthorizationStatus)cameraAuthorizationStatus;
+ (void)requestCameraAccessWithCompletionHandler:(void (^)(BOOL granted))handler;

// Microphone
+ (PLAuthorizationStatus)microphoneAuthorizationStatus;
+ (void)requestMicrophoneAccessWithCompletionHandler:(void (^)(BOOL granted))handler;

//转换摄像头
- (void)toggleCamera;


三、属性的介绍

属性建议仔细看下PLCameraStreamingSession.h和一些配置信息的类,如PLAudioStreamingConfiguration,PLVideoCaptureConfiguration等,属性现在主要介绍下常用的几个。

1. streamState 流的状态,只读

2. previewView 预览视图

3. torchOn 手电筒

4. videoZoomFactor 缩放 默认为 1.0,设置的数值需要小于等于 videoActiveForat.videoMaxZoomFactor,如果大于会设置失败
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  推流