1

我正在爲WP7製作音樂應用程序。它以小段的形式從我們的服務器下載音樂(每個音軌分爲128k加密段)。我使用AudioPlayerAgent和AudioStreamingAgent來下載,解密和播放音樂。WP7 BackgroundAudioPlayer僅在連接到調試器時播放

一切工作正常,而我通過F5從Visual Studio開始應用程序。當我從模擬器或設備上的菜單啓動應用程序時,除音樂未播放外,一切正常。 BackgroundAudioPlayer從不啓動。如果我嘗試調試或發佈版本,或者如果我在模擬器或實際設備(諾基亞Lumia 710和HTC HD7 Pro)上嘗試它,那麼不會改進。

我認爲,我所擁有的一切在AppManifest正確設置好的了:

<Capabilities> 
    <Capability Name="ID_CAP_GAMERSERVICES" /> 
    <Capability Name="ID_CAP_IDENTITY_DEVICE" /> 
    <Capability Name="ID_CAP_IDENTITY_USER" /> 
    <Capability Name="ID_CAP_LOCATION" /> 
    <Capability Name="ID_CAP_MEDIALIB" /> 
    <Capability Name="ID_CAP_MICROPHONE" /> 
    <Capability Name="ID_CAP_NETWORKING" /> 
    <Capability Name="ID_CAP_PHONEDIALER" /> 
    <Capability Name="ID_CAP_PUSH_NOTIFICATION" /> 
    <Capability Name="ID_CAP_SENSORS" /> 
    <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> 
</Capabilities> 
<Tasks>  
    <DefaultTask Name="_default" NavigationPage="Panorama.xaml" /> 
    <ExtendedTask Name="BackgroundTask"> 
    <BackgroundServiceAgent Specifier="AudioPlayerAgent" Name="AudioPlaybackAgent1" Source="AudioPlaybackAgent1" Type="AudioPlaybackAgent1.AudioPlayer" /> 
    <BackgroundServiceAgent Specifier="AudioStreamingAgent" Name="AudioStreamAgent1" Source="AudioStreamAgent1" Type="AudioStreamAgent1.AudioTrackStreamer" /> 
    </ExtendedTask> 
</Tasks> 

一些研究,我發現我可以啓用隱藏控制檯模擬器看到調試日誌後。我試圖跟蹤從模擬器菜單啓動應用程序時發生的情況。在點BackgroundAudioPlayer應該開始播放曲目以下消息appers:

PID:0E8500C6 TID:0EEE006A Sentinels are Disabled for all processes.PID:0E8500C6 TID:0EC500DE Exception 'Raised Exception' (0xc0008005): Thread-Id=0ec500de(pth=c0654930), Proc-Id=0e8500c6(pprc=c05f3160) 'HeadlessHost.exe', VM-active=0e8500c6(pprc=c05f3160) 'HeadlessHost.exe' 
PID:0E8500C6 TID:0EC500DE PC=42a629f7(mscoree3_7.dll+0x000529f7) RA=42ac3ae5(mscoree3_7.dll+0x000b3ae5) SP=0634f6b8, BVA=00000000 

我也試過在MarketplaceTestKit測試應用程序,如果任何不支持的API是導致它,但應用程序通過了所有測試的罰款。

所以我的問題是:有人知道,而應用程序只在連接到調試器時才播放嗎?

謝謝你,

+0

我認爲我找到了解決方案。這裏:http://goo.gl/baiCN是這樣編寫的: - 這兩種類型的背景音頻代理託管在同一個進程中,共享最大內存限制爲15 MB。 - 在調試器下運行時,Windows Phone操作系統會忽略內存和運行時間限制。 在我的應用程序中,我使用循環緩衝區來存儲解密和解碼的PCM數據進行播放,但此緩衝區已超過10 MB。所以當我將這個緩衝區設置的更小時,當調試器未連接時,應用程序開始播放音頻。 希望這會幫助別人, Ragards,Jan ... – jano 2012-03-15 09:36:47

回答

1

您應該只有一種類型的後臺音頻代理的在您的應用程序。
根據您對如何獲取曲目的描述,似乎使用流媒體代理將會更合適。
如果您直接播放每個片段(將它視爲單獨的曲目),並且在片段(曲目)之間切換時不存在空隙問題,那麼您可以使用播放代理。

指定了多個背景音頻代理會導致您的應用程序崩潰。注意。您必須直接編輯WMAppManifest文件以刪除不需要的文件。

+0

嗨,感謝您的回覆。我從MSDN代碼示例和http://goo.gl/bX4nm中查看了背景音頻流式樣本。 AudioStreamer爲BackgroundAudioPlayer下載並解碼段和解碼PCM數據。我再次檢查了Microsofts的Background Audio Streamer Sample,他們在清單中也有這兩個BackgroundServiceAgent任務。正如我在對我的問題的評論中所提到的,問題在於拖纜中的解碼PCM數據的緩衝區太大。後臺音頻代理(流媒體播放器)不能超過15MB的內存。 – jano 2012-03-15 10:51:07

相關問題