我一直在使用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
希望这对你有帮助!