PLCameraStreamingSession 整理
2016-07-07 16:23
363 查看
该文章主要整理了PLCameraStreamingSession里面的方法和属性,推流等操作的方法都是由PLCameraStreamingSession的对象调用
一、首先说明下实现简单的功能的步骤。
开启摄像头和麦克风的权限
配置采集端的信息,如码率,分辨率,摄像头的方向等
即:初始化 PLVideoCaptureConfiguration 和 PLAudioCaptureConfiguration
配置推流端的信息,播放时的效果
即:初始化 PLVideoStreamingConfiguration 和 PLAudioStreamingConfiguration
从服务器获取流的信息 PLStream
初始化 PLCameraStreamingSession 对象 (别忘了设置代理)
设置预览视图 preview
添加水印 或者 滤镜 (可选)
进行推流等操作
二、主要步骤的方法介绍
配置信息
//视频采集端 (PLVideoCaptureConfiguration)
//音频采集端 (PLAudioCaptureConfiguration)
//视频推流端 (PLVideoStreamingConfiguration)
//音频推流端 (PLAudioStreamingConfiguration)
//从服务端获取流的信息(字典类型)
//初始化 PLCameraStreamingSession
2.代理方法
一共使用了2个代理,分别是 PLCameraStreamingSessionDelegate ,根据流的不同状态调用方法。PLStreamingSendingBufferDelegate 根据buffer 的状态进行方法调用
三、属性的介绍
属性建议仔细看下PLCameraStreamingSession.h和一些配置信息的类,如PLAudioStreamingConfiguration,PLVideoCaptureConfiguration等,属性现在主要介绍下常用的几个。
1. streamState 流的状态,只读
2. previewView 预览视图
3. torchOn 手电筒
4. videoZoomFactor 缩放 默认为 1.0,设置的数值需要小于等于 videoActiveForat.videoMaxZoomFactor,如果大于会设置失败
一、首先说明下实现简单的功能的步骤。
开启摄像头和麦克风的权限
配置采集端的信息,如码率,分辨率,摄像头的方向等
即:初始化 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,如果大于会设置失败
相关文章推荐
- iOS音频AAC视频H264编码 推流最佳方案
- ffmpeg工具使用
- Android 滤镜推流
- 使用ffmpeg推流到Wowza
- 利用mediacode做音视频推流
- Android 音视频深入 十五 FFmpeg 推流mp4文件(附源码下载)
- 写代码实现直播推流
- 快速集成iOS基于RTMP的视频推流
- java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
- javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)
- javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
- 树莓派使用python-librtmp实现rtmp推流h264
- OBS 推流失败后录制功能不可使用的问题
- Past duration 0.666664 too large
- ffmpeg推流代码样例
- 1小时学会:最简单的iOS直播推流(五)yuv、pcm数据的介绍和获取
- 写代码实现直播推流
- GB28181技术基础之7 - 目录获取与推流
- 音视频推流架构
- librtmp在windows下连接时出现10093错误