服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

轻松在 MAUI 应用中播放音视频,MediaElement 现已发布!

日期: 来源:微软开发者MSDN收集编辑:Gerald Versluis

点击上方蓝字

关注我们

(本文阅读时间:9分钟)


由于昨天文章出现了一些纰漏,我们已更新后重新发布,还请各位粉丝见谅!

最受期待的 .NET MAUI 控件之一:MediaElement 现已发布。有了 MediaElement,您可以轻松地在 .NET MAUI 应用程序中播放音频和视频,在这篇文章中,您将了解到有关 MediaElement 第一个版本的所有信息以及我们对未来的计划!MediaElement 是 .NET MAUI Community Toolkit 的一部分,这是一个社区创建的库,受到来自全球社区和 Microsoft 的优秀开发人员的支持。


  • .NET MAUI Community Toolkit

    https://github.com/communityToolkit/Maui/



什么是 MediaElement?


有了 MediaElement,您就有了强大的控件,从而可以在 .NET MAUI 应用程序中播放多媒体。

得益于社区成员 Peter Foot 的出色工作,您可能已经从 Xamarin 社区工具包中了解到了 MediaElement。虽然那个版本已经很不错了,但它还有改进的空间,尤其是在 Android 上。

这就是为什么在将 MediaElement 移植到 .NET MAUI 时,我们从基层重建了所有内容。这样我们就可以在保留所有已经很好的部分的同时做一些改进。

▌底层逻辑

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

针对 iOS 和 macOS,我们使用 AVPlayer 平台,就像我们在 Xamarin 的 MediaElement 上所做的那样。此外,Tizen 仍然使用 .Tizen.Multimedia.Player。

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

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

  • WinUI MediaPlayerElement

    https://learn.microsoft.com/windows/apps/design/controls/media-playback?ocid=AID3052907



入门


想要开始使用 MediaElement 很容易。首先,你要安装CommunityToolkit.Maui.MediaElement NuGet 包。这是一个独立于主要社区工具包的包。

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

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 上运行后的效果如下所示。

在这篇文章中,我不打算详细介绍第一个版本中已有的丰富功能。但有一件事我要提醒大家,作为开发人员,大家肩负释放 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 现阶段全部功能,请查看此文档页面进行深入研究 documentation page。

  • CommunityToolkit.Maui.MediaElement NuGet 包

    https://nuget.org/packages/CommunityToolkit.Maui.MediaElement

  • documentation page
    https://learn.microsoft.com/dotnet/communitytoolkit/maui/views/mediaelement?ocid=AID3052907


MediaElement 的未来


首先,我要非常感谢社区成员,他们不仅帮助将此控件放入 .NET MAUI 社区工具包中,而且还帮助我们构建其他功能。如果您还没有拉取过这个控件,可以试试。

在这个初始版本中,我们注重核心功能,也重视保证其可靠性。然而今后我们可以开始添加各种便利用户的功能!

我们常听到的一个用户心声是希望应用能支持全屏视频播放。我们听到了你们的心声!然而,很可惜,要实现这点并不像表面看起来那么简单。在工具包存储库页面上有一个相关话题讨论 discussion,您可以随时发表自己的意见!

您还可以将功能诉求填在 feature request。我收到了包括希望有播放列表、能够播放 DRM 多媒体、字幕支持以及允许自置自定义 HTTP 标头等诉求。可以看看您的诉求已经包含在讨论意见中,如果没有,可以尽可能的仔细描述并提交自己的诉求。

我们期待看到更优化的由多媒体驱动的 .NET MAUI 应用项目!

  • discussion
    https://github.com/CommunityToolkit/Maui/discussions/929
  • feature request

    https://github.com/CommunityToolkit/Maui

*未经授权请勿私自转载此文章及图片。

扫码前往官方博客,了解更多内容。
喜欢记得分享哦~

相关阅读

  • 用 .NET 启动你的 DJI Ryze Tello 无人机

  • 点击上方蓝字关注我们(本文阅读时间:15分钟)大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选。通过 UDP 协议调用 DJI R
  • 简洁高效神级开发者工具,墙裂推荐~!

  • “设为星标”第一时间接收推送,精彩内容不容错过!He3He3是一款面向现代开发人员的工具箱,没错,它的名字就如同产品本身一样简洁,至于功能,实在是太强大了,请跟随小编一起慢慢往下看
  • 开设社区论谈——打造共商共治新模式

  • 欢迎各位光临云湖社区打造的共商共治新模式——“云湖论谈”,今天正式开启论谈第一期,本期话题是“办公用房怎么用?”,请大家畅所欲言,建言献策!2月14日,随着转塘街道云湖社区党委
  • 浅谈前端组件设计

  • 为何要进行前端组件设计? 与仅承担数据处理逻辑的后端不同,前端需要负责界面渲染、数据处理、和接口调用,在框架诞生前,更多地是编写页面维度的顺序脚本代码。随着前端继续的持
  • 微信 JS-SDK 出发,一起了解JSBridge的神奇功能

  • 前言前段时间由于要实现 H5 移动端拉取微信卡包并同步卡包数据的功能,于是在项目中引入了 **`微信 JS-SDK(jweixin)`**[1] 相关包实现功能,但也由此让我对其产生了好奇心,于是打
  • 亏损严重,但挡不住Meta继续更新Quest功能

  • 来自科技产业媒体《TechCrunch》的消息显示,Meta 旗下 Quest VR 头显正式上线新功能。此次更新内容包括一项名为“直接触摸(Direct Touch)”的测试功能,用户启用该功能后可以像

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • VS Code Spring 全新功能来了!

  • 点击上方蓝字关注我们(本文阅读时间:6分钟)大家好,欢迎来到我们 2023 年的第一篇博客!我们想与您分享几个与 Spring 插件、代码编辑和性能相关的激动人心的更新,让我们开始吧!Spri
  • 承前启“新”:2022年女性长篇小说创作回顾

  • 读提示 近年来女性写作广受关注,这既得益于图书市场和舆论空间对女性议题的持续关注,也离不开女性作家孜孜不倦的创作。2022年尤其是女性长篇小说的丰收之年,在这一年里,不同
  • 一个跨平台执行外部命令的 C# 开源库

  • 点击上方蓝字关注我们(本文阅读时间:5分钟)转载自编程乐趣对于我们程序员来说,在日常开发项目中,调用外部的命令是非常常见的,比如调用批处理命令、调用其他应用,这里面就涉及到进
  • 一文读懂函数编程及其工作原理

  • 点击上方蓝字关注我们(本文阅读时间:8分钟)微软MVP实验室研究员马洪喜-微软 MVP19年研发经验云计算咨询顾问专家容器云及基础架构云技术专家DevOps 及微服务咨询专家什么是函数