2012-02-01 12 views
0

私はMPMoviePlayerControllerを使用してオーディオをストリームします。私はまた、そのtimedMetadataプロパティを使用して、MP3曲のID3タグを取得します。これは、iOS 4.xでうまく動作しますが、ここではないのiOS 5でMPMoviePlayerController timedMetadataはiOS 5で空白を返します

は、コードの一部は、Iの使用である:

具体的
MPMoviePlayerController* streamPlayer;  
// allocation and initialization code ... 

- (void) metadataUpdate: (id) sender { 
NSLog(@"GOT METADATA!!!!!"); 
if ([streamPlayer timedMetadata]!=nil && [[streamPlayer timedMetadata] count] > 0) { 
    NSLog(@"metadata count = %d", [[streamPlayer timedMetadata] count]); 
    for (MPTimedMetadata *metadata in [streamPlayer timedMetadata]) { 
     NSLog(@"description %@", metadata.allMetadata); 
     if ([[metadata.allMetadata valueForKey:@"key"] isEqualToString:@"title"]) { 
      song.text = [metadata.allMetadata valueForKey:@"value"]; 
      filename = song.text; 
     } 
    } 
} 

} 

、iOSの5の下metadata.allMetadataは空白に戻ります上記の[[streamPlayer timedMetadata] count]は2です。

これはiOS 5のバグですか?

答えて

1

問題が見つかりました: MPTimedMetadataのallMetadataプロパティが原因です。何らかの理由で、このプロパティはiOS 5では空を返しますが、iOS 4ではドキュメントで説明されているように動作します。

- (void) metadataUpdate: (id) sender { 
    NSLog(@"GOT METADATA!!!!!"); 
    if ([streamPlayer timedMetadata]!=nil && [[streamPlayer timedMetadata] count] > 0) { 
    for (MPTimedMetadata *metadata in [streamPlayer timedMetadata]) { 
     if ([[metadata valueForKey:@"key"] isEqualToString:@"title"]) { 
      song.text = [metadata valueForKey:@"value"]; 
      filename = song.text; 
     } 
    } 
    } 
} 
2

私は同じ行動を見ていると、バグレポートを提出します:
私のために働いた正しいコードはこれです。その間に、私は自分の辞書を作成して渡すだけです。

- (void)metadataUpdate:(NSNotification *)notification 
{ 
    NSMutableDictionary *metaDict = [NSMutableDictionary dictionary]; 

    if ([self.moviePlayer timedMetadata]!=nil && [[self.moviePlayer timedMetadata] count] > 0) 
    { 
     for (MPTimedMetadata *metadata in [self.moviePlayer timedMetadata]) 
     { 
      [metaDict setObject:[metadata valueForKey:@"value"] forKey:[metadata valueForKey:@"key"]]; 
     } 
     NSLog(@"Meta value:%@", metaDict); 
    } 
} 

EDIT:playableDurationの問題に対応して 、以下は私のためにplayableDurationを返します。ただし、これはビデオの合計時間ではなく、現時点で再生可能なものだけで、ダウンロードされた内容によって変化します。 (HTTPライブストリーミングの場合)

- (void)viewDidLoad 
{ 
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:<your URL>]; 

    [self.moviePlayer.view setFrame: self.movieView.bounds]; 
    [self.movieView addSubview: self.moviePlayer.view]; 

    self.moviePlayer.shouldAutoplay = NO; 
    [self.moviePlayer prepareToPlay]; 

} 

- (IBAction)playGame:(UIButton *)sender 
{ 
    if (self.moviePlayer.isPreparedToPlay) { 
     [self.moviePlayer play]; 
     NSLog(@"%f", self.moviePlayer.playableDuration); 
    } 
} 
+0

おかげさまでChris。 playableDurationの問題は、iOS 5.xで常にゼロを返すように見えますか? http://stackoverflow.com/questions/7763200/playableduration-returns-0-in-ios5#comment10112948_7763200 – RawMean

+0

私はviewDidLoadでplayableDurationをチェックしてください。もちろん、ファイルはまだロードされていません。最初のセグメントがロードされた後にplayableDurationをチェックすると、有効な継続時間が取得されます。しかし、allMetadataプロパティの場合、何かがあることがわかっていても、null以外は取得できませんでした。実際、上記のコードは、allMetadataプロパティが返すと思われる辞書を返します。しかし、allMetadataプロパティでこれを実行すると、メタデータが返され、プロパティはNULLを返します。 – GnarlyDog

+0

iOS 5.xではplayableDurationが0以外の値を返すサンプルコードを共有できると非常に感謝しています。おそらくあなたは上記のリンクに答えてteのステープルコードを提供することができますか? – RawMean

関連する問題