41

ビデオファイルを iPad アプリに としてロードしようとしてAVURLAssetいます。非同期ロードのものを使用して、準備が整うのを待ちます。問題は、実行すると、どうすればよいかわからない完全に一般的な「失敗」エラーメッセージが表示されることです。ビデオは に渡せば動作しますがMPMoviePlayerControllerAVURLAssetそれとは関係がないことを拒否しているようです。

コード:

asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:[docPath stringByAppendingPathComponent:@"video.mov"]] options:nil];
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self composeIfReady];
    });
}];

...

- (void)composeIfReady
{
    NSError *error = nil;
    if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed)
        NSLog(@"error loading: %@", [error description]);
    if(error == nil)
        NSLog(@"okay awesome");
}

出力:

error loading: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation couldn’t be completed. (AVFoundationErrorDomain error -11800.)" UserInfo=0x1696f0 {NSUnderlyingError=0x169a40 "The operation couldn’t be completed. (OSStatus error -12936.)"}

ちなみに-11800は「不明なエラー」のエラーコードです。行き止まりのような。何か案は?アセットをロードする前に設定する必要があるものはありますか?

4

3 に答える 3

116

解決しました。トリック:fileURLWithPath:ではなくを使用しますURLWithString:。どうやら違いは本当に、本当に重要です。

于 2010-11-17T04:12:47.507 に答える
6

fileURLWithPath を使用した後でもこれに問題がある場合は、int(s) を使用している場合は、時間配列で NSTimeIntervals を要求してみてください。

これは動作しません:

    NSMutableArray *playbackTimes = [NSMutableArray array];
    for (int i = 0; i <= 10; i ++) {
        [playbackTimes addObject:@(i)];
    }

    [self.videoPlayer requestThumbnailImagesAtTimes:playbackTimes timeOption:MPMovieTimeOptionNearestKeyFrame];

これは機能します:

    NSMutableArray *playbackTimes = [NSMutableArray array];
    for (int i = 0; i <= 10; i ++) {
         [playbackTimes addObject:@((NSTimeInterval)i)];
     }

     [self.videoPlayer requestThumbnailImagesAtTimes:playbackTimes timeOption:MPMovieTimeOptionNearestKeyFrame];
于 2013-10-15T15:42:11.677 に答える
6

を使用-[NSURL fileURLWithPath:]して URL を作成しても同じエラーが発生する場合。

を確認してください。AVURLAssetReferenceRestrictionsKeyローカルの m3u8 にリモート リソースが含まれている場合、再生に失敗する可能性があります。

値を に設定@(AVAssetReferenceRestrictionForbidNone)すると、問題が解決します。

于 2014-05-17T15:32:02.103 に答える