2009-04-24 43 views
6

由於很多J2ME手機(很煩人)的限制,音頻文件只有在完全下載之後才能播放。所以,爲了播放直播節目,我不得不一次下載數據塊,然後構建ByteArrayInputStream s,然後我將其添加到玩家。在J2ME中將緩衝區轉換爲播放器的替代方法?

這樣做效果很好,除了每次流結束時需要1/4秒左右的煩人差距並且需要新的一個。有沒有辦法解決這個問題,或者上面的問題?

+0

我想你想要的是在這裏找到的javax.microedition.media.protocol中的SourceStream和DataSource類http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol /DataSource.html – 2009-04-25 00:48:50

回答

0

EDIT2:或者你可以看看這個,這似乎正是你想要的東西:http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

我會創建兩個播放器類,並確保我收到足夠的塊之前,我開始打他們。然後,我將開始通過玩家一開始玩第一塊,並將第二塊加載到玩家二中。然後我會使用TimeBase類來跟蹤已經過了多少時間,以及當我知道第一個塊會結束時(您應該知道每個塊需要播放多長時間),然後我會開始通過第二個播放器播放第二個塊,然後將第三個塊加載到第一個塊中,依此類推,直到沒有更多的塊要播放爲止。

這裏的關鍵是正確使用TimeBase類來知道何時進行轉換。我認爲這應該能夠消除組塊之間令人討厭的1/4秒差距。我希望這些作品能讓我知道它是否真的有趣,因爲這聽起來很有趣。

編輯:Player.prefetch()也可以用於減少延遲。

1

不幸的是,你不能擺脫這些差距,至少不是我試過的任何設備。這確實很煩人。這是規範的一部分,您無法通過HTTP流式傳輸音頻或視頻。

如果您想要從服務器進行流式傳輸,唯一的方法是使用RTSP服務器,不過您需要在設備上檢查對此的支持。

使用設備上的本地服務器(rtsp:// localhost ...)僞造RTSP也無法正常工作..我也試過。

2

在創建播放器時,使用J2ME JSR135播放長時間(3分鐘或更長時間)音軌(適度可靠地播放最多手機的唯一好方法)是使用「file://」網址,或者讓輸入流實際來自FileConnection。

最近黑莓手機只有在有大量Java堆存儲空間時才能使用ByteArrayInputstream。

許多在Symbian操作系統上運行的手機將允許您將文件放在J2ME應用程序的專用區域,同時仍然能夠在相同位置播放音軌。

相關問題