要求:
建立一个简单的媒体播放器,
允许用户选择文件——只能选择MP3或mp4文件
播放文件
第一部分
在基本功能部分主要参考了
https://msdn.microsoft.com/zh-cn/library/windows/apps/mt187272.aspx
,在这里面比较复杂的是关于添加文件的部分,代码如下:
private async void openFile_click(object sender, RoutedEventArgs e)
{
await SetLocalMedia();
}
async private System.Threading.Tasks.Task SetLocalMedia()
{
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.FileTypeFilter.Add(".wmv");
openPicker.FileTypeFilter.Add(".mp4");
openPicker.FileTypeFilter.Add(".wma");
openPicker.FileTypeFilter.Add(".mp3");
var file = await openPicker.PickSingleFileAsync();
// mediaPlayer is a MediaElement defined in XAML
if (file != null)
{
var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
mediaplayer.SetSource(stream, file.ContentType);
mediaplayer.Play();
}
}
这部分需要回去再看一下文件添加里的具体的东西,不然可能讲不清楚
然后一个基本符合要求的音乐视频播放器大概是这个样子——能够打开文件,播放mp3,
Mp4,有暂停/播放按钮
第二部分
面要做的是——拖动时间进度条,全屏、空格键暂停,左右方向键进退十秒,音量控制。
全屏:
在全屏中遇到了一点小小的问题,就是全屏后全屏按钮消失了,无法退出全屏
用slider绑定时间进度条
https://www.cnblogs.com/wpali/p/5657389.html
在这里我们通过sliderchange事件使mediaelement.potion=slider.value使视频跳到我们点到的value值,这时候我们就需要视频的长度和slider.Maximum保持相同。
用mediaopened事件先获取视频文件的长度(秒)赋值给slider的最大值以保持进度条的值和视频的总长度一致。
private void gettime(object sender, RoutedEventArgs e)
{
sliderposition.Maximum = mediaplayer.NaturalDuration.TimeSpan.TotalSeconds;
}
用slider中的valuechange使在拖动进度条时视频进度随之变化
private void sliderposition_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
mediaplayer.Position = TimeSpan.FromSeconds(sliderposition.Value);
}
到这里,进度条的功能还不完善,进度并不会随着视频的进度移动,也没有时间显示。
用slider绑定音量
这个和上面的音量基本相同,但是在写的时候还是遇到了一点小问题。Mediaelement的音量valume值大小为0到1,但是slider的值value(不管Minimum和Maximum、smallchange和largechange怎么设),value只能是整数。
private void slidervolume_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
mediaplayer.Volume = slidervolume.Value/10;
}
<Slider x:Name="slidervolume" Margin="1016,880,0,0" VerticalAlignment="Top" Orientation="Vertical" Minimum="0" Maximum="10" Header="音量" ValueChanged="slidervolume_ValueChanged" Height="76" Value="{Binding Element Name=mediaplayer,Path=Volume}"/>
第三部分
做完以上,突然找到了一个至强的AreTransportControlsEnabled,它能实现的功能包括:调节音量,完整的进度条功能,全屏,暂停/播放,把我做过的还没做的全做了。
但是还是把我写过的一点小东西挂上了。
下面简单的对上面的控件进行了排布,并把视频播放窗口设置为随着窗口大小变化,把我自己写的暂停/播放合二为一。