ios – 从MPMoviePlayerController获取MetaData

好的,所以我使用MPMoviePlayerController从URL获得了直播.
Player = [[MPMoviePlayerController alloc] 
               initWithContentURL:[NSURL URLWithString:@"MY_URL_HERE_I_REMOVED"]];
Player.movieSourceType = MPMovieSourceTypestreaming

现在,该流提供了Meta Data(我相信大家都称之为).例如.轨道名称

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

我不知道如何获得它,我无法从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来存储该值.以上将获得当前播放歌曲的艺术家和曲目信息.

这是由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类引用并从那里…代码

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...