从MPMoviePlayerController获取MetaData

时间:2011-12-23 14:14:45

标签: ios mpmovieplayercontroller xcode4.2 http-live-streaming

好吧所以我使用MPMoviePlayerController从URL获得直播。

Player = [[MPMoviePlayerController alloc] 
               initWithContentURL:[NSURL URLWithString:@"MY_URL_HERE_I_REMOVED"]];
Player.movieSourceType = MPMovieSourceTypeStreaming

现在,流提供了Meta Data(我相信每个人都称之为)。例如。赛道名称等。

我想获取此信息并将其显示在标签上。

我不知道如何获取它,我无法从MPMoviePlayerController更改并在搜索了几个小时后发现 MPTimedMetadata 类引用但不知道如何使用它来获取此信息。

如果您可以提及如何使用通知也可以在每次数据更改时触发,那就太棒了。

1 个答案:

答案 0 :(得分:15)

假设您已经知道从流中发送了哪种元数据(如果不是,请使用VLC等媒体播放器查看),您必须先注册通知,以便按时间间隔获取元数据,然后一种处理它们的方法。

从通知开始,只需

 [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(MetadataUpdate:)
                                              name:MPMoviePlayerTimedMetadataUpdatedNotification
                                            object:nil];

在MPMoviePlayerController分配之后。

然后在MetadataUpdate方法

- (void)MetadataUpdate:(NSNotification*)notification
{
    if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) {
        MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
        metadataInfo = firstMeta.value;
    }
}

其中streamAudioplayer是您的MPMoviePlayerController,metadataInfo是存储值的NSString。以上内容将获取当前播放歌曲的艺术家和曲目信息。

shoutcast或icecast流发送的标准元数据就是这种情况。 (不能为别人说因为我没有尝试过)

请注意,每个流可以处理和发送不同的元数据。 由于[streamAudioPlayer timedMetadata]是NSArray,您可以

NSArray *metaArray = [streamAudioPlayer timedMetadata];
NSLog (@"%i", [metaArray count]); //to see how many elements in the array
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];

然后使用调试控制台使用键,键空间,时间戳,值属性显示元数据的内容。

以上所有仅仅是一个例子。没有一种方法可以处理元数据。 详细信息可在

找到

https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html

用于MPTimedMetadata类引用,并从那里开始...代码!