地址:
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是空的。这点不是很明白,希望老师看到能解答一下。