Android笔记:视屏播放、VideoView、surfaceView,简易视频播放
一、VideoView方法
十多年的惠农网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整惠农建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“惠农网站设计”,“惠农网站推广”以来,每个客户项目都认真落实执行。
1.activity_video.xml
2.代码
package com.example.vediotest; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.pm.ActivityInfo; import android.view.Menu; import android.view.Window; import android.view.WindowManager; import android.widget.MediaController; import android.widget.VideoView; public class VideoActivity extends Activity { private VideoView videoView; private Uri mUri; private int mPositionWhenPaused; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置成全屏模式 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏 setContentView(R.layout.activity_video); String url = "http://videofile.xxxx.cn/Upload/Video/File/20140411/201404110228168972.mp4"; // String url = // "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf"; mUri = Uri.parse(url); videoView = (VideoView) findViewById(R.id.video_videoView); MediaController mediaController = new MediaController(this); videoView.setMediaController(mediaController); // videoView.setVideoPath("/sdcard/xyx.3gp"); // videoView.setVideoURI(mUri); // videoView.requestFocus(); // videoView.start(); } public void onStart() { // Play Video videoView.setVideoURI(mUri); videoView.start(); super.onStart(); } public void onPause() { // Stop video when the activity is pause. mPositionWhenPaused = videoView.getCurrentPosition(); videoView.stopPlayback(); super.onPause(); } public void onResume() { // Resume video player if (mPositionWhenPaused >= 0) { videoView.seekTo(mPositionWhenPaused); mPositionWhenPaused = -1; } super.onResume(); } public boolean onError(MediaPlayer player, int arg1, int arg2) { return false; } public void onCompletion(MediaPlayer mp) { this.finish(); } }
二、surfaceView方法
(一)
1.activity_video_surface.xml
2.代码
package com.example.vediotest; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnPreparedListener; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class SurfaceVideoActivity extends Activity implements Callback, OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener { private int width = 0; private int height = 0; private MediaPlayer mMediaPlayer = null; private SurfaceView mSurfaceView = null; private SurfaceHolder holder = null; private String path = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_surface); mSurfaceView = (SurfaceView) this.findViewById(R.id.surfaceVideo_surfaceView); holder = mSurfaceView.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 设置风格 } public void playVedio() { try { path = android.os.Environment.getExternalStorageDirectory() + "/moto_0012.3gp"; mMediaPlayer = new MediaPlayer(); // mMediaPlayer.setDataSource(path); String url = "http://videofile.housebox.cn/Upload/Video/File/20140411/201404110228168972.mp4"; // String url = "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf"; mMediaPlayer.setDataSource(this, Uri.parse(url)); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setDisplay(holder); mMediaPlayer.prepare();// 准备 Log.e("TAG-Duration", mMediaPlayer.getDuration() + ""); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); } catch (Exception ex) { } } public void onBufferingUpdate(MediaPlayer mp, int percent) { // TODO Auto-generated method stub Log.i("TAG-onBufferingUpdate", percent + "|" + mMediaPlayer.getCurrentPosition()); } public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub Log.i("TAG-onCompletion", "Completion"); } public void onPrepared(MediaPlayer mp) { // TODO Auto-generated method stub width = mMediaPlayer.getVideoWidth(); height = mMediaPlayer.getVideoHeight(); if (width != 0 && height != 0) { holder.setFixedSize(width, height);// 设置视频高宽 mMediaPlayer.start(); Log.i("TAG-Duration2", mMediaPlayer.getDuration() + ""); } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub playVedio(); } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub Log.i("TAG-surfaceDestroyed", "surfaceDestroyed"); } @Override protected void onPause() { super.onPause(); if (mMediaPlayer != null) { if (mMediaPlayer.isPlaying()) { mMediaPlayer.stop(); } mMediaPlayer.reset(); mMediaPlayer.release(); mMediaPlayer = null; } } }
(二)
activity_video_surface2.xml
2.代码
package com.example.vediotest; import java.io.IOException; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.pm.ActivityInfo; import android.util.Log; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; public class SurfaceVideo2Activity extends Activity implements OnBufferingUpdateListener, OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback { private MediaPlayer mediaPlayer; private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private int videoWidth; private int videoHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_video_surface2); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏 this.surfaceView = (SurfaceView) this.findViewById(R.id.surface2_surfaceView); this.surfaceHolder = this.surfaceView.getHolder(); this.surfaceHolder.addCallback(this); this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Log.v("cat", ">>>create ok."); } private void playVideo() throws IllegalArgumentException, IllegalStateException, IOException { String url = "http://videofile.housebox.cn/Upload/Video/File/20140411/201404110228168972.mp4"; // String url = "http://player.youku.com/player.php/sid/XNDYwOTEzNzQ4/v.swf"; this.mediaPlayer = new MediaPlayer(); // this.mediaPlayer.setDataSource("/sdcard/daoxiang.3gp"); this.mediaPlayer.setDataSource(this, Uri.parse(url)); this.mediaPlayer.setDisplay(this.surfaceHolder); this.mediaPlayer.prepare(); this.mediaPlayer.setOnBufferingUpdateListener(this); this.mediaPlayer.setOnPreparedListener(this); this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); Log.i("mplayer", ">>>play video"); } @Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { Log.i("cat", ">>>surface changed"); } @Override public void surfaceCreated(SurfaceHolder holder) { try { this.playVideo(); } catch (Exception e) { Log.i("cat", ">>>error", e); } Log.i("cat", ">>>surface created"); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.v("mplayer", ">>>surface destroyed"); } @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub } @Override public void onBufferingUpdate(MediaPlayer mp, int percent) { // TODO Auto-generated method stub } @Override public void onPrepared(MediaPlayer arg0) { this.videoWidth = this.mediaPlayer.getVideoWidth(); this.videoHeight = this.mediaPlayer.getVideoHeight(); if (this.videoHeight != 0 && this.videoWidth != 0) { this.surfaceHolder.setFixedSize(this.videoWidth, this.videoHeight); this.mediaPlayer.start(); } } @Override protected void onDestroy() { super.onDestroy(); if (this.mediaPlayer != null) { this.mediaPlayer.release(); this.mediaPlayer = null; } } }
参考资料:
1.http://blog.csdn.net/cynhafa/article/details/6400050
2.http://aina-hk55hk.iteye.com/blog/706060
当前标题:Android笔记:视屏播放、VideoView、surfaceView,简易视频播放
文章路径:http://cdiso.cn/article/ijsjpg.html