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

本文详细介绍了在iOS应用中实现类似微信小视频功能的过程,包括视频录制、剪裁、存储,以及解决滚动预览卡顿问题的方法。在录制部分,讲解了WKMovieRecorder的实现,包括初始化设置、session配置等。针对预览卡顿,提出了通过生成gif图和视频转UIImages来改善流畅性的策略,并针对内存问题提供了优化措施。
摘要由CSDN通过智能技术生成

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

效果预览:

[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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值