zoukankan      html  css  js  c++  java
  • MediaPlayer播放音频与视频

    .相关方法详解


    1)获得MediaPlayer实例:

    可以直接new或者调用create方法创建:

    MediaPlayer mp = new MediaPlayer();
    MediaPlayer mp = MediaPlayer.create(this, R.raw.test);  //无需再调用setDataSource

    另外create还有这样的形式: create(Context context, Uri uri, SurfaceHolder holder) 通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器


    2)设置播放文件:

    //①raw下的资源:
    MediaPlayer.create(this, R.raw.test);
    
    //②本地文件路径:
    mp.setDataSource("/sdcard/test.mp3");
    
    //③网络URL文件:
    mp.setDataSource("http://www.xxx.com/music/test.mp3");

    另外setDataSource()方法有多个,里面有这样一个类型的参数:FileDescriptor,在使用这个 API的时候,需要把文件放到res文件夹平级的assets文件夹里,然后使用下述代码设置DataSource:

    AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
    m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());

    3)其他方法

    • getCurrentPosition( ):得到当前的播放位置
    • getDuration() :得到文件的时间
    • getVideoHeight() :得到视频高度
    • getVideoWidth() :得到视频宽度
    • isLooping():是否循环播放
    • isPlaying():是否正在播放
    • pause():暂停
    • prepare():准备(同步)
    • prepareAsync():准备(异步)
    • release():释放MediaPlayer对象
    • reset():重置MediaPlayer对象
    • seekTo(int msec):指定播放的位置(以毫秒为单位的时间)
    • setAudioStreamType(int streamtype):指定流媒体的类型
    • setDisplay(SurfaceHolder sh):设置用SurfaceHolder来显示多媒体
    • setLooping(boolean looping):设置是否循环播放
    • setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener): 网络流媒体的缓冲监听
    • setOnCompletionListener(MediaPlayer.OnCompletionListener listener): 网络流媒体播放结束监听
    • setOnErrorListener(MediaPlayer.OnErrorListener listener): 设置错误信息监听
    • setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener): 视频尺寸监听
    • setScreenOnWhilePlaying(boolean screenOn):设置是否使用SurfaceHolder显示
    • setVolume(float leftVolume, float rightVolume):设置音量
    • start():开始播放
    • stop():停止播放

    2.使用代码示例

    示例一:使用MediaPlayer播放音频:

    运行效果图

    关键代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        private Button btn_play;
        private Button btn_pause;
        private Button btn_stop;
        private MediaPlayer mPlayer = null;
        private boolean isRelease = true;   //判断是否MediaPlayer是否释放的标志
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bindViews();
        }
    
        private void bindViews() {
            btn_play = (Button) findViewById(R.id.btn_play);
            btn_pause = (Button) findViewById(R.id.btn_pause);
            btn_stop = (Button) findViewById(R.id.btn_stop);
    
            btn_play.setOnClickListener(this);
            btn_pause.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_play:
                    if(isRelease){
                        mPlayer = MediaPlayer.create(this,R.raw.fly);
                        isRelease = false;
                    }
                    mPlayer.start();   //开始播放
                    btn_play.setEnabled(false);
                    btn_pause.setEnabled(true);
                    btn_stop.setEnabled(true);
                    break;
                case R.id.btn_pause:
                    mPlayer.pause();     //停止播放
                    btn_play.setEnabled(true);
                    btn_pause.setEnabled(false);
                    btn_stop.setEnabled(false);
                    break;
                case R.id.btn_stop:
                    mPlayer.reset();     //重置MediaPlayer
                    mPlayer.release();   //释放MediaPlayer
                    isRelease = true;
                    btn_play.setEnabled(true);
                    btn_pause.setEnabled(false);
                    btn_stop.setEnabled(false);
                    break;
            }
        }
    }
     

    注意事项:

    播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法! 另外贴下官方文档中,从其他两种途径播放音频的示例代码:

    本地Uri

    Uri myUri = ....; // initialize Uri here
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(getApplicationContext(), myUri);
    mediaPlayer.prepare();
    mediaPlayer.start();

    外部URL

    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();
  • 相关阅读:
    SSH移植
    ARM PPC 交叉编译环境搭建
    CEOI2020 作战记录&题解
    [NOI2019]序列 题解
    Atcoder Dwango Programming Contest 6th 题解
    CF516D Drazil and Morning Exercise 题解
    CF568E Longest Increasing Subsequence 题解
    [IOI2013]robots 题解
    SPOJ22549 DIVFACT4
    CF590E Birthday 题解
  • 原文地址:https://www.cnblogs.com/feng747/p/14910342.html
Copyright © 2011-2022 走看看