歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Windows Phone background Audio 後台音頻

Windows Phone 後台音頻的確不是什麼新鮮的話題了,但發現目前在WP平台的音頻播放應用多多少少會有一些瑕疵,所以在此給大家在此介紹下這個功能給有需要的朋友們。

升級到WP8必需知道的13個特性 系列文章目錄地址:http://www.linuxidc.com/Linux/2013-08/89003.htm

首先介紹下我們的應用在後台播放的機制 – BackgroundAgent.

在支持後台音頻的應用中為了避免混淆,前台後台播放器我們可以理解使用的都是系統核心提供的一個 BackgroundAudioPlayer 來進行播放不論應用是在前台還是後台, 或者也可以理解成它是系統播放控件的一個單件模式.

另外在後台操作音樂播放使用的是系統提供的 Universal Volume Control(UVC), 在開發時候要處理好BackgroundAgent相關邏輯否則會造成,播放停斷的情況。

後台播放音樂的應用程序分兩種

1. 將目標文件的Uri傳給 Zune media queue 進行播放,當然文件可以是本地或者網絡的,並且文件格式是要WP支持的類型才可以(支持 Windows Phone 媒體編解碼器)

2. 實現一個 MediaStreamSource 的音頻傳輸接口來提供任意格式的,同時也可以更好的包含文件的版權安全。

AudioPlayerAgent 由系統實例化,正如我之前說的更像是一個系統播放器的單例,實際上後台播放要繼承 AudioPlayerAgent 另外開發者需要自己實現其中的三個虛方法

OnUserAction(BackgroundAudioPlayer, AudioTrack, UserAction, Object)、OnPlayStateChanged(BackgroundAudioPlayer, AudioTrack, PlayState) 和 OnError(BackgroundAudioPlayer, AudioTrack, Exception, Boolean) 用來處理在應用中和後台的音樂切換工作。

 

另外就是剛才說到的 實現 MediaStreamSource 音頻流處理的音樂播放應用.

在這裡我們的音樂顯然不是來自一個本地或者遠程的URL而是來自我們的 AudioStreamingAgent 通過實現 OnBeginStreaming(AudioTrack, AudioStreamer) 虛方法的 AudioStreamer實例上調用 SetSource(MediaStreamSource) 來作用 Zune media queue 進行播放。

在這裡 您的 AudioStreamingAgent 是由 BackgroundAudioPlayer 自動調用實現的。創建代理之後,BackgroundAudioPlayer 在 AudioStreamingAgent 中調用 OnBeginStreaming(AudioTrack, AudioStreamer) 方法。這一切都是由系統自動調用 無需開發者代碼干預。

 

注:

AudioPlayerAgent 的實現必須在 30 秒內調用 NotifyComplete() 或 Abort()。

AudioStreamingAgent 的實現則允許無限時運行。

兩種類型的後台音頻代理都托管在同一進程中,並且共用最大限制為 15 MB 的內存。

換句話說如果你的音頻文件是在網絡上最好的做法是 AudioStreamingAgent 這樣既可以保證音樂的版權問題也可以解決網絡延時造成的播放問題。

Copyright © Linux教程網 All Rights Reserved