使用SurfaceView和MedioPlayer播放视频
2015-04-11 17:14
363 查看
添加权限:
布局:
/SurfaceViewPlayVideo/res/layout/activity_main.xml
源码下载
以上的代码来自李刚老师的疯狂Android讲义。
<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讲义。
相关文章推荐
- 使用MediaPlayer和SurfaceView播放视频
- MediaPlayer使用SurfaceView播放视频的时它们的主要配置
- Android 学习笔记之SurfaceView的使用+如何实现视频播放...
- Android 使用MediaPlayer与SurfaceView进行视频播放
- 使用mediaplayer + surfaceview来播放视频
- android中使用MediaPlayer和SurfaceView播放视频
- 使用mediaplayer + surfaceview来播放视频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- Android使用SurfaceView实现视频播放
- 使用SurfaceView 播放视频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- Android中使用MediaPlayer类和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- 解决Android使用SurfaceView播放视频结束后黑屏问题
- 使用MediaPlayer和SurfaceView播放视频
- Android使用SurfaceView播放视频时横竖屏的调整