媒体应用程序比其他应用程序更受益于与本地平台一起工作。有些事情,比如处理音频焦点的中断、网络连接以及通知和其他回放控件之间的通信,这是一件复杂的事情。

为使Xamarin开发访问这些本地平台的功能,我们决定建立一个跨平台的Xamarin插件,抽象了困难。我们使用诱饵和开关模式创建了一个可移植类库,它包含了本机代码的所有接口,在应用程序中共享基类,使你尽可能轻松地在你的手机应用程序中与音频和视频交互。

 Xamarin媒体管理插件 设计简单易用,具有以下特点:

  • 从远程和本地源本地播放媒体文件
  • 本地媒体通知和远程控件
  • 播放状态(播放、缓冲、加载、暂停、进度)

最重要的是,媒体管理支持所有平台的插件, 包括iOS, Android, UWP, macOS, tvOS,甚至Xamarin.Forms。在这篇博客中,我们将探讨Xamarin的媒体管理插件的各种组件和如何可以轻松地集成到您的移动应用程序。

音频

在玩视频,你的眼睛和耳朵都会用。播放音频时,您正在收听,但也可以同时使用不同的应用程序。每个用例有不同的设计。

音频播放器并不总是需要用户界面可见的。一旦开始播放音频,播放器就可以作为后台任务运行。用户可以切换到另一个应用程序,并在继续监听的同时工作。

播放音频只需要一行代码,并为您处理所有这些操作:

点击(此处)折叠或打开

  1. await CrossMediaManager.Current.Play("http://www.montemagno.com/sample.mp3");


Android Exo播放器

ExoPlayer 是公开低级Android音频API的开源库。ExoPlayer支持高性能功能比如DASH 和HLS流,这些在MediaPlayer中是不可用的。您可以自定义代码的能力,使得它很容易添加新的组件。ExoPlayer只能与Android版本4.1和更高版本一起使用。

利用ExoPlayer,在`MainActivity`中添加下面的代码 :

视频

视频应用程序需要一个窗口来查看内容。由于这个原因,视频应用程序通常在一个屏幕上实现。

点击(此处)折叠或打开

  1. CrossMediaManager.Current.Play("https://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4", MediaFileType.Video);


The video player for the MediaManager Plugin for Xamarin.

通知

一个精心设计的媒体应用程序应该与其他播放音频的应用程序“配合得很好”。它应该准备分享手机,并与其他应用程序在您的设备上使用音频。它还应该对设备上的硬件控制作出响应,包括:

  • 当用户调整硬件音量控制时更改音量
  • 如果耳机在使用中断开,请停止播放。
  • 当另一个应用接管音频输出流时,停止播放,或者降低音量。

媒体按钮是在Android设备和其他外围设备上找到的硬件按钮;例如,蓝牙耳机上的暂停/播放按钮。


AndroidNotification    iOSNotification

Audio controls on a TV with the MediaManager Plugin for Xamarin.

排队音频和视频

如果您想播放一系列媒体条目,那么有一个队列是有帮助的。将媒体文件列表添加到队列中,简单地CrossMediaManager.Current.Play() 模拟器MediaFiles。排队,您可以重新洗牌和重复播放,循环通过某些媒体文件,等等。

可以通过以下方式访问队列:

点击(此处)折叠或打开

  1. var queue = CrossMediaManager.Current.MediaQueue;


媒体信息

媒体文件包含大量关于该文件的信息。可以从元数据中提取标题、专辑、艺术家等更多细节。使用MediaManager非常容易实现:

Xamarin.Forms

MediaManager能够使用本地应用,也可以用在Xamarin.Forms应用,通过在本地视频视图中的一个自定义渲染器实现:

点击(此处)折叠或打开

  1. <forms:VideoView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
  2.                      Source="YourVideoFile" AspectMode="AspectFill" />


确保在开始播放之前在你的平台代码中调用VideoViewRenderer.Init(),否则视图将不会准备播放视频。

MediaManager在行动:Scott Hanselman应用!

即使 Hanselman App 运行在MediaManager,要感谢 Erlend Angelsen! 利用媒体管理的实施,该应用程序现在改进了音频播放,但更令人兴奋的是,汉塞尔曼的影片从通道 9在应用程序是可用的!它也使用通知来控制当前媒体的播放。在将来,这将扩展到使用队列和其他高级功能。要获取这个应用的更多信息,可以从 James Montemagno‘s Github repository检出代码。

The official app of Scott Hanselman, using the MediaManager Plugin for Xamarin.

结束语

这里还有一些其它Xamarin MediaManager的样例可用,包括:


开始,你首先要做的是 从NuGet下载插件 并将MediaManager安装到每一个工程中。


如果你想了解更多关于媒体播放,请务必跟随我在Twitter上 @mhvdijk 接收更新。未来的计划包括为Android Auto,Chromecast,CarPlay支持,输出源,如蓝牙、电视之间的无缝切换,或DLNA。如果你有想法,发现错误,或者想帮助开发,请确保从 GitHub下载源代码。