2

ビデオをオンラインでトリミングするために AVAssetExportSession を実装していますが、常に失敗します。

これが私の実装です:

NSString *url = @"http://www.ebookfrenzy.com/ios_book/movie/movie.mov";
NSURL *fileURL = [NSURL URLWithString:url];
AVAsset *asset = [AVAsset assetWithURL:fileURL];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
NSURL *exportUrl = [NSURL fileURLWithPath:[documentsDirectory stringByAppendingPathComponent:@"export.m4a"]];

exportSession.outputURL = exportUrl;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
CMTime time = CMTimeMake(1, 10);
exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, time);
[exportSession exportAsynchronouslyWithCompletionHandler:^(void) {

    switch (exportSession.status)
    {
        case AVAssetExportSessionStatusCompleted:
            /*expor is completed*/
            NSLog(@"Completed!!");
            break;
            case AVAssetExportSessionStatusFailed:
            NSLog(@"failed!!");
            /*failed*/
            break;
        default:
            break;
    }
}];

なぜこれが起こっているのか、または私が間違っていることを知っている人はいますか?

4

2 に答える 2

2

リモート URLを使用して を作成しようとしてAVAssetおり、エクスポートを開始する前にアセットがロードされていることを確認する必要があります。

AVAssetプロトコルに準拠しているAVAsynchronousKeyValueLoadingため、キーを観察してtracks、値が変更されたらエクスポートを開始できます。

NSURL *myURL = [NSURL URLWithString:myMovieURLString];
AVAsset *asset = [AVAsset assetWithURL:myURL];

__weak typeof(self) weakSelf = self;

[asset loadValuesAsynchronouslyForKeys:@[@"tracks"] completionHandler:^{

    //Error checking here - make sure there are tracks

    [weakSelf exportAsset:asset];

}];

次に、別の方法でエクスポート コードを使用できます。

- (void)exportAsset:(AVAsset *)asset {

    //Your export code here
}
于 2015-10-06T20:40:28.727 に答える
0

documentsDirectory は is exiting path である必要があります。そうでない場合、 exportSession.status は AVAssetExportSessionStatusFailed と等しくなります

于 2016-06-28T08:48:33.773 に答える