SLAvCaptureTool.h 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // SLAvCaptureTool.h
  3. // DarkMode
  4. //
  5. // Created by wsl on 2019/9/20.
  6. // Copyright © 2019 wsl. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. #import <AVFoundation/AVFoundation.h>
  11. ///音视频捕获类型
  12. typedef NS_ENUM(NSUInteger, SLAvCaptureType) {
  13. /// 音视频 默认
  14. SLAvCaptureTypeAv = 0,
  15. /// 纯视频 无音频
  16. SLAvCaptureTypeVideo,
  17. /// 音频
  18. SLAvCaptureTypeAudio
  19. };
  20. @class SLAvCaptureTool;
  21. /// 捕获工具输出代理
  22. @protocol SLAvCaptureToolDelegate <NSObject>
  23. @optional
  24. /// 完成拍照 ,返回image
  25. /// @param image 输出的图片
  26. /// @param error 错误信息
  27. - (void)captureTool:(SLAvCaptureTool *_Nonnull)captureTool didOutputPhoto:(UIImage *_Nullable)image error:(nullable NSError *)error;
  28. /// 完成音视频录制,返回临时文件地址
  29. /// @param outputFileURL 文件地址
  30. /// @param error 错误信息
  31. - (void)captureTool:(SLAvCaptureTool *_Nonnull)captureTool didFinishRecordingToOutputFileAtURL:(NSURL *_Nullable)outputFileURL error:(nullable NSError *)error;
  32. /// 实时输出采集的音视频样本 提供对外接口 方便自定义处理
  33. /// @param captureTool captureTool
  34. /// @param sampleBuffer 样本缓冲
  35. /// @param connection 输入和输出之前的连接
  36. - (void)captureTool:(SLAvCaptureTool *_Nonnull)captureTool didOutputVideoSampleBuffer:(CMSampleBufferRef _Nonnull )sampleBuffer fromConnection:(AVCaptureConnection *_Nonnull)connection;
  37. - (void)captureTool:(SLAvCaptureTool *_Nonnull)captureTool didOutputAudioSampleBuffer:(CMSampleBufferRef _Nonnull )sampleBuffer fromConnection:(AVCaptureConnection *_Nonnull)connection;
  38. @end
  39. NS_ASSUME_NONNULL_BEGIN
  40. // SLAvCaptureTool ----- 拆分为了 SLAvCaptureSession(采集) + SLAvWriterInput(录制) 两个工具类,方便扩展,实现的方式也略有不同
  41. ///音视频 采集 录制工具 配置都是默认的
  42. @interface SLAvCaptureTool : NSObject
  43. /// 摄像头采集内容预览视图
  44. @property (nonatomic, strong, nullable) UIView *preview;
  45. /// 导出的视频宽高 默认设备宽高 已home键朝下为准
  46. @property (nonatomic, assign) CGSize videoSize;
  47. /// 摄像头是否正在运行
  48. @property (nonatomic, assign, readonly) BOOL isRunning;
  49. /// 摄像头方向 默认后置摄像头
  50. @property (nonatomic, assign, readonly) AVCaptureDevicePosition devicePosition;
  51. /// 闪光灯状态 默认是关闭的,即黑暗情况下拍照不打开闪光灯 (打开/关闭/自动)
  52. @property (nonatomic, assign) AVCaptureFlashMode flashMode;
  53. /// 当前焦距 默认最小值1 最大值6
  54. @property (nonatomic, assign) CGFloat videoZoomFactor;
  55. /// 捕获工具输出代理
  56. @property (nonatomic, weak) id<SLAvCaptureToolDelegate> delegate;
  57. ///启动捕获
  58. - (void)startRunning;
  59. ///结束捕获
  60. - (void)stopRunning;
  61. /// 聚焦点 默认是连续聚焦模式 范围是在previewLayer上
  62. - (void)focusAtPoint:(CGPoint)focalPoint;
  63. /// 切换前/后置摄像头
  64. - (void)switchsCamera:(AVCaptureDevicePosition)devicePosition;
  65. /// 输出图片 拍照
  66. - (void)outputPhoto;
  67. /// 开始录制视频 默认输出MP4
  68. /// @param path 录制的音视频输出路径
  69. /// @param avRecordType 录制视频类型
  70. - (void)startRecordVideoToOutputFileAtPath:(NSString *)path recordType:(SLAvCaptureType)avRecordType;
  71. /// 结束录制视频
  72. - (void)stopRecordVideo;
  73. /// 开始录制音频 默认输出MP3
  74. /// @param path 录制的音频输出路径
  75. - (void)startRecordAudioToOutputFileAtPath:(NSString *)path;
  76. /// 结束录制音频
  77. - (void)stopRecordAudio;
  78. @end
  79. NS_ASSUME_NONNULL_END