UWP作业 一个简单多媒体播放器的完成(二)

地址:
https://github.com/honmameiko22/ASimplePlayer

(1)添加网络视频播放
在线播放网络视频的功能实现起来比较简单,只要把mediaelement的source改成要播放的视频地址就可以播放了。
一开始写的时候出了一些问题,视频不播放。原来是在第一个版本中,我在函数里才把功能条设置为可见,在播放网络视频的这个函数里就忘记加了。。加了就好了。

(2)下载并播放功能
想要实现下载功能有不止一种方法。我查到的有httpclient和backgrounddownloader。↓为backgrounddownloader的文档。
https://docs.microsoft.com/en-us/uwp/api/windows.networking.backgroundtransfer.backgrounddownloader
但是介绍说backgrounddownloader适合用于下载比较大一些的文件,像我们的校歌这种小文件用httpclient就好了。
(2.1)基本的下载
https://www.bbsmax.com/A/l1dyYk7bde/
在这个网站中,介绍了如何用httpclient进行下载。从这段代码可以看出来,应该首先创建一个httpclient,然后用httpclient中的GetBufferAsync函数获得目标网址的数据缓存。如果获得了缓存,下一步就是进行保存了。利用选择的文件地址,把缓存的数据写入该文件。
这里写图片描述

(2.2)保存到music目录下

老师的作业里有一个要求就是要把文件保存到music目录下。在编写保存的文件目录时,我遇到一个问题,没有办法进入我选择的文件夹。出错原因和权限有关。于是我在网上进行了搜索,找到了类似问题https://stackoverflow.com/questions/21225959/how-to-enable-documentslibrary-capability-in-a-windows-store-winrt-app
这里介绍了两种解决方法,一种是这里写图片描述
另一种是这里写图片描述
不过两种其实是一样的,我在自己的页面中进行了勾选之后,问题就解决了。

(2.3)防止有多个一样的文件
我原来使用的GenerateUniqueName属性,如果多次下载,就会有多个相同文件,于是把GenerateUniqueName改成了ReplaceExisting。
https://docs.microsoft.com/en-us/uwp/api/windows.storage.creationcollisionoption
这里写图片描述

(2.4)播放缓存的内容
TASK<>的返回
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/async-return-types
Task 返回类型用于某种异步方法,此异步方法包含 return (C#) 语句,其中操作数具有类型 TResult。
通过返回storagefile,我就可以获得刚刚下载得到的文件,并且进行播放。

有一点比较奇怪的是,

 using (var stream = await File.OpenAsync(FileAccessMode.ReadWrite))
{
    await stream.WriteAsync(buffer);
    await stream.FlushAsync();
}

对于上面的语句,如果我将它改成

var stream = await File.OpenAsync(FileAccessMode.ReadWrite);
await stream.WriteAsync(buffer);
await stream.FlushAsync();

就会出现问题,再多次点击cacheandplay按钮后,就会显示没有文件返回,即

StorageFile file=await GetFileAsync();

语句得到的file是空的。这点不是很明白,希望老师看到能解答一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值