NAudio 使用心得

一直作得比較多的是Web,客戶端一直接觸的比較少,如今由於組內有歷史產品是用Winform寫的,在開發過程當中遇到些坑介紹下。
想看NAudio使用介紹的同窗能夠直接跳到方案二html

應用背景和需求:

Winform中嵌套了webbrowser用來顯示聊天信息,Winform用計時器主動拉服務器新消息後直接生成html添加到webbrowser。html5

如今從服務器獲取的消息類型中增長了語音類型。語音類型消息爲json格式,包含語音文件url地址、語音長度、智能翻譯信息。web

實現思路:

方案一、直接在webbrowser中生成html5 audio標籤,使用瀏覽器的播放功能

方案二、在webbrowser中生成連接,使用window.external.XXXXX調用Winform程序內的組件播放語音

方案一嘗試過程

webbrowser的內核默認使用的是最低版本的IE,也就是IE六、7,衆所周知對html5是妥妥不支持的。chrome

好在原來接觸過第三方插件html5media.js,在低版本IE的狀況下,能夠將audio標籤替換成object標籤,並使用內置的Flowplayer Flash插件進行播放,通過測試,低版本IE果真是支持的。json

部署方法:直接在webbrowser頭部增長對html5media.js的引用,注意:內網環境須要本身下載插件部署到本身的服務器上,不能直接使用官網CDN的地址。安裝方法就是無腦拷貝整個文件夾過去就好了,不要遺漏了內置的flowplayer.swf等組件。瀏覽器

在IE中先測試運行,直接報沙箱錯誤,沒法訪問flowplayer.swf,搜索了一下,把本地測試文件部署了IIS測試站點,訪問正常了,找了一個MP3文件能夠完美播放。服務器

因爲公司的語音文件格式是aac的,因此我拿實際語音文件測試,發現flowplayer不能支持aac文件。。。。。。。。。。好吧,你贏了。測試

兼容插件看來用不了了,要不直接把webbrowser內核替換成Chrome內核呢?url

網上有不少現成的插件,嘗試了Gecko和Cef,Gecko的碼完以後發現仍然不支持audio標籤,內核的確是chrome,Cef看其它網友說對audio標籤也不支持,我就果斷放棄了。插件

方案一走不通。

方案二嘗試過程

.NET搜索Winform播放語音,第一個插件就是NAudio。目前版本到1.8,GitHub開源

能夠直接nuget安裝,包安裝管理命令行輸入install-package NAudio便可安裝。因爲個人項目代碼是Framework2.0,Nuget提示我項目Framework過低。

無奈最近一個支持Framework2.0的版本是1.6,因而install-package NAudio -version 1.6,NAudio是一個至關乾淨的插件,除了他本身的NAudio.dll沒有加入任何其它依賴的dll文件,根據源碼看,主要應該都是調用的system32下的dll。

OK,試驗一下播放MP3文件,沒問題。

試驗一下播放AAC文件,不行。。。查詢官網,須要Media Foundation Transforms,只有Win7以上支持,並且只有NAudio 1.7以上支持

無奈,想到了一個hack方法,經過另外一個安裝了Media Foundation組件winserver 2012服務器IIS站點做爲中轉,使用NAudio將語音轉換爲wav格式後,發送給客戶端使用。

試了下,果真能夠了!試着部署到測試服務器,運行報錯

須要安裝組件media foundation,安裝後還報錯

想到多是測試服務器到語音url連接不通,嘗試換了一個url,在服務器上直接訪問經過後,再嘗試運行報另一個錯

應該是因爲server2012不支持url讀取語音文件致使,使用webclient先下載下來後再從本地讀取,而後刪除文件

測試成功!

參考文檔

https://www.codeproject.com/articles/501521/how-to-convert-between-most-audio-formats-in-net

http://stackoverflow.com/a/18333982/7706556

Media Foundation Transforms

相關文章
相關標籤/搜索