Android 향 상 된 MediaPlayer 오디 오 비디오 재생
8315 단어 AndroidMediaPlayer
미디어 플레이어 의 사용 을 소개 합 니 다.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;
}
}
}
본 논문 에서 말 한 미디어 플레이어 의 사용 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.