MP3、MP4的文件选择及播放

时间:2024-03-27 20:06:32

项目主页网址如下:

https://github.com/Judylalala/en

####技术问题1:如何播放音频(MP3)、视频(MP4)?

####解决过程1:我首先想到了XMAL插件中的MediaPlayerElement,虽然官网相对于MediaElement而言,更推荐功能较多的MediaPlayerElement,但因为但在实际应用过程中遇到了下图所示的问题,所以使用了MediaElement。在使用的过程中发现了可以通过设置AreTransportControlsEnabled=True来自主控制视频或音频的播放、音量、缩放等。

MP3、MP4的文件选择及播放

我找到的代码如下:

<MediaElement Source="/Assets/ladybug.wmv"
MaxWidth="400"
AutoPlay="False"
AreTransportControlsEnabled="True" />

联系到之后要能够通过点击按钮在本地文件中选择MP3、MP4文件播放,根据我找到的网站:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement

我做的修改如下:

<MediaElement x:Name="mediaPlayer"
                          Source="/Assets/20170414_175108_01618.mp4"
                          MaxWidth="400"
                          AutoPlay="False"
                          AreTransportControlsEnabled="True"
                          Margin="78,70,100,70"/>
            <Button Content="Choose" Click="Button_Click"/>

其中为该控件添加了名字,以便后期通过这个名字来播放视频或音频。

同时添加了一个按钮,以便后期为这个按钮添加事件,通过点击按钮来选择本地文件。

####技术问题2:如何在本地选择MP3、MP4文件进行播放?

####解决过程2:我是真的一点头绪都没有,正好看见这个网址里面貌似有需要的代码,就copy了一下:

https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement

由于题目要求只能选择MP3、MP4文件来播放,所以我对代码做了一下修改,代码如下:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await SetLocalMedia();
}

这段代码意味着当点击按钮的时候,执行SetLocalMedia()函数,该函数具体定义如下:

async private System.Threading.Tasks.Task SetLocalMedia()
{
    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

openPicker.FileTypeFilter.Add(".mp4");
    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();
    }
}

SetLocalMedia()函数指定了可以打开的文件类型、并将锁打开的文件通过名为mediaPlayer的控件播放出来。

其中字体不同且放大的部分便是经过修改后的代码,它指定了能够从本地文件中打开的类型是.mp3、.mp4。

最后做出来的成果如下图:

MP3、MP4的文件选择及播放