上一章写了开始PLCameraStreamingSession推流之前的准备,下面来看一下PLCameraStreamingSession里面的方法和属性。
1.推流的操作方法都是由PLCameraStreamingSession的对象来调用。
2.具体实现简单功能的步骤。
(1)开启摄像头和麦克风的权限
(2)配置采集端的信息,例如分辨率和摄像头的方向等
即:初始化 PLVideoCaptureConfiguration 和 PLAudioCaptureConfiguration;
(3)配置推流端信息,播放时的效果
即:初始化PLVideoStreamingConfiguration 和 PLAudioStreamingConfiguration
(4)从服务器获取流的信息PLStream
(5)初始化PLCameraStreamingSession对象,重要的是设置两个代理
PLCameraStreamingSession
是核心类,只需要关注并使用这个类就可以完成通过摄像头推流、预览的工作
(6)设置预览视图previewView
(7)添加水印或滤镜(可选可不选,看需求)
(8)进行推流等操作
3.推流的主要操作方法
(1)从服务端获取流信息--字典类型
+ (instancetype)streamWithJSON:(NSDictionary *)son;
(2) 指定自定义分辨率和推流质量生成一个配置
+ (instancetype)configurationWithUserDefineDimension:(CGSize)videoSize
videoQuality:(NSString *)quality;
(3)指定可选分辨率和推流质量生成一个配置
+ (instancetype)configurationWithAudioQuality:(NSString *)quality;
(4)PLCameraStreamingSession的初始化方法
/*!
* 初始化方法
*
* @param videoConfiguration 视频编码及推流的配置信息
*
* @param audioConfiguration 音频编码及推流的配置信息
*
* @param stream Stream 对象
*
* @param videoOrientation 视频方向
*
* @return PLCameraStreamingSession 实例
*
* @discussion 初始化方法会优先使用后置摄像头,如果发现设备没有后置摄像头,会判断是否有前置摄像头,如果都没有,便会返回 nil。
*/
- (instancetype)initWithVideoConfiguration:(PLVideoStreamingConfiguration *)videoConfiguration
audioConfiguration:(PLAudioStreamingConfiguration *)audioConfiguration
stream:(PLStream *)stream
videoOrientation:(AVCaptureVideoOrientation)videoOrientation;
(5)代理方法 一共使用了2个代理,分别是 PLCameraStreamingSessionDelegate ,根据流的不同状态调用方法。PLStreamingSendingBufferDelegate 根据buffer 的状态进行方法调用
1.PLCameraStreamingSessionDelegate
/// @abstract 流状态已变更的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session streamStateDidChange:(PLStreamState)state;
/// @abstract 因产生了某个 error 而断开时的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session didDisconnectWithError:(NSError *)error;
/// @abstract 摄像头授权状态发生变化的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session didGetCameraAuthorizationStatus:(PLAuthorizationStatus)status;
/// @abstract 麦克风授权状态发生变化的回调
- (void)cameraStreamingSession:(PLCameraStreamingSession *)session didGetMicrophoneAuthorizationStatus:(PLAuthorizationStatus)status;
/// @abstract 获取到摄像头原数据时的回调, 便于开发者做滤镜等处理
- (CMSampleBufferRef)cameraStreamingSession:(PLCameraStreamingSession *)session cameraSourceDidGetSampleBuffer:(CMSampleBufferRef)sampleBuffer;
/// @abstract 发送队列从有数据变成无数据的时候,会触发调用
- (void)streamingSessionSendingBufferDidEmpty:(id)session;
/// @abstract 发送队列缓存已满的时候,会触发调用
- (void)streamingSessionSendingBufferDidFull:(id)session;
//开始推流,当调用过一次并且开始推流时,如果再调用该方法会直接返回不会做任何操作,尽管如此,也不要在没有断开时重复调用该方法
- (void)startWithCompleted:(void (^)(BOOL success))handler;
- (void)stop;
- (void)destroy;
- (void)updatePreviewViewSize:(CGSize)size;
//开启摄像头,一般不调用但当你的 App 中需要同时使用到 AVCaptureSession 时,在调用过 - (void)stopCaptureSession 方法后,如果要重新启用推流的摄像头,可以调用这个方法
- (void)startCaptureSession;
//关闭摄像头,一般不需要调用,但当你的 App 中需要同时使用到 AVCaptureSession 时,当你需要暂且切换到你自己定制的摄像头做别的操作时,你需要调用这个方法来暂停当前 streaming session 对 captureSession 的占用。当需要恢复时,调用 - (void)startCaptureSession 方法
- (void)stopCaptureSession;
// 获取视频截图的方法
- (void)requestCaptureImageWithComplete:(void (^)(UIImage *))block;
// 切换摄像头- (void)toggleCamera;