使用MediaPlayer和SurfaceView播放视频

转自:http://blog.csdn.net/x605940745/article/details/18302111

使用MediaPlayer播放视频的步骤

     1、创建MediaPlyer的对象,并让他加载指定的视频文件。

     2、在界面布局文件中定义SurfaceView组件,或在程序中创建SurfaceView组件。并为SurfaceView的SurfaceHolder添加Callback监听器。   

     3、调用MediaPlayer对象的setDisplay(Surfaceolder sh)将所播放的视频图像输出到指定的SurfaceView组件

     4、调用MediaPlayer对象的start()、stop()、和pause()方法控制视频的播放


实例:

 

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.   <SurfaceView  
  8.         android:id="@+id/surface1"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_centerInParent="true" />  
  12.   
  13.     <LinearLayout  
  14.         android:id="@+id/linaer1"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"   
  17.         android:orientation="horizontal"  
  18.         android:layout_alignParentBottom="true"  
  19.        >  
  20.        <Button android:id="@+id/start"  
  21.            android:layout_width="wrap_content"  
  22.            android:layout_height="wrap_content"  
  23.            android:text="@string/start"  
  24.            android:layout_weight="1"/>  
  25.        <Button   
  26.            android:id="@+id/pre"  
  27.            android:layout_width="wrap_content"  
  28.            android:layout_height="wrap_content"  
  29.            android:text="@string/pre"  
  30.            android:layout_weight="1"/>  
  31.              <Button   
  32.            android:id="@+id/stop"  
  33.            android:layout_width="wrap_content"  
  34.            android:layout_height="wrap_content"  
  35.            android:text="@string/stop"  
  36.            android:layout_weight="1"/>  
  37.          
  38.           
  39.     </LinearLayout>  
  40.         
  41.   
  42. </RelativeLayout>  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.android.xiong.surfaceviewtest;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import android.app.Activity;  
  6. import android.media.AudioManager;  
  7. import android.media.MediaPlayer;  
  8. import android.os.Bundle;  
  9. import android.util.DisplayMetrics;  
  10. import android.view.Menu;  
  11. import android.view.SurfaceHolder;  
  12. import android.view.SurfaceView;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.view.ViewGroup.LayoutParams;  
  16. import android.view.WindowManager;  
  17. import android.widget.Button;  
  18.   
  19. public class MainActivity extends Activity implements OnClickListener {  
  20.   
  21.     private SurfaceView surface1;  
  22.     private Button start, stop, pre;  
  23.     private MediaPlayer mediaPlayer1;  
  24.   
  25.     private int postion = 0;  
  26.   
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.activity_main);  
  31.         surface1 = (SurfaceView) findViewById(R.id.surface1);  
  32.         start = (Button) findViewById(R.id.start);  
  33.         stop = (Button) findViewById(R.id.stop);  
  34.         pre = (Button) findViewById(R.id.pre);  
  35.         mediaPlayer1 = new MediaPlayer();  
  36.         //设置播放时打开屏幕  
  37.         surface1.getHolder().setKeepScreenOn(true);  
  38.         surface1.getHolder().addCallback(new SurfaceViewLis());  
  39.         start.setOnClickListener(this);  
  40.         stop.setOnClickListener(this);  
  41.         pre.setOnClickListener(this);  
  42.     }  
  43.   
  44.     @Override  
  45.     public boolean onCreateOptionsMenu(Menu menu) {  
  46.         getMenuInflater().inflate(R.menu.main, menu);  
  47.         return true;  
  48.     }  
  49.   
  50.     @Override  
  51.     public void onClick(View v) {  
  52.         switch (v.getId()) {  
  53.         case R.id.start:  
  54.             try {  
  55.                 play();  
  56.             } catch (IllegalArgumentException e) {  
  57.                 // TODO Auto-generated catch block  
  58.                 e.printStackTrace();  
  59.             } catch (SecurityException e) {  
  60.                 // TODO Auto-generated catch block  
  61.                 e.printStackTrace();  
  62.             } catch (IllegalStateException e) {  
  63.                 // TODO Auto-generated catch block  
  64.                 e.printStackTrace();  
  65.             } catch (IOException e) {  
  66.                 // TODO Auto-generated catch block  
  67.                 e.printStackTrace();  
  68.             }  
  69.             break;  
  70.         case R.id.pre:  
  71.             if (mediaPlayer1.isPlaying()) {  
  72.                 mediaPlayer1.pause();  
  73.             } else {  
  74.                 mediaPlayer1.start();  
  75.             }  
  76.             break;  
  77.         case R.id.stop:  
  78.             if (mediaPlayer1.isPlaying())  
  79.                 mediaPlayer1.stop();  
  80.             break;  
  81.         default:  
  82.             break;  
  83.         }  
  84.   
  85.     }  
  86.   
  87.     public void play() throws IllegalArgumentException, SecurityException,  
  88.             IllegalStateException, IOException {  
  89.         mediaPlayer1.reset();  
  90.         mediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  91.         mediaPlayer1.setDataSource("/mnt/sdcard/通话录音/1.mp4");  
  92.         // 把视频输出到SurfaceView上  
  93.         mediaPlayer1.setDisplay(surface1.getHolder());  
  94.         mediaPlayer1.prepare();  
  95.         mediaPlayer1.start();  
  96.     }  
  97.   
  98.     private class SurfaceViewLis implements SurfaceHolder.Callback {  
  99.   
  100.         @Override  
  101.         public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  102.                 int height) {  
  103.   
  104.         }  
  105.   
  106.         @Override  
  107.         public void surfaceCreated(SurfaceHolder holder) {  
  108.             if (postion == 0) {  
  109.                 try {  
  110.                     play();  
  111.                     mediaPlayer1.seekTo(postion);  
  112.                 } catch (IllegalArgumentException e) {  
  113.                     // TODO Auto-generated catch block  
  114.                     e.printStackTrace();  
  115.                 } catch (SecurityException e) {  
  116.                     // TODO Auto-generated catch block  
  117.                     e.printStackTrace();  
  118.                 } catch (IllegalStateException e) {  
  119.                     // TODO Auto-generated catch block  
  120.                     e.printStackTrace();  
  121.                 } catch (IOException e) {  
  122.                     // TODO Auto-generated catch block  
  123.                     e.printStackTrace();  
  124.                 }  
  125.   
  126.             }  
  127.   
  128.         }  
  129.   
  130.         @Override  
  131.         public void surfaceDestroyed(SurfaceHolder holder) {  
  132.   
  133.         }  
  134.   
  135.     }  
  136.   
  137.     @Override  
  138.     protected void onPause() {  
  139.         if (mediaPlayer1.isPlaying()) {  
  140.             // 保存当前播放的位置  
  141.             postion = mediaPlayer1.getCurrentPosition();  
  142.             mediaPlayer1.stop();  
  143.         }  
  144.         super.onPause();  
  145.     }  
  146.   
  147.     @Override  
  148.     protected void onDestroy() {  
  149.         if (mediaPlayer1.isPlaying())  
  150.             mediaPlayer1.stop();  
  151.         mediaPlayer1.release();  
  152.         super.onDestroy();  
  153.     }  
  154.   
  155. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值