Android平臺(tái)下SeeJoPlayer視頻播放器(功能介紹及源碼解析,附源碼)
轉(zhuǎn)載請(qǐng)注明出處:http://www.tkk7.com/zh-weir/archive/2010/01/24/310617.html
2010.03.27 SeeJoPlayer v1.2.0 beta版:


更新說(shuō)明:
1、完美支持android1.5、android1.6、android2.0、android2.01、android2.1平臺(tái);
2、完美支持320×480、480×800、480×854等各種分辨率(自適應(yīng)屏幕分辨率);
3、支持在線音視頻播放,支持URL input和從瀏覽器調(diào)用SeeJoPlayer播放器播放在線音視頻;
4、自動(dòng)轉(zhuǎn)為橫屏播放,為用戶提供更好的觀看體驗(yàn);
5、修改了沒(méi)有SD卡程序出錯(cuò)的Bug;
6、美化了視頻播放列表和操作說(shuō)明的界面。
補(bǔ)充圖片:

URL輸入功能

瀏覽器中調(diào)用SeeJoPlayer播放
感謝大家對(duì)SeeJoPlayer的大力支持!希望新版本能帶給大家更好的體驗(yàn)!
2010.01.24 SeeJoPlayer v1.0.0版:
SeeJoPlayer是我利用業(yè)余時(shí)間開(kāi)發(fā)的一款免費(fèi)的視頻播放器。主要是現(xiàn)在在網(wǎng)上似乎找不到一個(gè)Android平臺(tái)下的界面美觀一點(diǎn)的視頻播放器。而作為智能手機(jī)操作系統(tǒng)的Android,沒(méi)有一個(gè)像樣一點(diǎn)的視頻播放器,豈不糗大了。所以,我就寫(xiě)了這么一個(gè)磚頭并開(kāi)出源碼,希望能引出高手們的美玉來(lái)吧!
下載APK程序
下載源代碼
轉(zhuǎn)到eoeMarket發(fā)布頁(yè)

第一部分:功能介紹
SeeJoPlayer的優(yōu)點(diǎn)主要在相對(duì)還算美觀的界面和便捷的交互操作上。先說(shuō)操作吧,它支持:
1、全屏切換: 雙擊屏幕
2、播放/暫停: 長(zhǎng)按屏幕
3、靜音/恢復(fù): 長(zhǎng)按音量按鈕
4、播放列表: 控制面板最右邊的按鈕(暫不支持編輯功能)
5、音量調(diào)節(jié): 單擊音量按鈕,在彈出的音量顯示區(qū)域觸摸改變音量
這些操作和PC上的播放器較為類(lèi)似,希望大家能用得習(xí)慣。
至于界面的話,多說(shuō)無(wú)益,直接上圖吧:

橫屏

豎屏

全屏

非全屏

播放列表

介紹說(shuō)明
好了。功能介紹部分到此為止了。如果您覺(jué)得這個(gè)軟件還行的話,歡迎下載使用!
下載APK程序
下載源代碼
轉(zhuǎn)到eoeMarket發(fā)布頁(yè)
第二部分:源碼解析
SeeJoPlayer不是一個(gè)完美的作品,可以說(shuō),它在很多地方都不盡如人意。當(dāng)然一個(gè)完美的作品,也不是我寫(xiě)這款播放器的目的。我只是希望以此為引,結(jié)合大家共同的智慧開(kāi)發(fā)出一款真正完美強(qiáng)大的Android平臺(tái)下的國(guó)產(chǎn)視頻播放器出來(lái)。
SeeJoPlayer有許多不足之處,例如,它只支持系統(tǒng)默認(rèn)的視頻格式,因?yàn)樗褂孟到y(tǒng)默認(rèn)的解碼器。這,一方面是因?yàn)槿绻ㄟ^(guò)軟解碼的話,播放視頻的效率會(huì)很受影響,另外最主要的原因當(dāng)然還是個(gè)人水平、精力有限,沒(méi)辦法接著往下做了。如果大家覺(jué)得這份代碼還多少有些參考價(jià)值的話,不妨拿去用。只是希望當(dāng)你們以此為參考,開(kāi)發(fā)出真正強(qiáng)大的播放器出來(lái)的時(shí)候,別忘了如果能開(kāi)放源碼的話,一定開(kāi)放出來(lái)。畢竟開(kāi)源軟件就好比能夠進(jìn)化的物種,提供你的DNA出來(lái),讓我們共同的軟件變得越來(lái)越完美吧!
好了,廢話不說(shuō)了。播放器的全部源碼本文中已經(jīng)提供了下載地址。下面,我就其中我覺(jué)得可能值得關(guān)注的地方做一些解釋。
一、VideoView與視頻比例縮放:
以前在論壇上也看到有人問(wèn)過(guò)如何實(shí)現(xiàn)視頻按比例縮放的問(wèn)題。的確,如果僅僅使用VideoView可能達(dá)不到我們想要達(dá)到的效果。這就需要我們對(duì)VideoView做一些改動(dòng),簡(jiǎn)單的說(shuō)就是另外寫(xiě)一個(gè)類(lèi)似VideoView的類(lèi)出來(lái)(慶幸Android是開(kāi)源的)。
我們可以很方便的獲得VideoView的源代碼,最簡(jiǎn)單的方法是直接在GoogleCodeSearch上找“VideoView.java”。所以重寫(xiě)VideoView的過(guò)程其實(shí)只是在原來(lái)的基礎(chǔ)上進(jìn)行一些修改而已,并非一個(gè)很麻煩的工作。為什么Android自帶的VideoView會(huì)保持視頻的長(zhǎng)寬比而不能讓我們很方便的自定義比例呢?我猜想可能Google做Android也是一個(gè)很倉(cāng)促的工程,許多代碼并沒(méi)有考慮得太成熟。
VideoView的源碼中有這樣一段代碼:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

這就是為什么長(zhǎng)寬比不能改變的原因了。因?yàn)樵贠nMeasure的時(shí)候,就對(duì)這個(gè)長(zhǎng)寬比進(jìn)行了處理。
我們把其中處理的代碼屏蔽掉,視頻大小就可以隨著VideoView的長(zhǎng)寬改變而改變了。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

二、視頻控制菜單與播放界面的層次問(wèn)題:
看到過(guò)一些別人寫(xiě)的視頻播放器,其中有一些朋友老是簡(jiǎn)簡(jiǎn)單單的將VideoView和控制界面放在一個(gè)LinearLayout中。這樣隨著控制界面的出現(xiàn)與否,VideoView會(huì)隨之改變長(zhǎng)寬,給人的體驗(yàn)并不很好。所以,我認(rèn)為VideoView和控制界面最好不要放在同一個(gè)層次上。不要偷懶,使用一個(gè)FrameLayout或者PopupWindow就可以解決這個(gè)問(wèn)題。例如,我就簡(jiǎn)簡(jiǎn)單單地使用了PopupWindow,這個(gè)具體實(shí)現(xiàn)上,就百花爭(zhēng)鳴吧。
三、視頻文件掃描:
視頻文件的掃描,現(xiàn)在想來(lái)主要有兩種方式:
第一種就是直接讀取媒體庫(kù)中的視頻文件數(shù)據(jù)庫(kù)。當(dāng)Android啟動(dòng)的時(shí)候,系統(tǒng)會(huì)自動(dòng)掃描sdcard,并為媒體文件建立(或者更新)數(shù)據(jù)庫(kù)。我們可以通過(guò)對(duì)應(yīng)的URI來(lái)訪問(wèn)數(shù)據(jù)庫(kù),從而得到視頻文件的列表:

2

3



4

5

6

7

8

9

10

11

12

13

14

15

這種方法可能是最有效率的了,不過(guò)不知為何,媒體庫(kù)中似乎沒(méi)有掃描進(jìn)本身支持的3GP視頻格式(也可能我這里是一個(gè)特例) 。不過(guò),正是因?yàn)檫@個(gè)原因,我才想到有可能需要另外一種最基本的掃描文件系統(tǒng)的方法來(lái)掃描視頻文件。這就是文件系統(tǒng)的遍歷:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

當(dāng)然,隨著Android平臺(tái)下的硬件設(shè)備越來(lái)越多,越來(lái)越強(qiáng)大。我們有理由相信,它以后將不僅僅只支持MP4和3GP格式的視頻文件,所以我們必須使用兩種方式結(jié)合的方法來(lái)獲得最大的視頻集合作為我們的視頻列表。
四、播放過(guò)程中進(jìn)度條progress的設(shè)定:
視頻開(kāi)始播放了,那么一個(gè)小麻煩出現(xiàn)了:什么時(shí)候設(shè)定進(jìn)度條才更有效率?我這里有一種方法供大家參考,那就是通過(guò)Handler自己給自己發(fā)消息來(lái)達(dá)到不斷設(shè)置進(jìn)度條的目的。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24



25

26

當(dāng)然,這種方法,需要首先發(fā)送一個(gè)初始消息來(lái)啟動(dòng)。
五、全屏與非全屏:
大家都知道,一般一個(gè)Activity設(shè)置全屏的方法有兩種,一是在OnCreate中:

2

3

4

5

6

7

8

9

10

11

12



13

二是在AndroidManifest.xml中:

2

3

然而,這兩種方法都不能達(dá)到我們?cè)谝曨l播放過(guò)程中設(shè)置全屏與否的目的。因?yàn)樗鼈兌贾荒茉诔跏蓟臅r(shí)候決定全屏與否。那么我現(xiàn)在要說(shuō)的就是第三種方法:


這種方法就可以在Activity運(yùn)行過(guò)程中,動(dòng)態(tài)地改變?nèi)僚c否。
六、音量調(diào)節(jié):
音量調(diào)節(jié)的方法其實(shí)很簡(jiǎn)單,不過(guò)有人問(wèn)到,我就在這里順便說(shuō)下:

2

好了,就寫(xiě)這些了吧??赡苓@些知識(shí)有人知道,或者還有些盲點(diǎn)我沒(méi)有講到。歡迎大家與我聯(lián)系,大家一起多多討論交流,并且整個(gè)源碼都開(kāi)放出來(lái)了,大家一定可以把來(lái)龍去脈弄得一清二楚的!最后,多謝大家聽(tīng)我羅嗦,歡迎使用SeeJoPlayer,歡迎閱讀其源碼!本文也歡迎大家轉(zhuǎn)載,不過(guò)轉(zhuǎn)載請(qǐng)注明出處:http://www.tkk7.com/zh-weir/archive/2010/01/24/310617.html
下載APK程序
下載源代碼
轉(zhuǎn)到eoeMarket發(fā)布頁(yè)
posted on 2010-01-24 17:20 zh.weir 閱讀(61983) 評(píng)論(104) 編輯 收藏 所屬分類(lèi): Android項(xiàng)目源碼