前言
對(duì)于社交類APP,只要允許用戶上傳視頻,為了避免占用服務(wù)器資源以及減少用戶上傳時(shí)間,肯定少不了長(zhǎng)視頻裁剪的功能。
效果預(yù)覽

image
分析
頁(yè)面結(jié)構(gòu)
- 基于
AVPlayer封裝的播放器 - collectionView進(jìn)行縮略圖展示
- 選擇框進(jìn)行拖拽裁剪
- 底部?jī)蓚€(gè)操作按鈕
功能實(shí)現(xiàn)
- 從相冊(cè)中選取視頻后,獲得視頻的URL
- 通過URL獲取視頻的總長(zhǎng)
- 指定選中框的初始開始時(shí)間、結(jié)束時(shí)間
- 使用
AVAssetImageGenerator獲取縮略圖 - 為左、右兩個(gè)邊框添加
panGesture - 在
panGesture響應(yīng)的方法中,判斷gesture.state - 在
UIGestureRecognizerStateBegan中找到當(dāng)前拖動(dòng)的視圖 - 在
UIGestureRecognizerStateChanged中處理裁剪時(shí)間 - 在
UIGestureRecognizerStateEnded中處理結(jié)束拖動(dòng)后播放器進(jìn)度 - 在
scrollViewDidScroll也要處理選中的時(shí)間范圍 - 范圍選擇完成后,使用
AVAssetExportSession對(duì)視頻進(jìn)行裁剪 - 最后一步,將視頻寫入相冊(cè)保存
難點(diǎn)
- 拖動(dòng)進(jìn)度和時(shí)間上的轉(zhuǎn)換,具體可以參考GPVideoClipper源碼。
最后
- 如果您使用的還不錯(cuò),不要吝嗇給個(gè)start.