AVExportSession with a streaming AVAsset -11800 Error



我一直在使用AVPlayer播放视频,其中底层资产由流媒体URL支持。

我正在尝试创建视频的一个片段(只是一个9秒的剪辑),以便在本地保存剪辑。

我尝试AVAssetExportSession与以下代码,但会话返回AVAssetExportSessionStatusFailed每次。具体错误为error Domain=AVFoundationErrorDomain Code=-11800,即未知错误。

AVURLAsset *otherAsset = [[AVURLAsset alloc] initWithURL:streamURL options:options];
NSArray *exportPresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:otherAsset];
NSLog(exportPresets.description);
AVAssetExportSession *session = [AVAssetExportSession exportSessionWithAsset:otherAsset presetName:AVAssetExportPresetMediumQuality];
NSArray *supportedFileTypes = session.supportedFileTypes;
NSLog(supportedFileTypes.description);

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0];
NSString *dstPath = [documentsDirectory stringByAppendingString:@"/sample.mov"];
NSURL *savetUrl = [NSURL fileURLWithPath:dstPath];
session.outputFileType = @"com.apple.quicktime-movie";
session.outputURL = savetUrl;
session.shouldOptimizeForNetworkUse = YES;
[session exportAsynchronouslyWithCompletionHandler:
 ^(void ) {

     switch ([session status]) {
         case AVAssetExportSessionStatusFailed:
             NSLog([session error].description);
             NSLog(@"Export failed: %@",[[session error]localizedDescription]);
             break;
         case AVAssetExportSessionStatusCancelled:
             NSLog(@"Export canceled");
             break;
         default:
             NSLog(@"Export Success, File Saved.");
             break;
     }
 }
 ];

我已经检查了,以确保我没有覆盖一个文件,并检查AVAssetExportSessionStatusFailed的其他原因。

我猜AVAssetExportSession不意味着与流媒体资产一起使用。(我可能错了)。

我猜对了吗,还是我还有别的事要做?是否有一种更简单的方法来剪切和缓存流URL?

谢谢你的时间!

据我所知,在iOS7下,除了本地文件,没有其他方法可以导出。

在iOS8下似乎可以正常工作。

我建议你只用NSData。writeToFile(filePath,自动:bool),如果你不需要设置一个exportInterval

希望这对你有帮助!

最新更新