https://github.com/honmameiko22/ASimplePlayer
技术问题1:用什么来播放视频和音频?
解决方法:我查看了XAML controls gallery, 发现了两个控件——MediaElement和MediaPlayerElement。一开始我想用MediaPlayerElement,但是我的VS似乎不支持后者。。因此我选择了MediaElement。我查看了MediaElement的说明文档https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement,学习了MediaElement的基本属性,我主要使用了AutoPlay和AreTransportControlsEnabled
技术问题2:用什么来选择文件?
解决方法:我找到了这个网页https://blog.csdn.net/zmq570235977/article/details/48133247,里面提到可以用FileOpenPicker选择文件:FileOpenPicker允许用户选择和打开文件。其中的SuggestedStartLocation属性决定了打开的默认路径,FileTypeFilter属性决定了可以打开哪些文件。
网页中这样选择文件:
private async void FileOpen_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.List; //设置文件的现实方式,这里选择的是图标
picker.SuggestedStartLocation =PickerLocationId.PicturesLibrary; //设置打开时的默认路径,这里选择的是图片库
picker.FileTypeFilter.Add(".srt"); //添加可选择的文件类型,这个必须要设置
file = await picker.PickSingleFileAsync(); //只能选择一个文件
if (file!=null)
{
//to do something
}
}
我的写法几乎是跟它一样的。
FileOpenPicker MyPicker = new FileOpenPicker();
MyPicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
MyPicker.FileTypeFilter.Add(".mp4");
MyPicker.FileTypeFilter.Add(".mp3");
StorageFile file = await MyPicker.PickSingleFileAsync();
一开始使用FileOpenPicker,发现不存在,查了一下是要加上Windows.Storage.Pickers才能用。FileOpenPicker只有两个方法,PickSingleFileAsync和PickMultipleFilesAsync。我选择了PickSingleFileAsync。但是根据上面写完之后发现编译不过去。在这个页面中我找到了解决方法https://social.msdn.microsoft.com/Forums/en-US/2e90e822-7ba2-4914-b715-7753dcc6f340/compile-error-on-await-picksinglefileasync?forum=winappswithcsharp,原来是没有加async修饰。。这里的函数是Async的,所以要用async wait,加上之后问题就解决了。
技术问题3:选择文件之后如何播放?
我在https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement找到了使音频播放的方法。
FileAccessMode有read和readwrite两种,因为此处只需要读取,所以选择FileAccessMode.Read。
if (file != null)
{
var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
mediaPlayer.SetSource(stream, file.ContentType);
mediaPlayer.Play();
}
我的写法是
if (file != null)
{
MyPlayer.AreTransportControlsEnabled = true;
MyText.Text = file.Name;
var stream = await file.OpenAsync(FileAccessMode.Read);
MyPlayer.SetSource(stream, file.ContentType);
}
这样一来,就可以实现简单实现选择和播放了。其实基本上和网上的代码差不多。因为做的不是很复杂所以没有遇到什么大问题。
打开时的样子:
播放时的样子: