Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 为什么加载后AVURLAsset的tracks数组为空?_Cocoa_Avfoundation - Fatal编程技术网

Cocoa 为什么加载后AVURLAsset的tracks数组为空?

Cocoa 为什么加载后AVURLAsset的tracks数组为空?,cocoa,avfoundation,Cocoa,Avfoundation,我正在尝试获取avurlaste视频轨迹的自然大小。因此,我使用loadValuesAsynchronouslyForKeys:completionHandler:加载资产跟踪。在完成处理程序中,当状态为AVKeyValueStatusLoaded时,我查看asset.tracks,它是空的。我希望找到至少一个音频和视频曲目。为什么轨迹数组是空的 这是我的密码: #import <AVFoundation/AVFoundation.h> int main(int argc, cha

我正在尝试获取
avurlaste
视频轨迹的自然大小。因此,我使用
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;
}

更新一些人指出我可能无法获得曲目,因为我使用的是HTTP直播URL。因此,以任何方式(使用或不使用曲目)获取当前播放视频的大小都是可以接受的答案。

由于该资产是通过HTTP直播服务的,因此它没有任何曲目。检索视频大小的另一种方法是使用KVO观察播放器项
presentationSize
属性:

AVPlayer *player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:asset]];
[player addObserver:self forKeyPath:@"currentItem.presentationSize" options:NSKeyValueObservingOptionNew context:NULL];

@oxced:我想获取播放器的当前比特率。HLS是否有这样的问题?@0xced:这是OSX唯一的问题吗?我在iOS上看不出有什么问题。我只是在bot OS X 10.11.4和iOS 9.3上尝试了这段代码,得到了相同的结果:0首曲目!
AVPlayer *player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:asset]];
[player addObserver:self forKeyPath:@"currentItem.presentationSize" options:NSKeyValueObservingOptionNew context:NULL];