【问题标题】:Getting MetaData from MPMoviePlayerController从 MPMoviePlayerController 获取元数据
【发布时间】:2011-12-23 14:14:44
【问题描述】:

好的,所以我有一个使用 MPMoviePlayerController 的 URL 的实时流。

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

现在流提供元数据(我相信每个人都这么称呼它)。例如。曲目名称等。

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

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

如果您能提及如何在每次数据更改时触发通知,那就太好了。

【问题讨论】:

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


    【解决方案1】:

    假设您已经知道从流中发送的元数据类型(如果不知道,请使用 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 来存储值。以上将获取当前播放歌曲的 Artist 和 Track 信息。

    这就是由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 类参考和从那里...代码!

    【讨论】:

    • 嗨...四年后,但是,我仍然可以问...有没有timedMetadata 方法返回一个包含多个MPTimedMetadata 实例的数组的情况?现在我正在使用for-in 循环来获取所有这些,但我想知道这是否真的有必要,而不是仅仅使用数组的第一个元素。谢谢!
    • 从技术上讲......它可以。这将需要自定义编译的 Icecast 版本或改变这一点的新 Shoucast/Icecast 版本。在特殊情况下,它可能返回带有可能电台网址的第二个对象。根据我的经验,我 100% 确定标准 Shoutcast/Icecast 服务器将在第一个(索引 0)对象上包含元数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2020-06-07
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多