相冊(cè)選取資源時(shí)iCloud視頻資源下載問(wèn)題

背景:

最近在做一個(gè)視頻拼圖的工具浑厚,涉及到相冊(cè)資源的選取股耽。這個(gè)不是項(xiàng)目重點(diǎn),所以直接應(yīng)用了第三方相冊(cè)選擇器钳幅。使用了一個(gè)功能挺齊全的相冊(cè)選擇器TZImagePickerController豺谈。具體特性這里不做贅述,感興趣的可以前往查看贡这。
github地址:https://github.com/banchichen/TZImagePickerController
---------------------------華麗的分割線-----------------------
這里遇到的問(wèn)題是當(dāng)設(shè)備占用存儲(chǔ)過(guò)高時(shí)茬末,而用戶又打開(kāi)了相冊(cè)同步iCloud,這時(shí)系統(tǒng)會(huì)刪除資源只保留縮略圖盖矫。而我們需要調(diào)用這些資源時(shí)丽惭,就會(huì)先從iCloud上下載資源。由于網(wǎng)速或資源大小的問(wèn)題辈双,會(huì)等待較長(zhǎng)時(shí)間责掏。TZImagePickerController處理了iCloud圖片的加載過(guò)程并伴有進(jìn)度交互,但對(duì)于iCloud視頻同步?jīng)]有處理湃望。同步視頻時(shí)一片黑屏换衬。
這里我需要做的是增加iCloud視頻同步時(shí)進(jìn)度交互。

TZImagePickerController原本的流程

1证芭、在TZPhotoPickerController的- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath方法中點(diǎn)擊選取了視頻后瞳浦、跳轉(zhuǎn)到TZVideoPlayerController

TZVideoPlayerController *videoPlayerVc = [[TZVideoPlayerController alloc] init];
videoPlayerVc.model = model;
[self.navigationController pushViewController:videoPlayerVc animated:YES];

2、在TZVideoPlayerController界面調(diào)用
- (void)getVideoWithAsset:(PHAsset *)asset completion:(void (^)(AVPlayerItem *, NSDictionary *))completion;
獲取視頻資源废士,獲取到之后再顯示UI(視頻和按鈕等)叫潦,在這期間界面一片空白。

[[TZImageManager manager] getVideoWithAsset:_model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self->_player = [AVPlayer playerWithPlayerItem:playerItem];
            self->_playerLayer = [AVPlayerLayer playerLayerWithPlayer:self->_player];
            self->_playerLayer.frame = self.view.bounds;
            [self.view.layer addSublayer:self->_playerLayer];
            [self addProgressObserver];
            [self configPlayButton];
            [self configBottomToolBar];
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:AVPlayerItemDidPlayToEndTimeNotification object:self->_player.currentItem];
        });
}];

處理

這里先來(lái)做個(gè)簡(jiǎn)單的處理:在TZPhotoPickerController選擇了視頻時(shí)官硝,做一個(gè)預(yù)同步的處理矗蕊,并監(jiān)聽(tīng)同步進(jìn)度,界面彈出進(jìn)度提示氢架。完成后繼續(xù)原來(lái)的流程傻咖。這時(shí)候視頻已經(jīng)同步成功,這個(gè)時(shí)候在TZVideoPlayerController調(diào)用- (void)getVideoWithAsset:(PHAsset *)asset completion:(void (^)(AVPlayerItem *, NSDictionary *))completion獲取視頻資源可以直接獲取到岖研。預(yù)同步的代碼如下卿操。
在TZPhotoPickerController的- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath方法中

//預(yù)獲取
ProgressBarShowLoading([NSBundle tz_localizedStringForKey:@"Loading"]);
PHVideoRequestOptions * option = [[PHVideoRequestOptions alloc] init];
option.networkAccessAllowed = YES;
option.progressHandler = ^(double progress, NSError * _Nullable error, BOOL * _Nonnull stop, NSDictionary * _Nullable info) {
NSLog(@"下載進(jìn)度:%f",progress);
NSString * currentPrecentage = [NSString stringWithFormat:@"%.2f%%",progress*100];
ProgressBarUpdateLoading([NSBundle tz_localizedStringForKey:@"Download from iCloud"], currentPrecentage);
            };
[[PHImageManager defaultManager] requestAVAssetForVideo:model.asset options:option resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
      dispatch_async(dispatch_get_main_queue(), ^{
              ProgressBarDismissLoading(@"");
              TZVideoPlayerController *videoPlayerVc = [[TZVideoPlayerController alloc] init];
              videoPlayerVc.model = model;
              [self.navigationController pushViewController:videoPlayerVc animated:YES];
      });
}];

總結(jié)

因?yàn)槲疫@里用到的是單選,這只是一個(gè)簡(jiǎn)單的處理缎玫。后期可以改為選擇某個(gè)資源時(shí)在這個(gè)資源上顯示同步進(jìn)度硬纤,可以適配多選的情況解滓。
歡迎提出更好的解決方法赃磨。
這里再次感謝非常感謝@半遲塵提供的如此強(qiáng)大的工具TZImagePickerController

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洼裤,隨后出現(xiàn)的幾起案子邻辉,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件值骇,死亡現(xiàn)場(chǎng)離奇詭異莹菱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吱瘩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)道伟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人使碾,你說(shuō)我怎么就攤上這事蜜徽。” “怎么了票摇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拘鞋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我矢门,道長(zhǎng)盆色,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任祟剔,我火速辦了婚禮隔躲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘物延。我一直安慰自己蹭越,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布教届。 她就那樣靜靜地躺著响鹃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪案训。 梳的紋絲不亂的頭發(fā)上买置,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音强霎,去河邊找鬼忿项。 笑死,一個(gè)胖子當(dāng)著我的面吹牛城舞,可吹牛的內(nèi)容都是我干的轩触。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼家夺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脱柱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拉馋,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤榨为,失蹤者是張志新(化名)和其女友劉穎惨好,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體随闺,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡日川,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矩乐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龄句。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖散罕,靈堂內(nèi)的尸體忽然破棺而出撒璧,到底是詐尸還是另有隱情,我是刑警寧澤笨使,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布卿樱,位于F島的核電站,受9級(jí)特大地震影響硫椰,放射性物質(zhì)發(fā)生泄漏繁调。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一靶草、第九天 我趴在偏房一處隱蔽的房頂上張望蹄胰。 院中可真熱鬧,春花似錦奕翔、人聲如沸裕寨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驾窟。三九已至庆猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間月培,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工恩急, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衷恭。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像匾荆,于是被迫代替她去往敵國(guó)和親拌蜘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牙丽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354