Naïve Media Player, Part 2
项目主页网址:
https://github.com/Judylalala/en
Q1:如何播放online歌曲?
A1:我本来以为会为MediaElement设置一个单独的属性播放online音频、视频文件,后来发现用的也是Source,在Source中确定播放音频的网页地址。
播放online校歌的xaml代码如下:
<StackPanel Orientation="Horizontal">
<MediaElement x:Name="mediaPlayer"
Source="http://www.neu.edu.cn/indexsource/neusong.mp3"
MaxWidth=""
AutoPlay="False"
AreTransportControlsEnabled="True"
Margin="78,70,100,70"/>
<Button Content="Choose" Click="Button_Click"/>
</StackPanel>
Q2:如何将在线歌曲下载到本地?
A2:我在这个网址:https://www.cnblogs.com/T-ARF/p/5886153.html
里面找到了使用下载网页的上的音频并保存的方法,代码如下:
private async Task<StorageFile> GetVoiceData()
{ HttpClient httpclient = new HttpClient();
var GetData = await httpclient.GetStreamAsync(new Uri("http://dx.sc.chinaz.com/Files/DownLoad/sound1/201207/1771.mp3"));
var file = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("1771.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenStreamForWriteAsync())
{
await GetData.CopyToAsync(stream);//将获取的HttpClient的Stream流复制到文件的stream流
await stream.FlushAsync();//异步刷新 } return This_Voice_files;
}
}
然后将网址和文件名称做了修改:
public async Task<StorageFile> Load()
{
try
{
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 file = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await stream.WriteAsync(buffer);
await stream.FlushAsync();
}
return file;
}
}
catch { }
return null;
}
但是这个方法只是将网页上的音频文件保存到了应用程序默认进行数据存储的位置,而不是下载到音乐文件夹中。
那么:
Q3:如何定位音乐文件夹?
A3:我一开始并没有找到直接将下载文件存到音乐文件夹的办法,但我找到了打开音乐文件夹时初始定位音乐文件夹的办法,我在这个网址:https://docs.microsoft.com/zh-cn/windows/uwp/audio-video-camera/media-playback-with-mediasource
里面的“创建并播放 MediaSource”中找到了下面这段C#代码:
//Create a new picker
var filePicker = new Windows.Storage.Pickers.FileOpenPicker(); //Add filetype filters. In this case wmv and mp4.
filePicker.FileTypeFilter.Add(".wmv");
filePicker.FileTypeFilter.Add(".mp4");
filePicker.FileTypeFilter.Add(".mkv"); //Set picker start location to the video library
filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary; //Retrieve file from picker
StorageFile file = await filePicker.PickSingleFileAsync(); if (file != null)
{
mediaSource = MediaSource.CreateFromStorageFile(file);
mediaElement.SetPlaybackSource(mediaSource);
}
其中的这两行代码确定了在选择文件的时候,初始定位到哪里:
//Set picker start location to the video library
filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
但是这个代码定位的是视频库,所以我试着将视频库改成音频库,修改的部分如下(不要注意openPicker和filePicker名字不一样,因为找的代码里的名字和我定义的名字不一样):
//Set picker start location to the music library
openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
然后跑了一下,发现这次可以在选择文件夹的时候初始定位到音乐文件夹,而且我发现,虽然用户可以对这个系统自带的文件夹进行挪动和重命名,可是不论我怎么挪动它到别的磁盘、或者到桌面,也不论我把它的名字改成什么,这段代码都可以精准地初始定位到这个音乐文件夹。
那么,是不是我也可以利用MusicLibrary来将文件准确地存到音乐文件夹中,然后我在:https://docs.microsoft.com/zh-cn/windows/uwp/files/file-access-permissions
这个网址里找到了访问通过KnownFolders.MusicLibrary来访问MusicLibrary的办法。
那么问题来了:
Q4:如何保存下载的文件到音乐文件夹?
A4:我将上面那段将网页上的音频文件保存到本地文件夹的代码改了一下:
public async Task<StorageFile> Load()
{
try
{
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)
{
StorageFile newFile = await KnownFolders.MusicLibrary.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
//var newFile = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await newFile.OpenAsync(FileAccessMode.ReadWrite))
{
await stream.WriteAsync(buffer); await stream.FlushAsync();
} return newFile;
}
}
catch { }
return null;
}
通过KnownFolders.MusicLibrary.CreateFileAsync()这个方法将校歌存到了音乐文件夹中。
与此同时,为我的应用程序增加访问音乐库的权限:

然后成功了......
最后展示一下运行结果:
初始状态是在播放一个视频文件:

点击“放校歌!”按钮后,切换到校歌:

而且程序运行后,Music文件夹中多了一个校歌音频文件:

Naïve Media Player, Part 2的更多相关文章
- Naïve Media Player
我的GitHub链接:https://github.com/Joyce45/hwt 一.播放器?怎么做? 提到播放器,首先想到的就是XAML控件库里的MediaElement,于是我又大致阅读了一下该 ...
- 用VLC Media Player搭建简单的流媒体服务器
VLC可以作为播放器使用,也可以搭建服务器. 在经历了Helix Server和Darwin Streaming Server+Perl的失败之后,终于找到了一个搭建流媒体简单好用的方法. 这个网址中 ...
- android错误之MediaPlayer用法的Media Player called in state *,androidmediaplayer
用到Media Player,遇到几个问题,记一下 用法就不说了,使用的时候最好参考一下mediaPlayer的这张图 第一个错误是Media Player called in state 8 这个是 ...
- win7自带windows media player 已停止工作
解决方法如下: 在计算机开始,菜单找到控制面板 ,然后打开程序和功能,选择打开或关闭window功能,媒体功能.再取消windows Media Center Windows MediaPlayer选 ...
- 转:Media Player Classic - HC 源代码分析
VC2010 编译 Media Player Classic - Home Cinema (mpc-hc) Media Player Classic - Home Cinema (mpc-hc)播放器 ...
- Media Player 把光盘中的内容拷贝出来的方法
http://jingyan.baidu.com/article/cb5d610529f0c1005c2fe0b4.html 这个链接是通过Media Player 把光盘中的内容拷贝出来的方法h ...
- 20 Free Open Source Web Media Player Apps
free Media Players (Free MP3, Video, and Music Player ...) are cool because they let web developers ...
- Windows Media Player安装了却不能播放网页上的视频
前段时间遇到Windows Media Player安装了却不能播放网页上的视频的问题,在网上查找资料时,发现大部分资料都没能解决我这个问题.偶尔试了网上一牛人的方法,后来竟然解决了.现在再找那个网页 ...
- 如何在Windows中打开多个Windows Media Player
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Windows中打开多个Windows Media Player.
随机推荐
- 第十三章:UNDO段
一.UNDO UNDO 段是用于存储还原数据的特殊段,在发生实例故障的时候,UNDO 段用来对数 据进行恢复.本章内容包括介绍 UNDO 段的工作原理,并进行自动和手工的 UNDO 段的管理 1.1 ...
- zigbee 信道
以zigbee nxp5169 信道是:11-26 15d0f1-170923 15 ----- 信道 d0f1--- 是zigbee 物理地址 170923---时间2017年9月 ...
- Docker----与Asp.net core 的完美结合,在docker容器中创建Asp.Net Core 项目
在腾讯云上买了一个小容量的服务器,搭建一个docker环境后,可以尝试做一些单系统做起来很麻烦的东西.譬如说,你在windows OS或UbuntuOS中,突然想玩CentOS了,你可以选择将电脑再装 ...
- IE下get方式传中文参数乱码解决方法
乱码原因:浏览器在传递url的时候,会使用自己的编码格式对地址进行编码,如果浏览器所使用编码与服务器采用编码不一致,服务器接收到的参数就会出现乱码.在firefox,chrome下正常,ie下会出现乱 ...
- [转] 以 async/await 为例,说明 babel 插件怎么搭
你一定碰到过这些库 babel-polyfill 项目地址:https://github.com/babel/babel/blob/master/packages/babel-polyfill 通过两 ...
- AngualrJS之自定义指令
一.指令 指令directive是AngularJS的核心之一 包括 - 用于扩展HTML元素.属性的指令 - 执行特定功能的指令 - 自定义指令 内置指令基本上都是以ng-开头 二.内置指令 1.属 ...
- 如何在Ubuntu 18.04中安装VMware Workstation Player
参考链接 如何在Ubuntu 18.04中安装VMware Workstation Player https://www.sysgeek.cn/ubuntu-18-04-install-vmware- ...
- mysql存储过程游标使用
BEGIN DECLARE idCount int DEFAULT 0;-- 定义查询的id count DECLARE nameCount int DEFAULT 0;-- 统计相同名字合计 DEC ...
- sklearn.datasates 加载测试数据
数据一:波士顿房价(适合做回归),以后直接用boston标记 这行代码就读进来了boston = sklearn.datasets.load_boston()查询具体数据说明,用这个代码:print ...
- python代码规范与标准库参考
python代码规范与标准库参考 python代码规范参考文献: http://www.runoob.com/w3cnote/google-python-styleguide.html https:/ ...