我正在尝试获取AVURLAsset
. 所以我tracks
用loadValuesAsynchronouslyForKeys:completionHandler:
. 在完成处理程序中,当状态为时,AVKeyValueStatusLoaded
我查看asset.tracks
它并且它是空的。我期待至少找到一个音频和视频轨道。为什么轨道数组是空的?
这是我的代码:
#import <AVFoundation/AVFoundation.h>
int main(int argc, char *argv[])
{
__block BOOL loaded = NO;
AVURLAsset *asset;
@autoreleasepool
{
NSURL *url = [NSURL URLWithString:@"https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8"];
asset = [AVURLAsset URLAssetWithURL:url options:nil];
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
loaded = YES;
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error = nil;
AVKeyValueStatus status = [asset statusOfValueForKey:@"tracks" error:&error];
if (status == AVKeyValueStatusLoaded)
NSLog(@"asset.tracks (%ld): %@", [asset.tracks count], asset.tracks);
else
NSLog(@"error (%ld): %@", status, error);
});
}];
}
while (!loaded)
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
return 0;
}
在 Mountain Lion 10.8.1 上运行此代码会记录以下内容:
asset.tracks (0): (
)
更新有些人指出我可能无法获得曲目,因为我使用的是HTTP 实时流URL。因此,任何获取当前播放视频大小的方法(是否使用曲目)都是可以接受的答案。