您好,登錄后才能下訂單哦!
媒體應(yīng)用程序比其他應(yīng)用程序更受益于與本地平臺一起工作。有些事情,比如處理音頻焦點(diǎn)的中斷、網(wǎng)絡(luò)連接以及通知和其他回放控件之間的通信,這是一件復(fù)雜的事情。
為使Xamarin開發(fā)訪問這些本地平臺的功能,我們決定建立一個(gè)跨平臺的Xamarin插件,抽象了困難。我們使用誘餌和開關(guān)模式創(chuàng)建了一個(gè)可移植類庫,它包含了本機(jī)代碼的所有接口,在應(yīng)用程序中共享基類,使你盡可能輕松地在你的手機(jī)應(yīng)用程序中與音頻和視頻交互。
Xamarin媒體管理插件 設(shè)計(jì)簡單易用,具有以下特點(diǎn):
從遠(yuǎn)程和本地源本地播放媒體文件
本地媒體通知和遠(yuǎn)程控件
播放狀態(tài)(播放、緩沖、加載、暫停、進(jìn)度)
最重要的是,媒體管理支持所有平臺的插件, 包括iOS, Android, UWP, macOS, tvOS,甚至Xamarin.Forms。在這篇博客中,我們將探討Xamarin的媒體管理插件的各種組件和如何可以輕松地集成到您的移動應(yīng)用程序。
在玩視頻,你的眼睛和耳朵都會用。播放音頻時(shí),您正在收聽,但也可以同時(shí)使用不同的應(yīng)用程序。每個(gè)用例有不同的設(shè)計(jì)。
音頻播放器并不總是需要用戶界面可見的。一旦開始播放音頻,播放器就可以作為后臺任務(wù)運(yùn)行。用戶可以切換到另一個(gè)應(yīng)用程序,并在繼續(xù)監(jiān)聽的同時(shí)工作。
播放音頻只需要一行代碼,并為您處理所有這些操作:
點(diǎn)擊(此處)折疊或打開
await CrossMediaManager.Current.Play("http://www.montemagno.com/sample.mp3");
ExoPlayer 是公開低級Android音頻API的開源庫。ExoPlayer支持高性能功能比如DASH 和HLS流,這些在MediaPlayer中是不可用的。您可以自定義代碼的能力,使得它很容易添加新的組件。ExoPlayer只能與Android版本4.1和更高版本一起使用。
利用ExoPlayer,在`MainActivity`中添加下面的代碼 :
點(diǎn)擊(此處)折疊或打開
((MediaManagerImplementation)CrossMediaManager.Current).MediaSessionManager = new MediaSessionManager(Application.Context, typeof(ExoPlayerAudioService));
var exoPlayer = new ExoPlayerAudioImplementation(((MediaManagerImplementation)CrossMediaManager.Current).MediaSessionManager);
CrossMediaManager.Current.AudioPlayer = exoPlayer;
視頻應(yīng)用程序需要一個(gè)窗口來查看內(nèi)容。由于這個(gè)原因,視頻應(yīng)用程序通常在一個(gè)屏幕上實(shí)現(xiàn)。
點(diǎn)擊(此處)折疊或打開
CrossMediaManager.Current.Play("https://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4", MediaFileType.Video);
一個(gè)精心設(shè)計(jì)的媒體應(yīng)用程序應(yīng)該與其他播放音頻的應(yīng)用程序“配合得很好”。它應(yīng)該準(zhǔn)備分享手機(jī),并與其他應(yīng)用程序在您的設(shè)備上使用音頻。它還應(yīng)該對設(shè)備上的硬件控制作出響應(yīng),包括:
當(dāng)用戶調(diào)整硬件音量控制時(shí)更改音量
如果耳機(jī)在使用中斷開,請停止播放。
當(dāng)另一個(gè)應(yīng)用接管音頻輸出流時(shí),停止播放,或者降低音量。
媒體按鈕是在Android設(shè)備和其他外圍設(shè)備上找到的硬件按鈕;例如,藍(lán)牙耳機(jī)上的暫停/播放按鈕。
如果您想播放一系列媒體條目,那么有一個(gè)隊(duì)列是有幫助的。將媒體文件列表添加到隊(duì)列中,簡單地CrossMediaManager.Current.Play() 模擬器MediaFiles。排隊(duì),您可以重新洗牌和重復(fù)播放,循環(huán)通過某些媒體文件,等等。
可以通過以下方式訪問隊(duì)列:
點(diǎn)擊(此處)折疊或打開
var queue = CrossMediaManager.Current.MediaQueue;
媒體信息
媒體文件包含大量關(guān)于該文件的信息??梢詮脑獢?shù)據(jù)中提取標(biāo)題、專輯、藝術(shù)家等更多細(xì)節(jié)。使用MediaManager非常容易實(shí)現(xiàn):
點(diǎn)擊(此處)折疊或打開
CrossMediaManager.Current.MediaFileChanged += (object sender, MediaFileChangedEventArgs e) => {
var artist = e.File.Metadata.Artist;
// Access any other metadata property through the file
};
MediaManager能夠使用本地應(yīng)用,也可以用在Xamarin.Forms應(yīng)用,通過在本地視頻視圖中的一個(gè)自定義渲染器實(shí)現(xiàn):
點(diǎn)擊(此處)折疊或打開
<forms:VideoView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
Source="YourVideoFile" AspectMode="AspectFill" />
確保在開始播放之前在你的平臺代碼中調(diào)用VideoViewRenderer.Init(),否則視圖將不會準(zhǔn)備播放視頻。
即使 Hanselman App 運(yùn)行在MediaManager,要感謝 Erlend Angelsen! 利用媒體管理的實(shí)施,該應(yīng)用程序現(xiàn)在改進(jìn)了音頻播放,但更令人興奮的是,漢塞爾曼的影片從通道 9在應(yīng)用程序是可用的!它也使用通知來控制當(dāng)前媒體的播放。在將來,這將擴(kuò)展到使用隊(duì)列和其他高級功能。要獲取這個(gè)應(yīng)用的更多信息,可以從 James Montemagno‘s Github repository檢出代碼。
這里還有一些其它Xamarin MediaManager的樣例可用,包括:
MvvmCross
Xamarin.Forms
Simple
開始,你首先要做的是 從NuGet下載插件 并將MediaManager安裝到每一個(gè)工程中。
如果你想了解更多關(guān)于媒體播放,請務(wù)必跟隨我在Twitter上 @mhvdijk 接收更新。未來的計(jì)劃包括為Android Auto,Chromecast,CarPlay支持,輸出源,如藍(lán)牙、電視之間的無縫切換,或DLNA。如果你有想法,發(fā)現(xiàn)錯(cuò)誤,或者想幫助開發(fā),請確保從 GitHub下載源代碼。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。