我这种懒人是懒得去踩那一大堆坑的。
自从之前看了UWP的文档和指南,我深深的感觉到了社区人数不足的无力感。连用个控件CSDN上都没有足够的踩坑博客,所以我选择让同学踩坑,然后在最后一天截至之前完成了这个Lowbee到爆炸的MediaPlayer。(懒就懒吧找什么借口啊摔(╯‵□′)╯︵┻━┻
嗯,大概效果是这样的
播放功能正常,可以实现在线播放与缓存播放,就是进度条似乎有什么问题不怎么管用。
好的下面说解决方案。
第一个问题是在线播放,在线播放的话就是把源从Url里获取就可以了,感觉也没什么好说的,直接贴代码吧
MediaPlayerElement mediaPlayerElement1 = new MediaPlayerElement();
mediaPlayerElement1.Source = MediaSource.CreateFromUri(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
mediaPlayerElement1.AutoPlay = true;
很简单,Source的获取方式改成Uri就ok
然后是缓存播放,缓存播放就涉及到两个问题,第一个是从网上把它下载到本地文件夹,第二步是从本地文件夹播放出来,然后就和NaiveMediaPlayer Ver_1.0.0一样了。
第一个问题也提到了,本地音乐文件夹在哪里。这里有一个坑,就是c盘本地音乐文件夹是要权限的。当然,这个坑已经有人帮我踩过了,要去Backage.appxmanifest>Capabilities>Music Library里面设置,一句ありがとうございました送给在座的各位。
然后就是下载了,下载用的是HttpClient,然后收到的缓存放入本地固定的音乐目录 KnownFolders.MusicLibrary,然后再从这个目录以以前的方式读出来就可以了,下面贴代码
MediaPlayerElement mediaPlayerElement1 = new MediaPlayerElement();
var httpClient = new HttpClient();
var buffer = await httpClient.GetBufferAsync(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
if (buffer != null && buffer.Length > 0u)
{
var musicCache = await KnownFolders.MusicLibrary.CreateFileAsync("Cache00.mp3", CreationCollisionOption.GenerateUniqueName);
//using (var stream = await musicCache.OpenAsync(FileAccessMode.ReadWrite))
//{
// await stream.WriteAsync(buffer);
// await stream.FlushAsync();
//}
/*await FileIO.WriteBufferAsync(musicCache, buffer);*/
mediaPlayerElement1.Source = MediaSource.CreateFromStorageFile(musicCache);
mediaPlayerElement1.AreTransportControlsEnabled = true;
mediaPlayerElement1.MediaPlayer.Play();
}
被我//屏掉的那几句话我是没搞懂什么意思的,但是屏掉之后可以下载出文件,但是文件是0 byte。我是有点搞不懂什么意思的,就先留这么个问题吧,至少跑出来了。