NaiveMediaPlayer Ver_2.0.0

我这种懒人是懒得去踩那一大堆坑的。

自从之前看了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。我是有点搞不懂什么意思的,就先留这么个问题吧,至少跑出来了。


项目地址如下,https://github.com/STpiamcee42/NaiveMediaPlayer
            
阅读更多
想对作者说点什么?