媒体基金会.NET:如何从Shoutcast获得歌曲标题



我尝试从shoutcast流中获取歌曲标题,但是事件:menewstream,meendofstream,mesourcemetadatachanged从未触发,没有任何更新。

这就是我创建媒体来源的方式:

hr = sourceResolver.CreateObjectFromURL(
   mediaURL, MFResolution.ByteStream, properties, out mediaStream
);
hr = sourceResolver.CreateObjectFromByteStream(
   mediaStream, mediaURL, MFResolution.MediaSource, properties, out objectType, out mediaSource
);

这就是我得到元数据的方式:

hr = MFExtern.MFGetService(
mediaSource, MFServices.MF_METADATA_PROVIDER_SERVICE, typeof(IMFMetadataProvider).GUID, out obj
);
IMFMetadataProvider metadataProvider = obj as IMFMetadataProvider;
hr = mediaSource.CreatePresentationDescriptor(out descriptor);
hr = metadataProvider.GetMFMetadata(descriptor, 0, 0, out metadata);

和我称之为应用的某个地方:

Display(stream.Metadata);

仅返回这些:

"Bitrate"       : 128
"Title"         : ...(station name)
"WM/Genre"      : ... 
"WM/PromotionURL": ...

问题是:我如何从媒体基金会.NET的喊叫声中获取更新,我需要实现什么来触发上述事件?

事先感谢您的时间和仁慈。

根据您的情况,有几个答案。例如,

Windows 7

  • 如果您要连接到的服务器使用ICY 200 OK将自己标识为冰冷的服务器,则可以在此处使用C#代码。增加对歌曲标题的支持是对现有样本的相当微不足道的变化。
  • 如果您要连接到的服务器可以通过发送Icy-Metadata: 1来哄骗与ICY 200 OK响应,然后明确使用urlmonschemeplugin,而不是允许Sourceresolver解析URL可以帮助您。

注意:如果无法说服服务器使用ICY 200 OK响应(例如,如果仅使用200 OK(,则无法说服MF为您自动解析标题(尽管可以进行解析 - 也许是MFT?(。

实际上,如果服务器在使用200 OK响应后发送歌曲标题,则MF将尝试"播放"标题。这些哔哔声/嗡嗡声可能非常烦人(除了迪斯科音乐以外,自从您怎么说?(

我考虑过尝试创建这样的MFT,但后来我意识到:

Windows 8

而不是"修复" MF,以允许任何指定icy-metaint提供歌曲标题的流(看似较小的修复程序(,而是采取了不同的方式。

它们具有完全损坏使用MF播放MPEG音频的能力。

在W7上工作正常的同一程序(上图(现在给出了W8上的MF_E_BYTESTREAM_NOT_SEEKABLE错误。这似乎很奇怪,因为这样的流也无法在W7中寻找,但显然这是一个致命的错误。

MS可能会有一些新方法希望人们使用,但我不知道可能是什么。


更新:

这让我感到困扰,因为这在Windows 8上不起作用。因此,我创建了自己的计划处理程序(也用C#编写(。除了处理使用ICY 200 OK的流外,该流还仅处理200 OK(以及其他一些功能(。而且,它支持(仅(寻求与W8的Soutceresolver合作。因此(几乎(同一播放器应用程序同时适用于W7&W8。

有几个警告:

  1. 虽然样本仍然在Windows 7上工作,但支持200 OK的新方案处理程序仅在Windows 8上工作,并且(大概是(。
  2. 它需要MediaFoundation .Net的Beta版本。

使用.NET 4.5.2在2015年shoutcast-2015样本中包含的.NET 4.5.2。库源将被检查为简历。

这不是"商业就绪"代码,但确实显示了基本概念。如果有人想改善它,则包括(评论(来源。特别是,它无法处理非ASCII歌曲的标题,我很确定该流处理可能会更有效地避免音频差距(或者失败,将差距传达给MF并做得更好,并做得更好。为了避免下一个 gap(。

流url已经包含艺术家和歌曲名称的元数据(至少(。因此,您的实际来源是URL本身。

最新更新