のビデオ トラックの自然なサイズを取得しようとしてい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を使用しているため、トラックを取得できない可能性があるとの指摘がありました。そのため、現在再生中のビデオのサイズを取得する方法 (トラックを使用するかどうかに関係なく) は、受け入れられる答えになります。