好的,所以我有一个使用MPMoviePlayerController从URL直播的流。

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

现在,流提供元数据(我相信这就是每个人所说的)。例如。轨道名称等

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

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

很棒,如果您能提到每次数据更改时也如何使用通知来触发。

最佳答案

假设您已经知道从流中发送了什么样的元数据(如果不知道,请使用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来存储值。上面将获得当前正在播放的歌曲的艺术家和轨道信息。

广播或冰流发送的标准元数据就是这种情况。
(不能对其他人说,因为我还没有尝试过)

注意,每个流可以处理和发送不同的元数据。
由于[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类的引用,然后从那里开始……代码!

关于ios - 从MPMoviePlayerController获取元数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8617067/

10-14 04:05