2014-03-04 79 views
0

我使用OpenAL在我的NPAPI插件(瀏覽器插件)中播放來自網絡流媒體的聲音。當我打開多個瀏覽器的選項卡時,我關閉了其中一個選項卡,其他人的聲音也消失了。任何人都可以給我一些幫助?或者任何人都可以給我一些關於播放音頻流的建議,比如來自麥克風或其他設備的音頻。當我使用音頻隊列服務時,它仍然不能支持多個實例。出於工作原因,我無法將我的代碼粘貼到那裏,對此抱歉。我使用的OpenAL某種程度上成爲蘋果的開發者的榜樣 - oalTouch,鏈接 https://developer.apple.com/library/ios/samplecode/oalTouch/Introduction/Intro.htmlOpenAL播放聲音,dealloc一個實例,所有其他的聲音dispeared?

我用系統默認的設備播放的聲音,這意味着我用alcOpenDevice(NULL)打開設備。

回答

0

現在我找到了原因。 OpenAL支持多音頻源,但是當我將它用作oalTouch示例時,我沒有更改任何內容。爲什麼我關閉了一個瀏覽器的選項卡,聲音停止是因爲我在銷燬插件實例時關閉了設備。所以如果我想在多個實例中使用它,我應該仔細設計它,這是我的設計:我使用靜態var來指示默認設備是否打開,如果打開,我不會再打開它(使用alOpenDevice (NULL)方法)。但對於不同的選項卡,我使用不同的sourceId(使用alGenSource(...)方法)。當我關閉瀏覽器的teb時,插件實例也被銷燬。我使用靜態變量來檢查是否還有插件實例使用默認音頻設備,如果是,則不做任何操作,否則關閉設備。

0

當您的插件頁面關閉時,插件的相應實例被銷燬;每個插件有一個實例在瀏覽器中同時處於活動狀態。據推測,問題在於你在插件實例拆解中做了一些事情,導致全局性的東西被摧毀。

不能看到任何關於你的代碼正在做什麼,很難看出任何人都可以幫助弄清楚那是什麼。

+0

我可以找到關於OpenAL的一些資源,我只是使用蘋果的例子(oalTouch)。不,我找到了原因 - 這是因爲在我的每個插件實例中,我都使用了它自己的openAL對象,但是它在設計時會打開默認音頻設備,並在釋放時關閉設備。我應該檢查設備的狀態,並使用不同的sourceId來區分不同的插件實例。當沒有其他插件使用該設備時,關閉它。這些更改後,它現在支持多個選項卡。謝謝你的回答。 –