MediaPlayer+SurfaceView实现视频播放器
我这个人走得很慢,但是我从不后退。
之前给大家分享过使用MediaController类实现视频播放器,今天呢给大家分享可以自定义的视频播放器,那就是使用MediaPlayer+SurfaceView
来实现。废话不多说,直接上代码。
目录
- 1. 设计思路
- 2. 设计布局
- 3. 实现逻辑
- 4. 权限获取
- 5. Demo展示
1. 设计思路
使用 MediaPlayer+SurfaceView
实现视频播放器的流程如图所示,在学习音视频播放器的时候,一个老师画的图,在此直接借用。
2. 设计布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><SurfaceViewandroid:id="@+id/surfaceView"android:layout_weight="10"android:layout_width="wrap_content"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="horizontal"><Buttonandroid:id="@+id/but_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="Play"/><!-- 暂停按钮--><Buttonandroid:id="@+id/but_pause"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="暂停"/><Buttonandroid:id="@+id/but_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="停止"/></LinearLayout>
</LinearLayout>
3. 实现逻辑
加入了一些事件监听器
,可以选择性更改。
package com.xiaozeng.videoplayerdemo3;
。。。
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{private Button play,pause,stop;private boolean onPlay = true;private MediaPlayer mediaPlayer;private SurfaceHolder surfaceHolder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示SurfaceView surfaceView = findViewById(R.id.surfaceView);surfaceView.getHolder().addCallback(this);surfaceHolder = surfaceView.getHolder(); //主要是将Surfaceview与mediaplayer关联起来mediaPlayer = new MediaPlayer();// mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置多媒体类型//设置完成事件监听器/* mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {Toast.makeText(MainActivity.this,"视频播放完毕",Toast.LENGTH_SHORT).show();}});*////控制视频的播放、暂停、停止play = findViewById(R.id.but_play);pause = findViewById(R.id.but_pause);stop = findViewById(R.id.but_stop);play.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(onPlay){play();onPlay=false;//表示视频处于播放状态}else {mediaPlayer.start();}}});pause.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.pause();}}});stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.stop();onPlay = true;}}});}//播放方法public void play(){mediaPlayer.reset();//重置mediaplayer对象mediaPlayer.setDisplay(surfaceHolder);//把视频画面try {mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/out.mp4");mediaPlayer.prepare();}catch (Exception e){e.printStackTrace();}mediaPlayer.start();}@Overrideprotected void onDestroy() {super.onDestroy();if(mediaPlayer != null){if (mediaPlayer.isPlaying()){mediaPlayer.stop();}mediaPlayer.release();// mediaPlayer = null;}}@Overridepublic void surfaceCreated(@NonNull SurfaceHolder holder) {//启动绘图的线程。mediaPlayer.setDisplay(surfaceHolder);play(); //起播播放}@Overridepublic void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {//surface尺寸发生改变的时候调用,如横竖屏切换。}@Overridepublic void surfaceDestroyed(@NonNull SurfaceHolder holder) {/*mediaPlayer.release();mediaPlayer=null;*/}
}
4. 权限获取
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
5. Demo展示
MediaPlayer+SurfaceView实现视频播放器相关推荐
- 采用Android的MediaPlayer+SurfaceView设计视频播放器
前言 android视频播放有很多方式(自带videoView等),这里简单说其中一种:MediaPlayer+SurfaceView,一个播放音频,一个播放视频(图像). 大体结构图 BaseMed ...
- android播放器竖屏,SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,
MNVideoPlayer SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,手势快进快退.调节音量,亮度等.之前也发布过一个视频播放列表, 项目截图: 使用步骤: ...
- 安卓使用MediaPlayer自定义音频视频播放器
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓使用MediaPlayer,一般还要配置一个播放画面SurfaceView,和一个进度条SeekBar. 视频的播放会更改进度条的进度,也可以手动 ...
- MediaPlayer+TextureView实现视频播放器
Android中实现视频播放器的途径有两种: 使用VideoView 通过MediaPlayer + SurfaceView/ TextureView 1. VideoView VideoView使用 ...
- android 播放器 素材,【图片】【Android SurfaceView】视频播放器 简单例子_二次元的程序员吧_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.TestVedioActivity.Java package com.open_open.android_ch14_2; import android ...
- 【Android SurfaceView】视频播放器 简单例子
找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码! 还有的 我也是醉了!把自己以前的笔记发一下吧, 虽然有缺陷: 1,横屏切换的时候,线程会死掉,不能激活... (已经搞定了!谢谢各位d ...
- android中使用SurfaceView做视频播放器--视频切换无缝连接
Android中的视频用到的有view.SurfaceHolder和view.SurfaceView,还有就是用到了MediaPlayer.OnBufferingUpdateListener和Medi ...
- Android系列之利用SurfaceView实现视频播放器
xml配置文件的权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /& ...
- Android MediaPlayer本地视频播放器
该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...
最新文章
- 2021年春季学期-信号与系统-第七次作业参考答案-第七小题
- 使用Oracle LogMiner分析archived log
- mysql基础语法(常用)
- Android MVC模式
- hyperv的安装与使用
- 京东方OLED屏幕无缘iPhone 12首批供货,因测试未通过
- 经典机器学习系列(六)【集成学习】
- spline: 计算机曲线简史(转载)
- 互动快报读报软件绿色版 v5.061
- u3d_fw 框架使用
- Nginx 启动报 bind() to 0.0.0.0:XXXX failed (13: Permission denied)
- icc校色文件使用教程_Windows7色彩管理显示器ICC设置方法
- ai怎么取消颗粒效果_怎么用AI制作粒子消散效果字体?
- java.sql.SQLException: The server time zone value‘xxxxxxxx‘ is unrecognized
- Java之lambda表达式
- html 同字形布局结构,网页的布局
- 金蝶9.1 mdac安装 question
- 汽车变速箱前后面孔系钻削攻丝组合机床设计 (生产率计算卡 论文 CAD图纸……)
- 我眼中未来的计算机资料,我心目中未来的计算机
- 吃一堑长一智!java环境变量配置失败了怎么办