我有以下代码,当在大多数(Shoutcast)流媒体服务器上使用时,它会返回艺术家/歌曲元数据,但在特定服务器上它不起作用,只是显示字母“t”!
由于 NSLog 目前对我不起作用(尽管进行了各种更改,我无法让它工作(Xcode 9.2)),所以我有点一头雾水。
- (void)FetchMeta
{
for (AVPlayerItemTrack *item in player.currentItem.tracks)
{
if ([item.assetTrack.mediaType isEqual:AVMediaTypeAudio])
{
NSArray *meta = [playerItem timedMetadata];
for (AVMetadataItem *metaItem in meta)
{
NSString *source = metaItem.stringValue;
if(![source isEqualToString:self.songInfo.text])
{
self.songInfo.text = [source stringByAppendingString:@" "];
//self.songInfo.text = @"Test";
[self LoadArtistImage];
}
NSLog(@"meta %@\n%@",source,metaItem.extraAttributes);
}
}
}
}
我知道我在代码的正确部分,因为如果我取消注释 //self.songInfo.text = @"Test";
行,我会在显示屏上看到它歌曲元数据应该出现,但是已经在这上面稳定显示了 3 个小时并且无法让它显示元数据并且没有 NSLog 真的没有帮助。
更新:我已经能够询问服务器并且可以看到差异,但我仍然不知道如何告诉代码在正确的字段中查找......我的理解是数据被放入数组中(我认为)但它走错了领域。也许它总是只占用最后一个字段?明确地说,我正在寻找它来获取“StreamTitle”字段。
工作服务器响应:
Input #0, mp3, from 'http://server:port':
Metadata:
icy-notice1 : <BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR>
icy-notice2 : SHOUTcast DNAS/posix(linux x86) v2.5.1.724<BR>
icy-name : Station Name
icy-genre : 80s, Pop
icy-br : 128
icy-sr : 44100
icy-url : http://website.com
icy-pub : 1
StreamTitle : Rod Stewart - Lost In You
非工作服务器响应:
Input #0, mp3, from 'http://server:port/':
Metadata:
icy-notice1 : <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2 : SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-name : Station Name
icy-genre : Various
icy-url : www.website.com
icy-pub : 1
icy-br : 128
StreamTitle : Theory of a Deadman - Rx
StreamUrl : t
进一步澄清。 “工作服务器”输出正常工作,使用显示的代码显示“StreamTitle”字段,非工作服务器显示最后一个字段“StreamUrl”,这不是所需的字段。
有什么建议吗?
非常感谢。
最佳答案
正如@Larme 所说,您的循环实质上会将您的文本字段依次设置为每个项目的值,因此最后一个项目的值“获胜”。
如果循环中的当前项是流标题,则只需设置文本字段,例如:
for (AVMetadataItem *metaItem in meta)
{
if([metaItem.key isEqualTo: AVMetadataIcyMetadataKeyStreamTitle])
{
self.songInfo.text = metaItem.stringValue;
}
}
关于ios - 流数据(艺术家/标题)未显示在 xcode 的 AVPlayerItemTrack 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342163/