MediaPlayer播放视频

1.MediaPlayer播放视频

音乐播放遵循了下面的 4 步流程。

   1) 创建 MediaPlayer 对象;

   2) 调用 setDataSource()设置数据源;

   3) 调用 prepare()方法;

   4) 调用 start()开始播放。

(1). 从资源文件中播放  

    多媒体文件可以放在资源文件夹/res/raw目录下,然后通过MediaPlayer.create()函数创建MediaPlayer对象。由于create(Context ctx, int file)函数中已经包含了多媒体文件的位置参数file,因此无须再设置数据源,调用prepare()函数,这些操作在create()函数的内部已经完成了。获得MediaPlayer对象后直接调用start()函数即可播放音乐。

   1.private void playFromRawFile() {

  //使用 MediaPlayer.create()获得的MediaPlayer对象默认设置了数据源并初始化完成

   2.MediaPlayer player = MediaPlayer.create(this, R.raw.test);

   3.player.start(); }

(2). 从文件系统播放 

    如果开发一个多媒体播放器,一定需要具备从文件系统播放音乐的能力。这时不能再使用 MediaPlayer.create()方法创建MediaPlayer对象,而是使用 new操作符创建MediaPlayer对象。获得MediaPlayer对象之后,需要依次调用 setDataSource()和 prepare()方法,以便设置数据源,让播放器完成准备工作。从文件系统播放 MP3 文件的代码如下所示:

  1. private void playFromSDCard() {
  2.    try {
  3.          MediaPlayer player = new MediaPlayer();
	//设置数据源
  4.	        player.setDataSource("/sdcard/a.mp3");
  5.        player.prepare();
  6.      player.start();
  7.    } catch (IllegalArgumentException e) {
  8.         e.printStackTrace();
  9.    } catch (IllegalStateException e) {
  10.       e.printStackTrace();
  11.  } catch (IOException e) {
  12.      e.printStackTrace();
  13.  }
  14.}    

(3).  从网络播放

    某些平台提供的多媒体框架,并不支持“边下载,边播放”的特性,而是将整个媒体文件下载到本地后再开始播放,用户体验较差。

     在应用层实现“边下载,边播放”的特性是一项比较复杂的工作,一方面需要自己处理媒体文件的下载和缓冲,另一方面还需要处理媒体文件格式的解析,以及音频数据的拆包和拼装等操作。

    Android 多媒体框架带来了完全不一样的网络多媒体播放体验。在播放网络媒体文件时, 下载、播放等工作均由底层的 PVPlayer 来完成,在应用层开发者只需要设置网络文件的数据源即可。从网络播放媒体文件的代码如下所示:

    1.  private void playFromNetwork() {
    2.             String path = "http://website/path/file.mp3";
    3.       try {
    4.             MediaPlayer player = new MediaPlayer();
    5.             player.setDataSource(path);
    6.             player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    7.             public void onPrepared(MediaPlayer arg0) {
	8.             arg0.start();
	9.             }
	10.           });
	       //播放网络上的音乐,不能调用同步prepare()方法,只能使用prepareAsync()方法
	11.  player.prepareAsync();
	12.  } catch (IllegalArgumentException e) {
	13.  e.printStackTrace();
	14.  } catch (IllegalStateException e) {
	15.  e.printStackTrace();
	16.  } catch (IOException e) {
	17.  e.printStackTrace();
	18.  } 
    19.}    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值