Android模塊五多媒體.課件_第1頁(yè)
Android模塊五多媒體.課件_第2頁(yè)
Android模塊五多媒體.課件_第3頁(yè)
Android模塊五多媒體.課件_第4頁(yè)
Android模塊五多媒體.課件_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) Android移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 第1頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.1多媒體基礎(chǔ)知識(shí)OpenCore是Android多媒體框架的核心,所有Android平臺(tái)的音視頻采集,播放的操作都是通過(guò)它來(lái)實(shí)現(xiàn)。 基于第三方PacketVideo公司的OpenCORE來(lái)實(shí)現(xiàn),支持所有通用的音頻/視頻/靜態(tài)圖像格式,包括:MPEG4、H.264、AAC、AMR、JPG、PNG、GIF等。從功能上分為兩部分,一是音/視頻的回放(PlayBack),二是音視頻的紀(jì)錄(Record)OpenMAX是

2、Khronos制定的API,Khronos也是OpenGL的制定者。OpenMAX是無(wú)授權(quán)費(fèi)、跨平臺(tái)的應(yīng)用程序接口API第2頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3 音樂(lè)播放1.Android理論上支持大部分的音頻格式,比如WAV、AAC、MP3、AMR、MIDI、3GP、OGG等。實(shí)際上只有OGG、MP3和WAV格式的音頻可以在模擬器上面正常的播放。 2.音頻播放使用MediaPlayer類來(lái)實(shí)現(xiàn)第3頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3MediaPlayer類簡(jiǎn)介MediaPlayer可以播放音頻和視頻,另外也可以通過(guò)V

3、ideoView來(lái)播放視頻1)如何獲得MediaPlayer實(shí)例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);/這時(shí)就不用調(diào)用setDataSource了第4頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3MediaPlayer類簡(jiǎn)介2) 如何設(shè)置要播放的文件:MediaPlayer要播放的文件主要包括3個(gè)來(lái)源:a. 用戶在應(yīng)用中事先自帶的resource資源例如:MediaP

4、layer.create(this, R.raw.test);b. 存儲(chǔ)在SD卡或其他文件路徑下的媒體文件例如:mp.setDataSource(/sdcard/test.mp3);c. 網(wǎng)絡(luò)上的媒體文件例如:mp.setDataSource(/music/confucius.mp3);MediaPlayer的setDataSource一共四個(gè)方法:setDataSource (String path) setDataSource (FileDescriptor fd) setDataSource (Context context, Uri uri) setDataSource (FileDe

5、scriptor fd, long offset, long length)第5頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3MediaPlayer類簡(jiǎn)介3)對(duì)播放器的主要控制方法:Android通過(guò)控制播放器的狀態(tài)的方式來(lái)控制媒體文件的播放,其中:prepare()和prepareAsync() 提供了同步和異步兩種方式設(shè)置播放器進(jìn)入prepare狀態(tài),需要注意的是,如果MediaPlayer實(shí)例是由create方法創(chuàng)建的,那么第一次啟動(dòng)播放前不需要再調(diào)用prepare()了,因?yàn)閏reate方法里已經(jīng)調(diào)用過(guò)了。 start()是真正啟動(dòng)文件播放的方法,pause

6、()和stop()比較簡(jiǎn)單,起到暫停和停止播放的作用, seekTo()是定位方法,可以讓播放器從指定的位置開(kāi)始播放 release()可以釋放播放器占用的資源,一旦確定不再使用播放器時(shí)應(yīng)當(dāng)盡早調(diào)用它釋放資源。reset()可以使播放器從Error狀態(tài)中恢復(fù)過(guò)來(lái),重新會(huì)到Idle狀態(tài)。第6頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3MediaPlayer類簡(jiǎn)介4)設(shè)置播放器的監(jiān)聽(tīng)器:MediaPlayer提供了一些設(shè)置不同監(jiān)聽(tīng)器的方法來(lái)更好地對(duì)播放器的工作狀態(tài)進(jìn)行監(jiān)聽(tīng),以期及時(shí)處理各種情況,如: setOnCompletionListener(MediaPlaye

7、r.OnCompletionListener listener)、setOnErrorListener(MediaPlayer.OnErrorListener listener)等,設(shè)置播放器時(shí)需要考慮到播放器可能出現(xiàn)的情況設(shè)置好監(jiān)聽(tīng)和處理邏輯,以保持播放器的健壯性。第7頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3給游戲加上背景音樂(lè)創(chuàng)建媒體播放器import android.media.MediaPlayer; public class pingpang extends Activity private static MediaPlayer mp = null;

8、第8頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.1給游戲加上背景音樂(lè)添加播放函數(shù)public class pingpang extends Activity public static void play(Context context,int resource)mp = MediaPlayer.create(context,resource); mp.setLooping(true); /指定是否重復(fù)播放mp.start(); /開(kāi)始播放第9頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.1給游戲加上背景音樂(lè)調(diào)用play函數(shù)進(jìn)行播放publ

9、ic void onCreate(Bundle savedInstanceState) pview = new pView(this); super.onCreate(savedInstanceState);setContentView(pview); pview.requestFocus(); play(this,R.raw.game); 第10頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.3 視頻播放Android SDK對(duì)視頻支持的格式如下:MP4(MPEG_4低比特率);H263;H264(AVC)在Windows計(jì)算機(jī)上,唯一可靠工作的格式是MP4,建議盡量

10、采用這種格式。 第11頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 5.2 視頻播放Android的MediaPlayer類的視頻處理與音頻處理方式一樣,唯一差別是需要為視頻創(chuàng)建一個(gè)用于繪制圖形的Surface。可以用start()和stop()方法控制視頻的播放。還有一種更簡(jiǎn)單的方法將視頻嵌入到應(yīng)用程序:VideoView類。 第12頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 案例:視頻播放器軟件 第13頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 方法一:VideoViewVideoView view=(VideoView

11、)findViewById(R.id.video_view);view.setVideoPath(/sdcard/sample.3gp);view.startview.pauseview.stop第14頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 方法二:SurfaceView和MediaPlayer實(shí)現(xiàn) surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); /把輸送給surfaceView的視頻畫(huà)面,直接顯示到屏幕上 /,不要維持它自身的緩沖區(qū) holder=surfaceView.getHol

12、der(); /Holder四種類型(NORMAL,HARDWARE,GPU,PUSH_BUFFERS)holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);holder.setFixedSize(176, 144);holder.setKeepScreenOn(true);holder.addCallback(new SurfaceCallback();第15頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) mediaPlayer = new MediaPlayer();mediaPlayer.setDisplay(

13、holder);常見(jiàn)方法:mediaPlayer.create(Context context,int resource);mediaPlayer.setDataSource(path/uri);mediaPlayer.start();mediaPlayer.pause();mediaPlayer.stop();meidaPlayer.reset();mediaPlayer.isPlaying();setOnCompletionListener();第16頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 第17頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā)

14、 畫(huà)布與組件混合第18頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 第19頁(yè),共33頁(yè)。Adroid移動(dòng)開(kāi)發(fā)模塊五:Android多媒體開(kāi)發(fā) 定時(shí)刷新第20頁(yè),共33頁(yè)。項(xiàng)目案例分析分析:1.文件搜索2.文件列表顯示3.播放控制第21頁(yè),共33頁(yè)。搜索指定擴(kuò)張名文件class MusicFilter implements FilenameFilter public boolean accept(File dir, String name) return (name.endsWith(.mp3);/返回當(dāng)前目錄所有以.mp3結(jié)尾的文件 public MusicService

15、() musicList = new ArrayList(); player = new MediaPlayer(); File home = new File(MUSIC_PATH); if (home .listFiles(new MusicFilter().length 0) for (File file : home .listFiles(new MusicFilter() musicList.add(file.getAbsolutePath(); 第22頁(yè),共33頁(yè)。2.文件列表顯示ArrayAdapter musicAdapter = new ArrayAdapter( MainA

16、ctivity.this, R.layout.musicitme, musicList); listView.setAdapter(musicAdapter );第23頁(yè),共33頁(yè)。音樂(lè)播放void playMusic(String path) try myMediaPlayer.reset();myMediaPlayer.setDataSource(path);myMediaPlayer.prepare();myMediaPlayer.start(); 第24頁(yè),共33頁(yè)。/播放完后,自動(dòng)播放下一首myMediaPlayer.setOnCompletionListener(new OnCom

17、pletionListener() Overridepublic void onCompletion(MediaPlayer mp) / TODO Auto-generated method stubnextMusic();); catch (Exception e) / TODO: handle exceptione.printStackTrace();第25頁(yè),共33頁(yè)。/ 下一首void nextMusic() currentListItem+;if (currentListItem = myMusicList.size()currentListItem = 0;playMusic(MU

18、SIC_PATH + myMusicList.get(currentListItem);第26頁(yè),共33頁(yè)。/ 上一首void lastMusic() currentListItem-;if (currentListItem = -1)currentListItem = myMusicList.size() - 1;playMusic(MUSIC_PATH + myMusicList.get(currentListItem);第27頁(yè),共33頁(yè)。文件搜索 /* * 對(duì)象聲明 * items:存放顯示的名稱 * paths:存放文件路徑 * rootPath:起始目錄 */ private Li

19、st items = null; private List paths = null; private String rootPath = /; 第28頁(yè),共33頁(yè)。/取得文件架構(gòu)的method private void getFileDir(String filePath) mPath.setText(filePath); /設(shè)置目前所在路徑 items=new ArrayList(); paths = new ArrayList(); File f = new File(filePath); File files = f.listFiles(); if(!filePath.equals(rootPath) /*第一條設(shè)置為回到根目錄*/ items.add(Back to +rootPath); paths.add(rootPath); /*第二條設(shè)置為回上層*/ items.add(Back to .);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論