本文主要分享了在手機平台進行音頻流媒體開發應用的一些經驗,內容主要譯自Werner Ruotsalainen的《The Radio Stream Transcoding Bible 》原文地址,穿插了本人在一些粗淺的開發體會,相信對大家的手機流媒體開發和應用有所協助和啟發:)
隨著移動流量資費越來越少,網路電台越來越多,在手機上收聽網路電台成為一種很有價值的應用。本文介紹了
一些實踐;
1. 能用同樣的頻寬獲得完美的音質
2. 能在保持同樣音質的前提下大大節省你的流量費用。
3. 更省電,因為2.5G比3G更省電
4. 能讓你聽到一些由於網路或作業系統限制而從沒想到過的電台
5. 能讓管理電台收藏更容易,你不需要在不同的電台程式之間切換,而其實它們的協議都差不多。
本文是我的《多媒體聖經》的一部分,這書下個月就會出版,而在下一版的多媒體聖經裡我會推出《視頻流媒體
開發指南》(k歌:作者食言了,我們到現在還沒等到,呵呵)
這部指南跟我其他的多媒體開發文章一樣都是跨平台的,如果你僅僅是名WM或者Symbian開發人員,也應該瞭解一
些其他平台的的多媒體開發特性。你有WM/SYMBIAN兩部測試機是最好的了,比如我一般會使用NOKIA N95用於我
的主要的娛樂和網頁瀏覽、郵件收發和通訊,為什麼呢,因為與任何的WM手機相比,因為它強大的A2DP品質,內
置的立體聲擴音器,輕巧的機身和不錯的待機時間;相比而言,我另外一部基於Pocket PC的HTC Oxygen(S310)
就顯得笨重如磚頭了,不過因為比較便宜而且它的強大的電話錄音功能,我經常把它放在我的褲子口袋裡。
另外,我也計划去瞭解Palm系統,因為我的Tungsten T3手機沒有WiFi卡(k歌:這哥們手機還真多..),所以我
沒法在上面測試流媒體。如果你有不用的Wi-Fi卡可以寄給我,如果你在歐洲就更方便了。畢竟,Palm系統的
Pocket Tunes是超級好的音頻播放器。
介紹
在收聽廣播電台時,你肯定會碰到沒法收聽某個電台的情況,解決的方法請看下文
1.1 當一個網路廣播電台你完全聽不了
首先我們來看看為什麼你的手機無法播放那個電台。
1. 你的連線速度不足以正確的播放流。比如你要在標準GPRS網路裡收聽一個64 kbps的電台,而你的網路連
接無法超過43kbps。在這種情況下,無論你使用多大的緩衝都難以避免嚴重地停頓。這樣的現象在你不用3G網路
時不會得到改善。即使你手機支援3G而且也有必要的訊號,你可能還是會選擇禁用3G而回去用GPRS。最重要的原
因就是當前的3G模組太耗電了,即使是高端的WM HTC Kaiser或者Nokia N95。
在上述情況下,你肯定想採用一些方法來降低這些音頻流的位元速率。利用現有技術,你可以把FM品質的立體
聲音樂壓縮到24 kbps,我不是開玩笑!
請注意,本文假定你只有GPRS串連,不幸的是一些GSM電訊廠商堅持GPRS+3G架構,而拋棄了2.75G和EDGE技術(
譯者:本文寫於08年初,現在國內EDGE網路已經很普遍了:))。而EDGE網路有高速度(最多236 kbps,對網路廣
播來說足夠了)和低能耗,據我瞭解與GPRS相近。
2. 你要聽的是RTSP流,而電訊廠商不支援直接的互連網串連( k歌:你用的是cmwap存取點,應該選用cmnet
介入,cmnet相當於你的手機有一個單獨的外網IP,而cmwap需要代理服務器)。他們使用防火牆和NAT技術,使
流媒體伺服器根本不能串連到手機。不幸的是,世界上60%的GSM電訊廠商是這樣做的。
不幸的是,很多網路電台採用RTSP協議。最重要的是,在Symbian和WM所有的(除了Windows Mobile上的
MPlayer,它使用了對防火牆/NAT友好的HTTP協議而不是RTSP協議)手機即時音頻播放器使用RTSP協議。這意味
著你根本無法收聽即時的廣播電台,除非你所在的電訊廠商不使用NAT。
即使你能有個快速的網路也沒有NAT限制,你還是無法播放一些流。 最重要的因素是在symbian上的WMA
(Windows Media Audio)。NOKIA內建播放器能播放本地WMA檔案,卻不能播放WMA流。(CorePlayer能播放WMA流,
但即使是最新版本,其網路模組是如此之差,播放了一段時間後就會出現嚴重的問題,這種情況不只出現在WMA
流,其他格式的流也一樣。希望下一個版本能改進)
1.2 當一個電台勉強能聽但需要最佳化
最普遍情況,GPRS串連有下行頻寬小於43 kbps,意味著有效廣播流的位元速率有32kbps;而一般預設32kbps的
網路電台都有同樣的問題:這些音頻流一般都是單聲道的,音質也很一般。當然如果你所處的是EDGE網路,那肯
定能承受絕大部分的網路電台的碼率了。
如果你不相信使用GPRS(或者EDGE)對比3G更省電,你在Windows mobile手機上用TCPMP開啟一個MP3流,用
acvTaskMan來查看,如下,第一個是通過UMTS(3G標準),第二個通過GPRS,當前的CPU佔用率差別是
200mA/300mA=60%,也就是說如果你設定手機使用GPRS MODE,就能節省60%的電量!
k歌:Windows mobile智能機你可以用TCPMP來聽廣播,而且MMS://的電台你直接用內建的Windows Media Player來放就行了。symbian上NOkia Internet Radio可以聽SHOUTCast MP3流,Coreplayer新版也可以聽mms流,不過由於wma是微軟的私人協議,所以Coreplayer對mms流的支援沒有公開。
下面我們對主流的音頻流媒體格式做個概述。一般手機支援wma,RealAudio,一些3G格式(都基於RTSP),Winamp PLS和Flash。不幸的是,許多格式只支援RTSP協議,意味著除非電訊廠商使用NAT'ing(把你手機暴露給Internet),這些格式是完全無用的。
下表給出了兩個主要的手機作業系統WM和symbian在NAT'ed和non-NAT'ed(direct)下的音頻支援
Windows Mobile:
Symbian: