2013-05-13 149 views
1

我遇到了UISaveVideoAtPathToSavedPhotosAlbum的問題。我正在運行一個社交媒體網站,允許用戶發佈視頻,其他用戶可以通過點擊按鈕將視頻保存到他們的照片相冊。這裏是我的代碼:然而UISaveVideoAtPathToSavedPhotosAlbum不兼容?需要壓縮?

if (buttonIndex == 0) 
{ 
    NSString *movieURL = self.postInfo.referenceText; 
    if (self.postInfo.type == SBPostTypeVideo) 
    { 
     if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(movieURL)){ 
     UISaveVideoAtPathToSavedPhotosAlbum(movieURL, nil, nil, nil); 
     } 
    } 
} 

此代碼失敗,與下面的輸出:

Video http://VIDEOURL.COM/14.mov cannot be saved to the saved photos album: Error Domain=NSOSStatusErrorDomain Code=2 "This movie could not be played." UserInfo=0x9c2a400 {NSLocalizedDescription=This movie could not be played.} 

該鏈接到視頻的正確路徑。我相信這個問題可能是因爲它試圖將原始視頻URL保存到相機,雖然我不積極,但它的文件太大。任何幫助要麼壓縮下載或其他任何事情來獲得這個工作將非常感激。非常感謝!

+1

鏈接是文件URL還是網址? – Wain 2013-05-13 14:18:29

+0

用戶將視頻上傳到我們的服務器,因此它是通過網絡上傳的.mov視頻文件的URL。 – user2287517 2013-05-13 22:41:45

回答

1

UISaveVideoAtPathToSavedPhotosAlbum只能將文件保存到庫中。如果要從網絡保存視頻,則需要下載視頻文件,將其保存到磁盤,將該文件的文件URL存儲在磁盤上,然後使用文件URL進行保存。

UIVideoAtPathIsCompatibleWithSavedPhotosAlbum檢查視頻文件的有效性,基本上通過檢查它可以播放視頻文件。再次,這是通過文件URL。我不認爲除了可用磁盤空間外,還有其他大小限制。

+0

明白了,謝謝。 – user2287517 2013-05-14 01:15:56

0

就我而言,它是在使用從網上下載的其他視頻製作視頻後發生的。雖然在iPhone5上測試都很好,但在iPhone4上它從未奏效,直到我意識到我製作的視頻具有比iPhone4播放器更高的分辨率,因此它拒絕將最終視頻記錄到相機膠捲。

因此,如果您想要將下載的視頻直接保存到相機膠捲,則可能需要檢查分辨率是否適合設備支持的分辨率。正如我使用AVAssetExportSession的出路是設置生成視頻的質量如下:

self.exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetMediumQuality]; 
self.exportSession.outputURL = [NSURL fileURLWithPath:path]; 
self.exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
[self.exportSession exportAsynchronouslyWithCompletionHandler:^{ 

    switch (self.exportSession.status) 
    { 
     case AVAssetExportSessionStatusCompleted: 
      NSLog(@"Export OK"); 
      if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path)) { 
       UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil); 
      } 
      break; 
     case AVAssetExportSessionStatusFailed: 
      NSLog (@"AVAssetExportSessionStatusFailed: %@", self.exportSession.error); 
      break; 
     case AVAssetExportSessionStatusCancelled: 
      NSLog(@"Export Cancelled"); 
      break; 
    } 
}]; 

希望它有幫助! ;)