[iOS]手把手教你实现微信小视频

前段时间项目要求需要在聊天模块中加入类似微信的小视频功能,这边博客主要是为了总结遇到的问题和解决方法,希望能够对有同样需求的朋友有所帮助。

效果预览:

[iOS]手把手教你实现微信小视频

这里先罗列遇到的主要问题:

  1. 视频剪裁 微信的小视频只是取了摄像头获取的一部分画面
  2. 滚动预览的卡顿问题 AVPlayer播放视频在滚动中会出现很卡的问题

接下来让我们一步步来实现。

Part 1 实现视频录制

1.录制类WKMovieRecorder实现

创建一个录制类WKMovieRecorder,负责视频录制。

@interface WKMovieRecorder : NSObject + (WKMovieRecorder*) sharedRecorder;

- (instancetype)initWithMaxDuration:(NSTimeInterval)duration;

@end

定义回调block

/** * 录制结束 * * @param info 回调信息 * @param isCancle YES:取消 NO:正常结束 */ typedef void(^FinishRecordingBlock)(NSDictionary *info, WKRecorderFinishedReason finishReason); /** * 焦点改变 */ typedef void(^FocusAreaDidChanged); /** * 权限验证 * * @param success 是否成功 */ typedef void(^AuthorizationResult)(BOOL success); @interface WKMovieRecorder : NSObject //回调 @property (nonatomic, copy) FinishRecordingBlock finishBlock;//录制结束回调 @property (nonatomic, copy) FocusAreaDidChanged focusAreaDidChangedBlock; @property (nonatomic, copy) AuthorizationResult authorizationResultBlock; @end

定义一个cropSize用于视频裁剪

@property (nonatomic, assign) CGSize cropSize;

接下来就是capture的实现了,这里代码有点长,懒得看的可以直接看后面的视频剪裁部分

录制配置:

@interface WKMovieRecorder < AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate, WKMovieWriterDelegate > { AVCaptureSession* _session; AVCaptureVideoPreviewLayer* _preview; WKMovieWriter* _writer; //暂停录制 BOOL _isCapturing; BOOL _isPaused; BOOL _discont; int _currentFile; CMTime _timeOffset; CMTime _lastVideo; CMTime _lastAudio; NSTimeInterval _maxDuration; } // Session management. @property (nonatomic, strong) dispatch_queue_t sessionQueue; @property (nonatomic, strong) dispatch_queue_t videoDataOutputQueue; @property (nonatomic, strong) AVCaptureSession *session; @property (nonatomic, strong) AVCaptureDevice *captureDevice; @property (nonatomic, strong) AVCaptureDeviceInput *videoDeviceInput; @proper
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值