使用新的 MediaElement 在 .NET MAUI 应用中播放音频和视频

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://devblogs.microsoft.com/dotnet/announcing-dotnet-maui-communitytoolkit-mediaelement/

最受期待的 .NET MAUI 控件之一已发布;媒体元素。使用 MediaElement,您可以在 .NET MAUI 应用程序中轻松播放音频和视频,在这篇文章中,您将了解有关第一个版本以及我们对未来的计划的所有信息!

什么是MediaElement?

使用 MediaElement,您可以获得一个强大的控件,允许您在 .NET MAUI 应用内播放多媒体。

你可能已经从Xamarin社区工具包中知道MediaElement,它是由社区成员Peter Foot的出色工作添加的。虽然那个版本已经相当不错了,但它也有改进的余地,尤其是在Android上。

这就是为什么在将 MediaElement 移植到 .NET MAUI 时,我们从头开始重建了所有内容。通过这种方式,我们可以确保保留所有已经好的部分,同时改进可能需要一些爱的东西。

引擎盖下

对于Android,我们选择使用ExoPlayer作为平台对应物,取代我们用于Xamarin的Android MediaPlayer。通过这种方式,我们会自动获得许多开箱即用的额外功能,例如播放 HTTP 实时流 (HLS) 视频、美观的平台传输控件以及许多其他功能。

在iOS和macOS上,我们使用AVPlayer平台,就像我们在Xamarin的MediaElement上所做的那样。此外,Tizen 使用Tizen保持不变多媒体播放器

现在,.NET MAUI 建立在 WinUI 而不是 UWP 之上,我们在这里使用 WinUI 的全新 MediaPlayerElement。虽然此控件对于 WinUI 来说也很年轻,但它已经非常完整并且看起来很有前途。

对不同媒体格式的支持因平台而异(可能还有您安装的编解码器),但通过使用平台本机媒体播放器,我们为每个操作系统利用了所有功能和相关优化性能。

开始

开始使用MediaElement很容易。首先,您要安装社区工具包毛伊岛媒体元素NuGet 包。这是一个独立于主社区工具包包的软件包。

安装完成后,进入您的并将以下初始化行添加到:MauiProgram.csMauiAppBuilder

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        // Initialize the .NET MAUI Community Toolkit MediaElement by adding the below line of code
        .UseMauiCommunityToolkitMediaElement()
        // After initializing the .NET MAUI Community Toolkit, optionally add additional fonts, and other things
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        });

    // Continue initializing your .NET MAUI App here

    return builder.Build();
}

现在,您已准备好开始在您的应用程序中使用MediaElement!可以在下面找到 XAML 中的简单示例。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Class="MediaElementDemos.GettingStarted"
             Title="MediaElement Getting Started">

    <toolkit:MediaElement x:Name="mediaElement"
                      ShouldAutoPlay="True"
                      ShouldShowPlaybackControls="True"
                      Source="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
                      HeightRequest="300"
                      WidthRequest="400"
                      ... />
</ContentPage>

这会将 MediaElement 控件添加到加载视频时自动开始播放的页面,在 iOS 和 Windows 上运行此控件的结果如下所示。

在 Windows 和 iOS 上运行的 .NET MAUI 应用的屏幕截图,显示 MediaElement

在这篇博文中,我不会详细介绍第一个版本中已有的丰富功能,但有一件事需要指出。作为开发人员,您负责发布 MediaElement 资源。例如,应用可以在画中画模式下播放视频或在后台播放音频,在这些情况下,无法自动确定何时清理 MediaElement 资源。

这样做只需要一行代码。在下面的代码片段中,您可以看到当用户导航离开显示 MediaElement 控件的 时如何释放资源。ContentPage

public partial class FreeResourcesPage : ContentPage
{
    void ContentPage_Unloaded(object? sender, EventArgs e)
    {
        // Stop and cleanup MediaElement when we navigate away
        mediaElement.Handler?.DisconnectHandler();
    }
}

要了解有关MediaElement当前所有功能的更多信息,请查看文档页面进行深入研究。