如何从UWP MediaPlayer获取流元数据?

时间:2017-05-05 15:40:44

标签: c# http uwp audio-streaming windows-media-player

我正在使用Windows 10 UWP MediaPlayer构建音频流应用。 大多数流都是shoutcast / icecast mp3-stream类型,其中包含有关嵌入流本身的程序的元数据。

我播放音频流的代码基本上是这样的:

mediaPlayer.Source = MediaSource.CreateFromUri(channelUri);
mediaPlayer.Play();

虽然我完全有能力使用HttpClient打开相同的stream-url,解析元数据并阅读信息,但这不是我想要的。我需要每10秒左右获取元数据,并且不希望同时进行两次会话。

所以我有两个问题:

  1. UWP MediaPlayer组件是否能够读取元数据,如果是,如何?
  2. 如果没有,我是否可以通过httpclient(或其他)打开流,读取元数据,然后将相同的流发送到MediaPlayer?
  3. 示例流:http://sverigesradio.se/topsy/direkt/164-hi-mp3

1 个答案:

答案 0 :(得分:1)

我从未使用过UWP,但我从Web开发的角度来看,我有一个解决方案,看起来UWP使用的是非常相似的API。

  

UWP MediaPlayer组件是否能够读取元数据,如果是,如何?

可能不是。我见过的所有Microsoft代码都没有。没有一个网络浏览器'媒体播放器本地处理这个。

  

如果没有,我是否可以通过httpclient(或其他)打开流,读取元数据,然后将相同的流发送到MediaPlayer?

是的,这正是你应该做的。

使用MediaSource扩展程序。 MSE,至少在网络浏览器环境中,允许您使用您想要的任何方式获取媒体数据,然后将其传递到媒体播放器,让它通过编解码器和播放来运行它。

在浏览器中,您将使用Fetch API发出带有Icy-MetaInt标头的HTTP请求,以从服务器请求元数据,读取DesiredCapabilities capabilities = DesiredCapabilities.Chrome(); ChromeOptions options = new ChromeOptions(); options.AddArguments("test-type"); options.BinaryLocation = @"C:\Users\ebrahimpour.l\Documents\Visual Studio 2015\Projects\FirstPackage\FirstPackage\bin\Debug\chro‌​medriver.exe"; capabilities.SetCapability("chrome.binary", @"C:\Users\ebrahimpour.l\Documents\Visual Studio 2015\Projects\FirstPackage\FirstPackage\bin\Debug\chro‌​medriver.exe"); capabilities.SetCapability(ChromeOptions.Capability, options); System.Environment.SetEnvironmentVariable("webdriver.chrome.‌​driver", @"C:\Users\ebrahimpour.l\Documents\Visual Studio 2015\Projects\FirstPackage\FirstPackage\bin\Debug\chro‌​medriver.exe"); driver = new ChromeDriver(@"C:\Users\ebrahimpour.l\Documents\Visual Studio 2015\Projects\FirstPackage\FirstPackage\bin\Debug"); capabilities.SetCapability(capabilities.Platform.ProtocolPlatformType, "WebDriver"); capabilities.SetCapability(CapabilityType.BrowserName, "chrome"); capabilities.SetCapability(capabilities.Version, "57"); capabilities.SetCapability(CapabilityType.Platform, "WinNT"); capabilities.SetCapability(ChromeOptions.Capability, options); RemoteWebDriver rw = new RemoteWebDriver(new Uri("http://localhost:4444/grid/console"), capabilities); driver = rw; baseURL = "http://192.168.10.173:8080/"; verificationErrors = new StringBuilder(); 响应标头以确定元数据的字节偏移量块,然后从音频数据中解复用元数据,然后将音频数据放入缓冲区发送到媒体播放器。

帮助您开始使用UWP的一些资源:

抱歉,我无法为您提供更具体的UWP代码!