【问题标题】:Issue getting metadata from stream?从流中获取元数据的问题?
【发布时间】:2013-11-03 03:52:19
【问题描述】:

我正在尝试获取元数据,例如我的 URL 的艺术家姓名/曲目名称,但是我没有看到,根本没有得到它,我不太确定我错过了什么,音频加载并且玩得很好:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.mainTitle.text = _stationName;

    NSString *u = @"http://pub1.sky.fm:80/sky_solopiano";

    NSURL *url = [NSURL URLWithString:u];

    radiosound = [[AVPlayer alloc] initWithURL:url];

    [radiosound play];

}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    AVPlayerItem * item = (AVPlayerItem*)object;
    NSLog(@"%@", item.timedMetadata);


}

更新根据这个问题中一位成员的建议,我尝试实施

AVAsset *info = radiosound.currentItem.asset;

    NSLog(@"%@",info);

代替

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
        AVPlayerItem * item = (AVPlayerItem*)object;
        NSLog(@"%@", item.timedMetadata);


    }

但这只会返回我已经知道的数据并且不会刷新,它当前返回:

<AVURLAsset: 0x109c7ccf0, URL = http://pub1.sky.fm:80/sky_solopiano>

【问题讨论】:

    标签: ios objective-c metadata avfoundation avplayer


    【解决方案1】:

    你已经覆盖/实现了 NSObject 上的观察者钩子,但是你没有在任何地方为 AVPlayer 设置属性观察,所以这个方法永远不会触发。

    我想你真正感兴趣的是:

    radiosound.currentItem.asset
    

    。 . .您可以在分配/初始化您的 radiosound 实例后立即使用它。

    这个类的可用属性是here

    获取给定类的文档:

    • Google 类名 - 它几乎总是会返回结果。
    • 按住 Option 键并单击 Xcode 中的类
    • 使用像Dash这样的文档浏览器

    键值观察 (KVO)

    在这种情况下,您可能不需要 KVO,但是您绝对应该检查一下。有关更多信息,请参阅 Apple 文档以及大量教程。也许this one

    【讨论】:

    • 我刚刚尝试了您的建议,虽然我确实得到了一些数据,但只有以下内容:&lt;AVURLAsset: 0x109c7ccf0, URL = http://pub1.sky.fm:80/sky_solopiano&gt; 不是我正在寻找的实际元数据,还有其他建议吗?
    猜你喜欢
    • 2023-02-17
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多