Воспроизведение аудио и видео в приложениях .NET MAUI с новым MediaElement

Воспроизведение аудио и видео в приложениях .NET MAUI с новым MediaElement
Photo by dlxmedia.hu / Unsplash

Выпущен один из самых ожидаемых элементов управления для .NET MAUI - MediaElement. С помощью MediaElement вы можете легко воспроизводить аудио и видео из своего приложения .NET MAUI. В этом посте вы узнаете все, что вам нужно знать о первой версии и о планах на будущее элемента! MediaElement является частью .NET MAUI Community Toolkit, библиотеки, созданной сообществом, которая поддерживается замечательными разработчиками по всему миру как из сообщества, так и из Microsoft.

Что такое MediaElement?

С MediaElement вы получаете мощный контрол, который позволяет воспроизводить мультимедиа внутри вашего приложения .NET MAUI.

Возможно, вы уже знакомы с MediaElement из Xamarin Community Toolkit, куда он был добавлен благодаря замечательной работе члена сообщества Питера Фута. Хоть эта версия уже была довольно хороша, в ней также было место для улучшений, особенно для Android.

Вот почему при переносе MediaElement на .NET MAUI мы перестроили все с нуля. Таким образом, мы могли сохранить все то, что уже хорошо, и улучшить то, что требуется.

Под капотом

Для Android мы решили использовать ExoPlayer в качестве аналога платформы, заменив Android MediaPlayer, который мы использовали для Xamarin. Таким образом, мы автоматически получаем множество дополнительных функций, доступных нам из коробки, таких как воспроизведение видео HTTP Live Streaming (HLS), великолепные транспортные контролы и многое другое.

В iOS и macOS мы используем платформу AVPlayer, как и в случае с Xamarin MediaElement. Также не изменился Tizen, используется Tizen.Multimedia.Player.

Теперь, когда .NET MAUI строится поверх WinUI, а не UWP, мы используем новый MediaPlayerElement. Хотя этот элемент управления достаточно новый в WinUI, он уже достаточно совершенен и выглядит многообещающе.

Поддержка различных медиаформатов различается в зависимости от платформы (и, возможно, от того, какие кодеки вы установили), но, используя собственные медиаплееры платформы, мы используем всю мощь и связанную с этим оптимизированную производительность для каждой операционной системы.

Приступаем к работе

Начать работу с MediaElement очень просто. Сначала вам нужно установить пакет NuGet CommunityToolkit.Maui.MediaElement. Это отдельный пакет от основного пакета Community Toolkit.

После установки nuget пакета, откройте MauiProgram.cs и добавьте следующую строку инициализации в MauiAppBuilder:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        // Инициализируйте .NET MAUI Community Toolkit MediaElement добавив код ниже
        .UseMauiCommunityToolkitMediaElement()
        // После инициализации .NET MAUI Community Toolkit, при желании, добавьте дополнительные шрифты и другие вещи
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        });

    // Продолжаем инициализировать .NET MAUI приложение

    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 можно увидеть ниже.

MediaElement в действии
MediaElement в действии

В этом посте я не буду вдаваться в подробности о богатых функциях, которые уже есть в первой версии, но важно отметить одну вещь. Вы, как разработчик, несете ответственность за выпуск ресурсов MediaElement. Например, приложение может воспроизводить видео в режиме «картинка в картинке» или воспроизводить звук в фоновом режиме, в этих сценариях невозможно автоматически определить, когда следует очищать ресурсы MediaElement.

Для этого требуется всего одна строка кода. В приведенном ниже фрагменте кода вы можете увидеть, как ресурсы освобождаются, когда пользователь уходит от страницы ContentPage, на которой отображается элемент управления MediaElement.

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

Чтобы узнать больше обо всех текущих функциях MediaElement, ознакомьтесь с подробной информацией на странице документации.