zoukankan      html  css  js  c++  java
  • Android学习总结(十六) ———— MediaPlayer播放音频与视频

    一、基本概念   

      本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构。Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。 MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

      它支持三种不同的媒体来源:

    • 本地资源
    • 内部的URI,比如你可以通过ContentResolver来获取
    • 外部URL(流) 对于Android所支持的的媒体格式列表

    二、代码之旅

      2.1 使用MediaPlayer播放音频:

      布局代码很简单,就播放、暂停、停止按钮,这里就不写出来了,我们还是赶紧看看关键代码吧,代码示例如下:

    package com.nyl.mediaplayertest;
    
    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    
        private Button btnPlay;
        private Button btnPause;
        private Button btnStop;
    
        private MediaPlayer mediaPlayer = null;
        private boolean isRelease = true; //判断MediaPlayer是否释放的标志
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView(); //初始化控件
        }
    
        private void initView() {
            btnPlay = (Button) findViewById(R.id.btnPlay);
            btnPause = (Button) findViewById(R.id.btnPause);
            btnStop = (Button) findViewById(R.id.btnStop);
    
            btnPlay.setOnClickListener(this);
            btnPause.setOnClickListener(this);
            btnStop.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.btnPlay: //播放
                    if (isRelease){
                        //在raw下的资源
                        mediaPlayer = MediaPlayer.create(this,R.raw.fly);
                        isRelease = false;
                    }
                    mediaPlayer.start(); //开始播放
                    btnPlay.setEnabled(false);
                    btnPause.setEnabled(true);
                    btnStop.setEnabled(true);
                    break;
    
                case R.id.btnPause:
                    mediaPlayer.pause(); //停止播放
                    btnPlay.setEnabled(true);
                    btnPause.setEnabled(false);
                    btnStop.setEnabled(false);
                    break;
    
                case R.id.btnStop:
                    mediaPlayer.reset(); //重置MediaPlayer
                    mediaPlayer.release(); //释放MediaPlayer
                    isRelease = true;
                    btnPlay.setEnabled(true);
                    btnPause.setEnabled(false);
                    btnStop.setEnabled(false);
                    break;
            }
        }
    }

      注意:播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!

      当点击播放按钮时,音乐就会播放,哈哈哈~话不多说,感兴趣的朋友还是自己动手操作吧,我们来看运行效果图,如下所示:

      

      2.2 使用MediaPlayer播放视频

      MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他的 组件来显示MediaPlayer播放的图像输出,我们可以使用用SurfaceView 来显示,下面我们使用SurfaceView来写个视频播放的例子,布局代码如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <SurfaceView
            android:id="@+id/sfvShow"
            android:layout_width="match_parent"
            android:layout_height="300dp" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:gravity="center|bottom">
    
            <Button
                android:id="@+id/btnStart"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="开始" />
    
            <Button
                android:id="@+id/btnPause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="暂停 " />
    
            <Button
                android:id="@+id/btnStop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="终止" />
    
        </LinearLayout>
    
    
    </LinearLayout>

      接着就是最关键的代码的,如下所示:

    package com.nyl.mediaplayerdemo;
    
    import android.app.Activity;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity implements View.OnClickListener, SurfaceHolder.Callback {
    
        private SurfaceView sfvShow;
        private Button btnStart;
        private Button btnPause;
        private Button btnStop;
    
        private MediaPlayer mediaPlayer = null;
        private SurfaceHolder surfaceHolder;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initView(); //初始化布局控件
        }
    
        private void initView() {
            sfvShow = (SurfaceView) findViewById(R.id.sfvShow);
            btnStart = (Button) findViewById(R.id.btnStart);
            btnPause = (Button) findViewById(R.id.btnPause);
            btnStop = (Button) findViewById(R.id.btnStop);
    
            btnStart.setOnClickListener(this);
            btnPause.setOnClickListener(this);
            btnStop.setOnClickListener(this);
    
            //初始化SurfaceHolder类,SurfaceView的控制器
            surfaceHolder = sfvShow.getHolder();
            surfaceHolder.addCallback(this);
            //显示的分辨率,不设置为视频默认
            surfaceHolder.setFixedSize(320,220);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.btnStart:
                    mediaPlayer.start();
                    break;
                case R.id.btnPause:
                    mediaPlayer.pause();
                    break;
                case R.id.btnStop:
                    mediaPlayer.stop();
                    break;
            }
    
        }
    
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.lesson);
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            //设置视频显示在SurfaceView上
            mediaPlayer.setDisplay(surfaceHolder);
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
    
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (mediaPlayer.isPlaying()){
                mediaPlayer.stop();
            }
            mediaPlayer.release();
        }
    }

       运行效果图如下所示:

      

      亲爱的园友们,MediaPlayer播放音频与视频我们就学到这里了,有什么不足的地方欢迎大家提出宝贵意见哦!

  • 相关阅读:
    Web后台项目学习2(代码部分)
    Web后台项目学习
    JDBC
    爬虫视频
    asyncio
    一篇做实验的随笔
    day14
    day13
    html+css 习题
    js-练习题
  • 原文地址:https://www.cnblogs.com/nylcy/p/6561222.html
Copyright © 2011-2022 走看看