Android之MediaPlayer播放音頻與視頻

本節(jié)帶來的是Android多媒體中的——MediaPlayer媒佣,我們可以通過這個API來播放音頻和視頻 該類是Androd多媒體框架中的一個重要組件昼捍,通過該類宁炫,我們可以以最小的步驟來獲取烁登,解碼 和播放音視頻窟感。它支持三種不同的媒體來源:

  • 本地資源
  • 內(nèi)部的URI伺糠,比如你可以通過ContentResolver來獲取
  • 外部URL(流) 對于Android所支持的的媒體格式列表

使用MediaPlayer播放音頻:

1)獲得MediaPlayer實例:
MediaPlayer mp = new MediaPlayer();
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);  //無需再調(diào)用setDataSource

另外create還有這樣的形式: create(Context context, Uri uri, SurfaceHolder holder) 通過Uri和指定 SurfaceHolder 【抽象類】 創(chuàng)建一個多媒體播放器

2)設(shè)置播放文件:
//①raw下的資源:
MediaPlayer.create(this, R.raw.test);

//②本地文件路徑:
mp.setDataSource("/sdcard/test.mp3");

//③網(wǎng)絡(luò)URL文件:
mp.setDataSource("http://www.xxx.com/music/test.mp3");

另外setDataSource()方法有多個伯病,里面有這樣一個類型的參數(shù):FileDescriptor柜候,在使用這個 API的時候碎连,需要把文件放到res文件夾平級的assets文件夾里灰羽,然后使用下述代碼設(shè)置DataSource:

AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
3)其他方法
Paste_Image.png

實例

//[1]初始化mediaplayer 
        MediaPlayer mediaPlayer = new MediaPlayer();
        //[2]設(shè)置要播放的資源位置  path 可以是網(wǎng)絡(luò) 路徑 也可是本地路徑
        try {
            mediaPlayer.setDataSource("/mnt/sdcard/xpg.mp3");
            //[3]準備播放
            mediaPlayer.prepare();
            //[4]開始播放
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
本地Uri:
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
網(wǎng)絡(luò)音頻
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();

使用MediaPlayer播放視頻:

MediaPlayer主要用于播放音頻,沒有提供圖像輸出界面鱼辙,所以我們需要借助其他的 組件來顯示MediaPlayer播放的圖像輸出廉嚼,我們可以使用用SurfaceView 來顯示,下面我們使用SurfaceView來寫個視頻播放的例子:

//[0]找到控件用來顯示播放視頻的內(nèi)容
        final SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);
        
            
            //獲取holder 對象 用來維護視頻播放的內(nèi)容
            SurfaceHolder holder = sfv.getHolder();
            
            //[0.1]添加holder 生命周期 方法 
            holder.addCallback(new Callback() {
                //當surface view 銷毀 
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    System.out.println("surfaceDestroyed");
                    //停止播放視頻 
                    if (mediaPlayer!=null && mediaPlayer.isPlaying()) {
                        
                        //獲取到當前播放視頻的位置 
                        
                        currentPosition = mediaPlayer.getCurrentPosition();
                        mediaPlayer.stop();
                        
                    }
                    
                    
                }
                
                //這個方法執(zhí)行了 說明sufaceView準備好了 
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    //[1]初始化mediaplayer 
                    System.out.println("surfaceCreated");
                     mediaPlayer = new MediaPlayer();
                    //[2]設(shè)置要播放的資源位置  path 可以是網(wǎng)絡(luò) 路徑 也可是本地路徑
                    try {
                        mediaPlayer.setDataSource("http://192.168.11.86:8080/cc.MP4");
                        //[3]準備播放
                        mediaPlayer.prepareAsync();
                        
                        
                        //[3.0]設(shè)置顯示給sfv sufraceholder 是用來維護視頻播放的內(nèi)容
                        mediaPlayer.setDisplay(holder);
                        
                        
                        //[3.1]設(shè)置一個準備完成的監(jiān)聽 
                        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                            
                            @Override
                            public void onPrepared(MediaPlayer mp) {
                                
                                //[4]開始播放
                                mediaPlayer.start();
                                
                                //[5]繼續(xù)上次的位置繼續(xù)播放
                                mediaPlayer.seekTo(currentPosition);
                                
                            }
                        });
                        
                        
                    } catch (Exception e) {
                        e.printStackTrace();}}
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                    
                }
            });

使用VideoView播放視頻

//  插件vitamio框架檢查是否可用
           if (!LibsChecker.checkVitamioLibs(this)) {
                return;
            }
            
            final VideoView vv = (VideoView) findViewById(R.id.vv);
            vv.setVideoPath("http://192.168.11.86:8080/aa.avi");
            vv.setOnPreparedListener(new OnPreparedListener() {
                
                @Override
                public void onPrepared(MediaPlayer mp) {
                    vv.start();
                    
                }
            });
            //設(shè)置video的控制器
            vv.setMediaController(new MediaController(this));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倒戏,一起剝皮案震驚了整個濱河市怠噪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杜跷,老刑警劉巖傍念,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葛闷,居然都是意外死亡憋槐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門孵运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秦陋,“玉大人蔓彩,你說我怎么就攤上這事治笨。” “怎么了赤嚼?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵旷赖,是天一觀的道長。 經(jīng)常有香客問我更卒,道長等孵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任蹂空,我火速辦了婚禮俯萌,結(jié)果婚禮上果录,老公的妹妹穿的比我還像新娘。我一直安慰自己咐熙,他們只是感情好弱恒,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棋恼,像睡著了一般返弹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爪飘,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天义起,我揣著相機與錄音,去河邊找鬼师崎。 笑死默终,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抡诞。 我是一名探鬼主播穷蛹,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昼汗!你這毒婦竟也來了肴熏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤顷窒,失蹤者是張志新(化名)和其女友劉穎蛙吏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞋吉,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸦做,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谓着。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泼诱。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赊锚,靈堂內(nèi)的尸體忽然破棺而出治筒,到底是詐尸還是另有隱情,我是刑警寧澤舷蒲,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布耸袜,位于F島的核電站,受9級特大地震影響牲平,放射性物質(zhì)發(fā)生泄漏堤框。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜈抓。 院中可真熱鬧启绰,春花似錦、人聲如沸沟使。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽格带。三九已至撤缴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叽唱,已是汗流浹背屈呕。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棺亭,地道東北人虎眨。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像镶摘,于是被迫代替她去往敵國和親嗽桩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容