PLCameraStreamingSession 推流那些事(二)

 上一章写了开始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;


2.PLStreamingSendingBufferDelegate 

/// @abstract 发送队列从有数据变成无数据的时候,会触发调用

- (void)streamingSessionSendingBufferDidEmpty:(id)session;

/// @abstract 发送队列缓存已满的时候,会触发调用

- (void)streamingSessionSendingBufferDidFull:(id)session;


3.推流方法

//开始推流,当调用过一次并且开始推流时,如果再调用该方法会直接返回不会做任何操作,尽管如此,也不要在没有断开时重复调用该方法

- (void)startWithCompleted:(void (^)(BOOL success))handler;

//结束推流

- (void)stop;

//销毁session方法

- (void)destroy;

//更新previewView的大小,该方法不会改变编码视频的大小,只会改变当前设备摄像头预览视图的大小

- (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;


其余方法不一一说明,前进的道路需要我们慢慢摸索……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值