我正在使用Windows 10 UWP MediaPlayer构建音频流应用。 大多数流都是shoutcast / icecast mp3-stream类型,其中包含有关嵌入流本身的程序的元数据。
我播放音频流的代码基本上是这样的:
mediaPlayer.Source = MediaSource.CreateFromUri(channelUri);
mediaPlayer.Play();
虽然我完全有能力使用HttpClient打开相同的stream-url,解析元数据并阅读信息,但这不是我想要的。我需要每10秒左右获取元数据,并且不希望同时进行两次会话。
所以我有两个问题:
答案 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\chromedriver.exe";
capabilities.SetCapability("chrome.binary", @"C:\Users\ebrahimpour.l\Documents\Visual Studio 2015\Projects\FirstPackage\FirstPackage\bin\Debug\chromedriver.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\chromedriver.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代码!