利用SurfaceView和MediaPlayer打造一款简易的视频播放器
来源:互联网 发布:中国最新经济数据 编辑:程序博客网 时间:2024/06/05 18:00
大家都知道Android原生的视频播放器是VideoView播放视频,现在第三方的视频播放框架也有好多,但底层都是利用SurfaceView+MediaPlayer来实现的,而Android播放原生控件VideoView就是对surfaceView和MediaPlayer的一层封装。 今天就说一下如何利用SurfaceView和MediaPlayer打造一款简易的视频播放器,播放网络视频。 首先看一下我们的简单的布局文件Xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_play_video" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="ledon.com.retrofitdemo.view.PlayVideoActivity"> <SurfaceView android:id="@+id/surfaceview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /></RelativeLayout>
千万不要忘记添加网络权限在清单中
接下来看看我们在PlayVideoActivity中的具体实现,
package ledon.com.retrofitdemo.view;import android.media.MediaPlayer;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.MotionEvent;import android.view.Surface;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import java.io.IOException;import ledon.com.retrofitdemo.R;import ledon.com.retrofitdemo.base.BaseActivity;public class PlayVideoActivity extends BaseActivity { private SurfaceView surfaceView; private MediaPlayer mediaPlayer; //所有的监听方法都在这个方法中 @Override protected void initListener() { //获取网络视频的url final String url=getIntent().getExtras().getString("url"); //获取SurfaceHolder SurfaceHolder holder = surfaceView.getHolder(); //设置mediaPlayer的监听方法 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { //准备完后,开始播放视频 mediaPlayer.start(); } }); //为surfaceView添加回调方法 holder.addCallback(new SurfaceHolder.Callback() { //当surfaceView创建的时候的回调方法 @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { mediaPlayer.reset(); //将创建好的surfaceHolder放到mediaplayer中 mediaPlayer.setDisplay(surfaceHolder); try { //为mediaplayer添加视频播放源 mediaPlayer.setDataSource(PlayVideoActivity.this, Uri.parse(url)); //异步准备 准备工作在子线程中进行 当播放网络视频时候一般采用此方法 mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } } //当SurfaceView的大小发生改变时候触发该方法 @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } //Surface销毁时回掉 //当Surface销毁时候,同时把MediaPlayer也销毁 @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { if (mediaPlayer!=null){ mediaPlayer.stop(); //释放资源 mediaPlayer.release(); // destroyActivity(); } finish(); } }); surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: if (mediaPlayer.isPlaying()){ mediaPlayer.pause(); }else { mediaPlayer.start(); } break; } return true; } }); } //初始化布局 @Override protected void initLayout(Bundle savedInstanceState) { setContentView(R.layout.activity_play_video); } //初始化surfaceView和mediaplayer @Override protected void initView() { surfaceView = (SurfaceView) findViewById(R.id.surfaceview); mediaPlayer = new MediaPlayer(); }}
到这里,简单的视频播放功能就全部实现了,这里要注意下视频地址:url:http://1792.vod.myqcloud.com/1792_dfce06fe20b711e692fe0785d455c86c.f40.mp4
0 0
- 利用SurfaceView和MediaPlayer打造一款简易的视频播放器
- 利用MediaPlayer和SurfaceView编写简单的视频播放器
- TextureView SurfaceView和MediaPlayer的视频播放
- MediaPlayer和SurfaceView播放视频
- MediaPlayer和SurfaceView播放视频
- MediaPlayer和SurfaceView播放视频
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- iOS开发之模仿语音聊天时,显示的音量图
- WPF Image鼠标进入后改变图片
- 获取shell脚本自身所在目录的Shell脚本分享
- 推荐 11 款 React Native 开源移动 UI 组件
- Unity 5.x 怎么实现动画后退
- 利用SurfaceView和MediaPlayer打造一款简易的视频播放器
- Android resources获得资源(4)
- 数组中出现超过一半的数字
- 设计模式之观察者模式(Observer)
- 团体程序设计天梯赛L1-020帅到没朋友
- CentOS设置默认启动命令行
- tomcat配置cors实现跨域
- java中的四种修饰符详解
- Linux下signal中SIGUSR1使用_sigqueue