鄭昀@ultrapower產(chǎn)品名稱產(chǎn)品版本Keyword:JavaMEStreamingAudioMMAPIStreamingDemo" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[J2ME]手機(jī)流媒體之實(shí)作[附源碼][與RTSP/MMS協(xié)

系統(tǒng) 1955 0
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

鄭昀 @ultrapower

產(chǎn)品名稱

產(chǎn)品版本

Keyword: JavaME Streaming Audio MMAPI

StreamingDemo

1.0.13

[J2ME]現(xiàn)行環(huán)境下 手機(jī)

實(shí)現(xiàn)網(wǎng)絡(luò)媒體的流暢實(shí)時(shí)播放

之簡單演示

(StreamingDemo)

說明

我的資源:

http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo-src-1.0.13.rar

這個(gè) 1.0.13 版本是 j2me 流媒體播放思路的簡單演示軟件,并不是對(duì)現(xiàn)有的RTSP/MMS流媒體服務(wù)器的客戶端實(shí)現(xiàn),而是自定義算法下載來保證實(shí)時(shí)播放,可以在 Nokia 7610 手機(jī)上真實(shí)運(yùn)行。在手機(jī)上使用,請?jiān)谶x擇連接點(diǎn)時(shí)選擇“移動(dòng)夢網(wǎng)”連接點(diǎn)。

如果修改源代碼中 CommandResources.java 中的 m_bCMWAPProxy 標(biāo)志使之走 CMNET 通道,那么能夠在 Nokia S60 的模擬器上運(yùn)行。

本源代碼的大致思路來自于我上次寫的三篇討論稿

J2me 流媒體技術(shù)實(shí)現(xiàn)討論 [1]

J2me 流媒體技術(shù)實(shí)現(xiàn)討論 [2]

J2me 流媒體技術(shù)實(shí)現(xiàn)討論 [3] StreamingDemo 的代碼你可以借鑒,但不得用于商業(yè)用途,除非得到我的授權(quán)。

手機(jī)jar安裝包下載:
http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo-deployed.rar
可以將這個(gè)包中的StreamingDemo.jar傳到您的手機(jī)上進(jìn)行安裝。
使用時(shí),請選擇移動(dòng)夢網(wǎng)連接點(diǎn)。

如果你想使用劈分好的媒體文件,請從

http://www.cnblogs.com/Files/zhengyun_ustc/changjin.split.rar 下載。

1 背景、功能

摘要 :本章 簡單描述 StreamingDemo 的背景、功能。

1.1. 手機(jī)上的流媒體

很多人都在 j2medev.com 上討論過流媒體的實(shí)現(xiàn)方式。 國外有一個(gè)人提出一種思路,并且號(hào)稱在 Nokia6260 [ 相關(guān)數(shù)據(jù):諾基亞 6260 Nokia62602.0 (3.0436.0) SymbianOS7.0s Series602.1 ProfileMIDP-2.0 ConfigurationCLDC-1.0 ] 運(yùn)行了。

當(dāng)然我們這里說的不是對(duì) RTSP/MMS 這種主流的流媒體服務(wù)器的客戶端實(shí)現(xiàn),因?yàn)楝F(xiàn)在中國市場的很多很多手機(jī)的 Java 環(huán)境都不支持這兩個(gè)協(xié)議,只有新出的某些手機(jī)才內(nèi)置支持這一功能。

我們這次講的是,在現(xiàn)有 GPRS 環(huán)境下,在現(xiàn)有的一兩千塊錢的手機(jī)條件下,如何做到流媒體實(shí)時(shí)播放呢,而且還能做到較為流暢呢?

2006 1 月份,我 恰巧看到了

就此思路和諸位高手討論了一下,并且寫了三篇討論稿,有了大致的思路。但一直都沒有時(shí)間去測試這個(gè)思路是否可行。

今天索性抽出了一兩個(gè)小時(shí),把這個(gè)思路寫出來放在真實(shí)手機(jī) /GPRS 網(wǎng)絡(luò)上測試,不敢獨(dú)享,遂開放代碼,希望借此拋磚引玉。

這里給出 StreamingDemo 的界面,很簡單,主要的線程操作和消息處理都在后臺(tái):

Streaming.HttpConnection

1.2. 我所謂流媒體的功能

以前我們談過:

第一步:
聲明兩個(gè) Player ,分別由兩個(gè)獨(dú)立的線程掌控著;

第二步:
HttpConnection
開始向服務(wù)器請求該 audio 文件的第一部分字節(jié),我們定這次讀取的字節(jié)數(shù)為 18KB

第三步:
等第一部分?jǐn)?shù)據(jù)到位后, Player A 開始 realize prefetch ,并開始播放;

第四步:
Player A 播放同時(shí), (18KB amr 數(shù)據(jù)可以播放 10 秒鐘 ) HttpConnection 繼續(xù)請求第二部分?jǐn)?shù)據(jù) ( 假設(shè) GPRS 每秒鐘傳輸 3KB ,那么 18KB 需要傳輸 6 秒,算上前后通訊損失的時(shí)間,應(yīng)該不會(huì)超過 10 秒鐘 )

第五步:
第二部分?jǐn)?shù)據(jù)到位后,假設(shè) Player A 還沒有播放完 ( 這需要調(diào)整你的每一部份數(shù)據(jù)字節(jié)數(shù)來使得假設(shè)成立 ) ,那么將數(shù)據(jù)喂給 Player B 讓它 realize prefetch

第六步:
Player A
播放完后,得到事件通知,于是讓 Player B 開始播放。

如此往復(fù)。

大致的思路就是這樣。

這次,我們起了兩個(gè)線程,一個(gè)叫做“ Main( ) ”,一個(gè)叫做“ Secondary( 從屬 ) ”,他們都掌握著一個(gè) Player ,同樣一個(gè)是 Main Player ,一個(gè)是 Secondary Player 。這兩個(gè) Player 的操作實(shí)際上都被 Audio.java 類完全封裝好了。線程里面僅僅是調(diào)用

Audio.prefetchSound(m_form,

m_isInputMusic,

m_Sequence);

啦,

Audio.playSound(m_Sequence);

啦,這樣就可以把媒體資源預(yù)先運(yùn)算以及播放了。

同時(shí),還必須用到 PlayerListener 接口,來得到播放器的各種事件通知,我們需要得知每一個(gè)播放器的播放結(jié)束消息,以便作出下一步選擇:是讓從屬線程開始播放呢,還是讓主線程開始播放呢。

PlayerListener 的播放結(jié)束消息 ( PlayerListener.END_OF_MEDIA ) 的處理中,我們還必須用到 MVC 模式中的 Controller ,它是代碼中的 GUIController.java ,它負(fù)責(zé)處理幾個(gè)消息:

l EventID.EVENT_MAIN_DownloadCompleted

l EventID.EVENT_Main_BeginToPlay

l EventID.EVENT_SECONDARY_BeginToPlay

怎么綜合使用這些消息和事件呢?

比如說,當(dāng)主線程的媒體文件下載完畢后,就應(yīng)該通知 GUIController 讓從屬線程也開始下載并加載媒體文件。

當(dāng)主線程的媒體文件播放完畢了,這時(shí)候照理說從屬線程的 Player 也已經(jīng)預(yù)先加載好了下一個(gè)要播放的媒體文件 ( 如果不行的話就應(yīng)該調(diào)整媒體文件的大小了以使得下載時(shí)間和播放時(shí)間差不多 ) ,就應(yīng)該在

public void playerUpdate(Player player, String event, Object data)

的函數(shù)處理中,讓 Secondary Player 播放了。

這次我們直接將媒體文件用討論稿中談及的 ffmpeg 自動(dòng)切分的辦法,已經(jīng)辟成 11 小段的 AMR 文件了,每一個(gè) AMR 文件都可以獨(dú)立播放,連起來就是一首完整的《大長今》樂曲。

PlayerA PlayerB 只是周而復(fù)始的下載、預(yù)運(yùn)算、播放他們罷了。只不過掌控著 Player 的兩個(gè)線程和主控制器,會(huì)選擇時(shí)機(jī)來讓這些操作次第展開。

上面所說的邏輯,可以用下圖表示:

2 使用感受

摘要 :本章 簡單描述 StreamingDemo 在真實(shí) GPRS 環(huán)境下 的使用感受。

2.1. Nokia7610 手機(jī)上的設(shè)置

如果你真的要在手機(jī)上用到這種功能,那么請申請開通你的 GPRS 包月套餐,那樣 20 塊錢就可以使用 50MB 流量的 GPRS 了。

如果你的手機(jī)是 Nokia S60 系列手機(jī),建議用 Nokia 程序管理器 設(shè)置這個(gè)應(yīng)用配置一個(gè)參數(shù): 在連接網(wǎng)絡(luò)時(shí)第一次詢問 。否則你會(huì)屢屢被網(wǎng)絡(luò)連接警告框打斷的。

2.2. Nokia7610 手機(jī)上的使用感受

這種流媒體的播放,還是取決于使用時(shí) GPRS 網(wǎng)絡(luò)的好壞。

我在晚上 19 點(diǎn)使用了一下,感覺比較流暢,甚至超乎我的預(yù)期,不認(rèn)真聽,甚至感覺不到在哪里停頓的。

但是在晚上 20 點(diǎn)又用了一下,就有點(diǎn)拖拖拉拉的,延遲較為明顯。

可見現(xiàn)行的 GPRS 網(wǎng)絡(luò)環(huán)境還是容易出現(xiàn)擁擠的。

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 438pt" type="#_x0000_t75" o:ole=""><imagedata src="file:///C:%5CDOCUME~1%5CZHENGY~1.VIC%5CLOCALS~1%5CTemp%5Cmsohtml1%5C09%5Cclip_image001.emz" o:title=""></imagedata></shape>

3 開源版權(quán)聲明

由于這個(gè) 手機(jī)流媒體簡單演示 思路和代碼來自于鄭昀以前的討論稿,今為了促進(jìn) J2ME 多媒體應(yīng)用發(fā)展, 決定遵照 GPL 協(xié)議的大意開放源代碼,您可以自由傳播和修改,在遵照下面的約束條件的前提下:

條件 1

只要你在 手機(jī)流媒體簡單演示 每一副本上明顯和恰當(dāng)?shù)爻霭姘鏅?quán)聲明,保持此許可證的聲明和沒有擔(dān)保的聲明完整無損,并和程序一起給每個(gè)其他的程序接受者一份許可證的副本,你就可以用任何媒體復(fù)制和發(fā)布你收到的原始的程序的源代碼。你可以為轉(zhuǎn)讓副本的實(shí)際行動(dòng)收取一定費(fèi)用,但必須事先得到鄭昀的同意。

條件 2

你可以修改 手機(jī)流媒體簡單演示 程序的一個(gè)或幾個(gè)副本或程序的任何部分,以此形成基于程序的作品。只要你同時(shí)滿足下面的所有條件,你就可以按前面第一款的要求復(fù)制和發(fā)布這一經(jīng)過修改的程序或作品。

a

你必須在修改的文件中附有明確的說明:你修改了這一文件及具體的修改日期。

b

你必須使你發(fā)布或出版的作品(它包含程序的全部或一部分,或包含由程序的全部或部分衍生的作品)允許第三方作為整體按許可證條款免費(fèi)使用。

c

如果修改的程序在運(yùn)行時(shí)以交互方式讀取命令,你必須使它在開始進(jìn)入常規(guī)的交互使用方式時(shí)打印或顯示聲明:包括適當(dāng)?shù)陌鏅?quán)聲明和沒有擔(dān)保的聲明(或者你提供擔(dān)保的聲明);用戶可以按此許可證條款重新發(fā)布程序的說明;并告訴用戶如何看到這一許可證的副本。(例外的情況:如果原始程序以交互方式工作,它并不打印這樣的聲明,你的基于程序的作品也就不用打印聲明)。

這樣,您就可以自由使用并傳播本源代碼, 當(dāng)然請您原封不動(dòng)地保留創(chuàng)建者 zhengyun_ustc( 鄭昀 ) 的作者信息




[J2ME]手機(jī)流媒體之實(shí)作[附源碼][與RTSP/MMS協(xié)議無關(guān)]


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 玖玖精品在线视频 | 一级aa 毛片高清免费看 | 视频二区精品中文字幕 | 亚洲91av| 国产成人教育视频在线观看 | 最近中文国语字幕在线播放视频 | 在线aa| 精品国产一区二区三区久久影院 | 四虎永久网址在线观看 | 久久在线 | 天天摸夜夜添狠狠添2018 | 26uuu欧美日本| 日韩成人国产精品视频 | 色婷婷精品大视频在线蜜桃视频 | 国产精品成aⅴ人片在线观看 | 欧美日韩性大片 | 国产福利在线播放 | 国产在线观看精品香蕉v区 国产在线观看美女福利精 国产在线观看午夜不卡 | 99爱免费观看视频在线 | 国产成人一区在线播放 | 91精品国产欧美一区二区 | 国产毛片一区二区三区 | 色香蕉在线 | 午夜精品福利视频 | 国产精品久久久 | 日本中文在线观看 | 一级毛片成人免费看a | 99精品网站 | 97伊人久久 | 麻豆久久精品 | 一区二区三区www | 99热热久久这里只有精品166 | 天天干视频 | 亚洲欧美日韩中文v在线 | 亚洲国产天堂久久九九九 | 狠狠色丁香婷婷久久综合2021 | 日韩免费一级毛片 | 91视频网址入口 | 最新国产在线 | 一级毛片成人免费看免费不卡 | 国产网红在线 |