UWP homework—— Naive MediaPlayer Part 2

  本次作业要求为第一次的MediaPlayer增添两个功能,其一是在线播放音频,其二是缓存到本地文件在播放功能,下面简述这两个功能分别是如何实现的:
  (一)在线播放音频

          通过百度搜索,我发现了想要在线获取数据流,要进行一个叫做“自适应流式处理的方法”,于是,我在微软的官方文档中找到了它以及它的用法 (https://docs.microsoft.com/zh-cn/windows/uwp/audio-video-camera/adaptive-streaming)
微软官方给出了这样的在线播放方法:调用 MediaSource.CreateFromUri 以从 DASH 或 HLS 清单文件的 URI 创建一个 MediaSource。 然后设置 MediaPlayerElementSource 属性。 MediaPlayerElement 将为该内容自动创建一个新的 MediaPlayer 对象。 你可以在 MediaPlayer 上调用 Play 以开始播放内容。于是,我根据官方指南在click事件中添加了如下的代码:
  private void AppBarButton_Click(object sender, RoutedEventArgs e)
        {
            System.Uri manifestUri = new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3");
            MediaPlayer.Source = MediaSource.CreateFromUri(manifestUri);
        }
于是,校歌的在线播放功能就实现了,附截图一张:
 

  (二)缓存到本地文件功能

       这个功能着实是花了我很长时间,在资料的查找和运用上走了很多的弯路,但最后磕磕绊绊也算是实现了,但是感觉代码实现上还不能说是完全理解。首先呢,缓存到本地文件可以拆解为两个步骤,第一个是缓存,第二个是存入文件。对于缓存功能的实现,我参考了微软官方文档(https://docs.microsoft.com/en-us/uwp/api/Windows.Web.Http.HttpClient),先将想要下载的内容缓存到buffer中,代码如下:
                var httpClient = new HttpClient();
                var buffer = await httpClient.GetBufferAsync(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
这就实现了第一步,缓存,于是到了第二步,在MusicFolder下创建一个新文件,并将buffer中内容保存在其中,我在官方文档中(https://docs.microsoft.com/zh-cn/windows/uwp/files/quickstart-managing-folders-in-the-music-pictures-and-videos-libraries)找到了一个这样的方法:
于是,我加了 StorageFile destinationFile = await KnownFolders.MusicLibrary.CreateFileAsync("东北大学校歌.mp3");
为buffer预创建了一个mp3类型的文件,但是,这里有又遇到了问题,如何将buffer存入文件,这个问题我看了n多个博客,最后在整合出来了一个相对来说满意的方法,代码如下:
using (var stream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await stream.WriteAsync(buffer);
                    await stream.FlushAsync();
                }

这个操作就是说将buffer写入文件,然后将stream对象资源释放,以节约内存,于是乎,缓存并保存功能就此实现,最后在click函数的末尾加上
               var mediaSource = MediaSource.CreateFromStorageFile(destinationFile);
                MediaPlayer.Source = mediaSource;
就可以播放了

但是,但是,但是,这都是我以为,最头疼的问题,也是耗费了我最多时间的问题出现了,运行报错,缺少访问权限,这个问题我各种百度修改文件夹权限,又在系统的命令行里更改,可是都无济于终。最后,我在和同学的讨论中得到了良好启发,大神告诉我在vs2017中添加音乐库权限
只需要将音乐库勾选上即可,运行成功,不得不佩服同学之中的大佬!

费尽千辛万苦,最后的运行效果如图
最后附上GitHub的URl链接:https://github.com/tyuchn/homework--A-basic-player
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值