AVURLAsset loadValuesAsynchronouslyForKeys:completionHandler:从不在设备上触发

时间:2011-09-02 13:01:09

标签: objective-c avfoundation avurlasset avassetexportsession

我正在使用下一个代码片段同步加载值,因此loading = NO永远不会触发。 我对AVAssetExportSession exportAsynchronously有同样的问题。 这一切都不适用于设备。

NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:URL options:options];

NSArray *keys = [NSArray arrayWithObjects:@"duration", @"tracks", nil];

__block bool loading = YES;

[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^(void) {
            loading = NO;
}];

while (loading)[[NSRunLoop currentRunLoop] runUntilDate:[[NSDate date] dateByAddingTimeInterval:0.5]];

请帮忙!我的大脑正在融化。

1 个答案:

答案 0 :(得分:-1)

以下是我使用的代码:

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"intro" ofType:@"m4v"]];

    self.asset = [[AVURLAsset alloc] initWithURL:url options:nil];
    NSString *tracksKey = @"tracks";

    [self.asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler:^{
// Other code here for AVPlayer
}];

我不使用任何选项或任何性质的东西。我相信你已经看过Apple的文档示例:

http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html