我这个人走得很慢,但是我从不后退。

之前给大家分享过使用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实现视频播放器相关推荐

  1. 采用Android的MediaPlayer+SurfaceView设计视频播放器

    前言 android视频播放有很多方式(自带videoView等),这里简单说其中一种:MediaPlayer+SurfaceView,一个播放音频,一个播放视频(图像). 大体结构图 BaseMed ...

  2. android播放器竖屏,SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,

    MNVideoPlayer SurfaceView + MediaPlayer 实现的视频播放器,支持横竖屏切换,手势快进快退.调节音量,亮度等.之前也发布过一个视频播放列表, 项目截图: 使用步骤: ...

  3. 安卓使用MediaPlayer自定义音频视频播放器

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓使用MediaPlayer,一般还要配置一个播放画面SurfaceView,和一个进度条SeekBar. 视频的播放会更改进度条的进度,也可以手动 ...

  4. MediaPlayer+TextureView实现视频播放器

    Android中实现视频播放器的途径有两种: 使用VideoView 通过MediaPlayer + SurfaceView/ TextureView 1. VideoView VideoView使用 ...

  5. android 播放器 素材,【图片】【Android SurfaceView】视频播放器 简单例子_二次元的程序员吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.TestVedioActivity.Java package com.open_open.android_ch14_2; import android ...

  6. 【Android SurfaceView】视频播放器 简单例子

    找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码! 还有的 我也是醉了!把自己以前的笔记发一下吧, 虽然有缺陷: 1,横屏切换的时候,线程会死掉,不能激活...  (已经搞定了!谢谢各位d ...

  7. android中使用SurfaceView做视频播放器--视频切换无缝连接

    Android中的视频用到的有view.SurfaceHolder和view.SurfaceView,还有就是用到了MediaPlayer.OnBufferingUpdateListener和Medi ...

  8. Android系列之利用SurfaceView实现视频播放器

    xml配置文件的权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /& ...

  9. Android MediaPlayer本地视频播放器

    该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第七小题
  2. 使用Oracle LogMiner分析archived log
  3. mysql基础语法(常用)
  4. Android MVC模式
  5. hyperv的安装与使用
  6. 京东方OLED屏幕无缘iPhone 12首批供货,因测试未通过
  7. 经典机器学习系列(六)【集成学习】
  8. spline: 计算机曲线简史(转载)
  9. 互动快报读报软件绿色版 v5.061
  10. u3d_fw 框架使用
  11. Nginx 启动报 bind() to 0.0.0.0:XXXX failed (13: Permission denied)
  12. icc校色文件使用教程_Windows7色彩管理显示器ICC设置方法
  13. ai怎么取消颗粒效果_怎么用AI制作粒子消散效果字体?
  14. java.sql.SQLException: The server time zone value‘xxxxxxxx‘ is unrecognized
  15. Java之lambda表达式
  16. html 同字形布局结构,网页的布局
  17. 金蝶9.1 mdac安装 question
  18. 汽车变速箱前后面孔系钻削攻丝组合机床设计 (生产率计算卡 论文 CAD图纸……)
  19. 我眼中未来的计算机资料,我心目中未来的计算机
  20. 吃一堑长一智!java环境变量配置失败了怎么办

热门文章

  1. 大学四年努力学好编程
  2. 京东商品SKU数据采集方法
  3. linux防火墙过滤规则
  4. linux每日命令,Linux日常命令整理
  5. 北京理工大学 计算机考研真题,北京理工大学考研真题汇总
  6. LOAM算法(论文+代码)详解(一)—— 引言+特征提取
  7. mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
  8. win10启动修复_win10开机死循环无限重启怎么解决?
  9. Oracle函数之单值函数
  10. 实验1 系统响应及系统稳定性