Android开发之初探视频的播放


Android下视频的播放跟音频的播放是有一些区别的。需要有一个空间来存放视频文件。关于视频的播放其实费了一点功夫,程序代码很简单,但是对于播放,可能会出这样那样的问题,现在总结一下,步骤如下:

1.创建sdcard的镜像文件,可以在命令行下输入mksdcard 512M C:\sdcard.img

2.在Eclipse的window下找到Preferences菜单,然后点击Android->launch然后在Default emulator Options中填上“-sdcard C:\sdcard.img”

3.运行模拟器

有些时候,这样并不能成功,可以直接push到模拟器中。注意一定要选择一个小一点的3gp文件。

代码如下:

  1. /* 
  2.  *  Android开发之视频的播放 
  3.  *  MyVideo.java 
  4.  *  Created on: 2011-8-24 
  5.  *  Author: blueeagle 
  6.  *  Email: liujiaxiang@gmail.com 
  7.  */  
  8. package com.blueeagle;  
  9.   
  10. import android.app.Activity;  
  11. import android.graphics.PixelFormat;  
  12. import android.media.AudioManager;  
  13. import android.media.MediaPlayer;  
  14. import android.os.Bundle;  
  15. import android.view.SurfaceHolder;  
  16. import android.view.SurfaceView;  
  17. import android.view.View;  
  18. import android.view.View.OnClickListener;  
  19. import android.widget.Button;  
  20.   
  21. public class MyVideo extends Activity implements OnClickListener,SurfaceHolder.Callback{      
  22.     String path = "/data/222.3gp";  
  23.     Button play_button;  
  24.     Button pause_button;  
  25.     boolean isPause = false;  
  26.     SurfaceView mySurfaceView;  
  27.     MediaPlayer myMediaPlayer;  
  28.     SurfaceHolder surfaceHolder;  
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);  
  33.         play_button = (Button)findViewById(R.id.myButton);  
  34.         play_button.setOnClickListener(this);  
  35.         pause_button = (Button)findViewById(R.id.myButton2);  
  36.         pause_button.setOnClickListener(this);  
  37.           
  38.         getWindow().setFormat(PixelFormat.UNKNOWN);  
  39.         mySurfaceView = (SurfaceView)findViewById(R.id.mySurfaceView);  
  40.         surfaceHolder = mySurfaceView.getHolder();  
  41.         surfaceHolder.addCallback(this);  
  42.         surfaceHolder.setFixedSize(176,144);  
  43.         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  44.         myMediaPlayer = new MediaPlayer();  
  45.     }  
  46.     @Override  
  47.     public void onClick(View v) {  
  48.         // TODO Auto-generated method stub   
  49.         if(v==play_button)  
  50.         {  
  51.             isPause = false;  
  52.             System.out.println(path);  
  53.             playVideo(path);  
  54.         }  
  55.         else if(v==pause_button){  
  56.             if(isPause == false){  
  57.                 myMediaPlayer.pause();  
  58.                 isPause = true;  
  59.             }  
  60.             else{  
  61.                 myMediaPlayer.start();  
  62.                 isPause = false;  
  63.             }  
  64.         }         
  65.     }  
  66.     private void playVideo(String strPath){  
  67.         if(myMediaPlayer.isPlaying()==true){  
  68.             myMediaPlayer.reset();  
  69.         }  
  70.         myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  71.         myMediaPlayer.setDisplay(surfaceHolder);//设置Video影片以SurfaceHolder播放   
  72.         try{  
  73.             myMediaPlayer.setDataSource(strPath);  
  74.             myMediaPlayer.prepare();  
  75.         }  
  76.         catch(Exception e){  
  77.             e.printStackTrace();  
  78.         }  
  79.         myMediaPlayer.start();  
  80.     }  
  81.     @Override  
  82.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  83.             int height) {  
  84.         // TODO Auto-generated method stub   
  85.     }  
  86.     @Override  
  87.     public void surfaceCreated(SurfaceHolder holder) {  
  88.         // TODO Auto-generated method stub   
  89.     }  
  90.     @Override  
  91.     public void surfaceDestroyed(SurfaceHolder holder) {  
  92.         // TODO Auto-generated method stub   
  93.     }  
  94. }  

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.       
  8.     <SurfaceView  
  9.     android:id = "@+id/mySurfaceView"  
  10.     android:layout_width="320px"  
  11.     android:layout_height="200px">  
  12.     </SurfaceView>  
  13.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  14.     android:layout_width="fill_parent"  
  15.     android:layout_height="wrap_content"  
  16.     >  
  17. <Button  
  18.     android:id="@+id/myButton"    
  19.     android:layout_width="wrap_content"   
  20.     android:layout_height="wrap_content"   
  21.     android:text="播放"/>  
  22.  <Button  
  23.     android:id="@+id/myButton2"    
  24.     android:layout_width="wrap_content"   
  25.     android:layout_height="wrap_content"   
  26.     android:text="暂停"/>   
  27. </LinearLayout>  
  28. </LinearLayout>  

运行结果如下图:

相关内容