看到很多很多人持續在問這個問題。
以前我也聽說,好像kvm底層實現不太支援j2me來做streaming video/audio,但我不知道那人為什麼這麼說。
那麼現在國外有一個人提出下面這種思路,並且號稱在Nokia6260[相關資料:諾基亞 6260 Nokia62602.0 (3.0436.0) SymbianOS7.0s Series602.1 ProfileMIDP-2.0 ConfigurationCLDC-1.0]
上真實實現了(兩種網路方式:藍芽和GPRS都實驗過),但我懷疑他的前提條件是“你的手機必須允許同時實現player的多個執行個體進入prefetched狀態(預讀取聲音流)”:
第一步:
聲明兩個Player;
第二步:
HttpConnection開始向伺服器請求該audio檔案的第一部分位元組,我們定這次讀取的位元組數為18KB;
第三步:
等第一部分資料到位後,Player A開始realize和prefetch,並開始播放;
第四步:
在Player A播放同時,(18KB的amr資料可以播放10秒鐘),HttpConnection繼續請求第二部分資料(假設GPRS每秒鐘傳輸3KB,那麼18KB需要傳輸6秒,算上前後通訊損失的時間,應該不會超過10秒鐘);
第五步:
第二部分資料到位後,假設Player A還沒有播放完(這需要調整你的每一部份資料位元組數來使得假設成立),那麼將資料餵給Player B讓它realize和prefetch;
第六步:
Player A播放完後,得到事件通知,於是讓Player B開始播放。
如此往複。
大家看看此種理論可否。
我自己在nokia 7610上測試了一下,我上面說的前提被證明是可行的:“你的手機必須允許同時實現player的多個執行個體進入prefetched狀態(預讀取聲音流)”。真實Nokia手機確實可以如此:兩個線程中各自有一個Player,都開始做m_player.realize();和m_player.prefetch();,然後等候。