2012-09-16 2 views
3

AVURLAsset의 비디오 트랙의 자연적인 크기를 얻으려고합니다. 자산 tracksloadValuesAsynchronouslyForKeys:completionHandler:으로로드합니다. 완료 처리기에서 상태가 AVKeyValueStatusLoaded 일 때 asset.tracks을 보면 비어 있습니다. 나는 적어도 오디오와 비디오 트랙을 찾을 것으로 기대하고있다. 트랙 배열이 비어있는 이유는 무엇입니까?로드 후 AVURLAsset의 트랙 배열이 비어있는 이유는 무엇입니까?

#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; 
} 

산 사자에 10.8.1 로그이이 코드를 실행 : 어떤 사람들은 내가 트랙 인해를 얻을 수 있다는 것을 나에게 지적

asset.tracks (0): (
) 

UPDATE를 여기

내 코드입니다 HTTP 라이브 스트리밍 URL을 사용하고 있습니다. 따라서 현재 재생중인 비디오의 크기를 얻으려면 트랙을 사용하거나 사용하지 않는 것이 좋습니다.

답변

5

자산이 HTTP 라이브 스트리밍과 함께 제공되므로 트랙이 없습니다. 비디오 크기를 검색하는 또 다른 방법은 KVO와 플레이어 항목 presentationSize 속성을 관찰하는 것입니다

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

가 @oxced : 나는 플레이어의 현재의 비트 전송률을 얻을합니다. 어쨌든 HLS로 그렇게 할 것입니까? –

+0

@ 0xced :이 문제는 OSX에서만 발생합니까? iOS에서이 문제가 발생하지 않습니다. –

+0

봇 OS X 10.11.4와 iOS 9.3에서이 코드를 시험해 보았는데 동일한 결과를 얻었습니다 : 0 트랙! – 0xced

관련 문제