您的位置:首页 > 运维架构

使用SurfaceView和MedioPlayer播放视频

2015-04-11 17:14 363 查看
添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


布局:

/SurfaceViewPlayVideo/res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="360dp" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<ImageButton
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" />

<ImageButton
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pause" />

<ImageButton
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop" />
</LinearLayout>

</RelativeLayout>
/SurfaceViewPlayVideo/src/com/lxm/surfaceviewplayvideo/MainActivity.java
<pre name="code" class="java">package com.lxm.surfaceviewplayvideo;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.ImageButton;
//注意这里别导错
import android.widget.RelativeLayout.LayoutParams;

public class MainActivity extends Activity implements OnClickListener {
ImageButton play, pause, stop;
SurfaceView surfaceView;
MediaPlayer mPlayer;
int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play = (ImageButton) findViewById(R.id.play);
pause = (ImageButton) findViewById(R.id.pause);
stop = (ImageButton) findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
mPlayer = new MediaPlayer();
surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceListener());
}
private class SurfaceListener implements SurfaceHolder.Callback{

@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
if (position > 0){
play();
// 并直接从指定位置开始播放
mPlayer.seekTo(position
4000
);
position = 0;

}
} catch (Exception e) {
e.printStackTrace();
}

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

}
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
// 播放按钮被单击
case R.id.play:
play();
break;
// 暂停按钮被单击
case R.id.pause:
if (mPlayer.isPlaying()) {
mPlayer.pause();
} else {
mPlayer.start();
}
break;
// 停止按钮被单击
case R.id.stop:
if (mPlayer.isPlaying())
mPlayer.stop();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void play() throws Exception{
mPlayer.reset();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
String mp4Path = Environment.getExternalStorageDirectory()+"/mv";
mPlayer.setDataSource(mp4Path+"/Roar.mp4");
// 把视频画面输出到SurfaceView
mPlayer.setDisplay(surfaceView.getHolder());
mPlayer.prepare();
// 获取窗口管理器
WindowManager wManager = getWindowManager();
DisplayMetrics metrics = new DisplayMetrics();
// 获取屏幕大小
wManager.getDefaultDisplay().getMetrics(metrics);
// 设置视频保持纵横比缩放到占满整个屏幕
surfaceView.setLayoutParams(new LayoutParams(metrics.widthPixels
, mPlayer.getVideoHeight() * metrics.widthPixels
/ mPlayer.getVideoWidth()));
mPlayer.start();
}

@Override
protected void onPause() {
if (mPlayer.isPlaying()){
// 保存当前的播放位置
position = mPlayer.getCurrentPosition();
mPlayer.stop();
}
super.onPause();
}

@Override
protected void onDestroy() {
// 停止播放
if (mPlayer.isPlaying()) mPlayer.stop();
// 释放资源
mPlayer.release();
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}



源码下载

以上的代码来自李刚老师的疯狂Android讲义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: