Android 향 상 된 MediaPlayer 오디 오 비디오 재생

8315 단어 AndroidMediaPlayer
앞의 글 은 안 드 로 이 드 인터페이스의 입문 기술 을 상세 하 게 소개 했다.여러분 들 이 보고 따라 연습 한 후에 자주 사용 하 는 Layout 와 View 에 대해 어느 정도 알 게 될 것 이 라 고 믿 습 니 다.그 다음 에 소개 화면 을 강조 하지 않 고 구체 적 인 흔 한 기능 에 대해 전개 할 것 입 니 다.
미디어 플레이어 의 사용 을 소개 합 니 다.MediaPlayer 는 오디 오 와 동 영상 을 재생 할 수 있 고 VideoView 를 통 해 동 영상 을 재생 할 수도 있다.VideoView 는 MediaPlayer 보다 간단 하고 사용 하기 쉽 지만 맞 춤 형 은 MediaPlayer 를 사용 하 는 것 보다 못 하 므 로 상황 에 따라 선택해 야 한다.미디어 플레이어 가 오디 오 를 재생 하 는 것 은 비교적 간단 하지만 영상 을 재생 하려 면 Surface View 가 필요 하 다.SurfaceView 는 일반적인 사용자 정의 View 보다 그림 의 장점 이 있 으 며 완전한 OpenGL ES 라 이브 러 리 를 지원 합 니 다.
먼저 본 프로그램의 실행 결 과 를 캡 처 한 그림 을 붙 입 니 다.위 에는 오디 오 재생/정지 입 니 다.SeekBar 로 진 도 를 조절 할 수 있 습 니 다.아래 는 재생/정지 영상 이자 SeekBar 로 진 도 를 조절 할 수 있 습 니 다.
 
main.xml 의 원본 코드 는 다음 과 같 습 니 다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical">
 <SeekBar android:id="@+id/SeekBar01" android:layout_height="wrap_content"
 android:layout_width="fill_parent"></SeekBar>
 <LinearLayout android:id="@+id/LinearLayout02"
 android:layout_width="wrap_content" android:layout_height="wrap_content">
 <Button android:id="@+id/Button01" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:text="    "></Button>
 <Button android:id="@+id/Button02" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:text="    "></Button>
 </LinearLayout>
 <SeekBar android:id="@+id/SeekBar02" android:layout_height="wrap_content"
 android:layout_width="fill_parent"></SeekBar>

 <SurfaceView android:id="@+id/SurfaceView01"
 android:layout_width="fill_parent" android:layout_height="250px"></SurfaceView>
 <LinearLayout android:id="@+id/LinearLayout02"
 android:layout_width="wrap_content" android:layout_height="wrap_content">
 <Button android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:id="@+id/Button03"
  android:text="    "></Button>
 <Button android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:text="    " android:id="@+id/Button04"></Button>
 </LinearLayout>
</LinearLayout>

자바 부분 소스 코드 가 좀 길 기 때문에 여러분 이 인내심 을 가지 고 해석 해 야 합 니 다.상세 한 절 차 는 다음 과 같 습 니 다.

package com.testMedia;
import java.io.IOException; 
import java.util.Timer;
import java.util.TimerTask;
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; 
import android.widget.SeekBar;
import android.widget.Toast; 


public class testMedia extends Activity {
  /** Called when the activity is first created. */ 
 private SeekBar skb_audio=null;
  private Button btn_start_audio = null; 
  private Button btn_stop_audio = null;

  private SeekBar skb_video=null;
  private Button btn_start_video = null; 
  private Button btn_stop_video = null;
  private SurfaceView surfaceView; 
  private SurfaceHolder surfaceHolder; 
  
  private MediaPlayer m = null; 
  private Timer mTimer;
  private TimerTask mTimerTask;
  
  private boolean isChanging=false;//    ,      SeekBar       
   @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    
    //----------Media    ---------//
    m=new MediaPlayer();
    
    //          
    m.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
  @Override
  public void onCompletion(MediaPlayer arg0) {
  Toast.makeText(testMedia.this, "  ", 1000).show();
  m.release();
  }
    });
    
   //----------         ---------//
    mTimer = new Timer();
    mTimerTask = new TimerTask() {
      @Override
      public void run() { 
       if(isChanging==true)
       return;
       
       if(m.getVideoHeight()==0)
       skb_audio.setProgress(m.getCurrentPosition());
       else 
       skb_video.setProgress(m.getCurrentPosition());
      }
    };

    mTimer.schedule(mTimerTask, 0, 10);
 
    btn_start_audio = (Button) this.findViewById(R.id.Button01); 
    btn_stop_audio = (Button) this.findViewById(R.id.Button02); 
    btn_start_audio.setOnClickListener(new ClickEvent());
    btn_stop_audio.setOnClickListener(new ClickEvent());
    skb_audio=(SeekBar)this.findViewById(R.id.SeekBar01);
    skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
    
    btn_start_video = (Button) this.findViewById(R.id.Button03); 
    btn_stop_video = (Button) this.findViewById(R.id.Button04); 
    btn_start_video.setOnClickListener(new ClickEvent());
    btn_stop_video.setOnClickListener(new ClickEvent());
    skb_video=(SeekBar)this.findViewById(R.id.SeekBar02);
    skb_video.setOnSeekBarChangeListener(new SeekBarChangeEvent());
    surfaceView = (SurfaceView) findViewById(R.id.SurfaceView01);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.setFixedSize(100, 100);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  } 
 /*
  *       
  */
 class ClickEvent implements View.OnClickListener{
 @Override
 public void onClick(View v) {
 if(v==btn_start_audio)
 {
  m.reset();//          
  m=MediaPlayer.create(testMedia.this, R.raw.big);//    
  skb_audio.setMax(m.getDuration());//  SeekBar   
  try {   
  m.prepare(); //  
  } catch (IllegalStateException e) {  
  // TODO Auto-generated catch block  
  e.printStackTrace();  
  } catch (IOException e) {  
  // TODO Auto-generated catch block  
  e.printStackTrace();  
  } 
  m.start(); //  
 }
 else if(v==btn_stop_audio || v==btn_stop_video)
 {
  m.stop();
 }
 else if(v==btn_start_video)
 {
  m.reset();//          
  m=MediaPlayer.create(testMedia.this, R.raw.test);//    
  skb_video.setMax(m.getDuration());//  SeekBar   
  m.setAudioStreamType(AudioManager.STREAM_MUSIC);
  m.setDisplay(surfaceHolder);//    
  
  try {
    m.prepare();
    
  } catch (IllegalArgumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  } catch (IllegalStateException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  m.start();
 }
 }
 }
 /*
  * SeekBar      
  */
 class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener{
 @Override
 public void onProgressChanged(SeekBar seekBar, int progress,
  boolean fromUser) {
 // TODO Auto-generated method stub
 }
 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {
   isChanging=true;
 }

 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
 m.seekTo(seekBar.getProgress());
   isChanging=false; 
 }
 }
}

본 논문 에서 말 한 미디어 플레이어 의 사용 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기