用android代码实现一个可以万能播放器
要实现一个万能播放器需要使用多媒体库,可以使用Android自带的MediaPlayer类以及ExoPlayer库。以下是一个简单的示例代码:
- 在XML布局文件中添加一个SurfaceView和几个按钮:
<SurfaceViewandroid:id="@+id/surfaceView"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/buttonPlay"android:text="Play"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/buttonPause"android:text="Pause"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/buttonStop"android:text="Stop"android:layout_width="wrap_content"android:layout_height="wrap_content" />
- 在Java代码中实现MediaPlayer或 ExoPlayer 播放多种格式的视频文件。
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {private MediaPlayer mediaPlayer;private SurfaceHolder surfaceHolder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button buttonPlay = findViewById(R.id.buttonPlay);Button buttonPause = findViewById(R.id.buttonPause);Button buttonStop = findViewById(R.id.buttonStop);SurfaceView surfaceView = findViewById(R.id.surfaceView);surfaceHolder = surfaceView.getHolder();surfaceHolder.addCallback(this);buttonPlay.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try {mediaPlayer.setDataSource("http://example.com/myvideo.mp4");mediaPlayer.prepareAsync();mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {mediaPlayer.start();}});} catch (IOException e) {e.printStackTrace();}}});buttonPause.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mediaPlayer.isPlaying()) {mediaPlayer.pause();}}});buttonStop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mediaPlayer.isPlaying()) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;}}});}@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {mediaPlayer = new MediaPlayer();mediaPlayer.setDisplay(surfaceHolder);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {}
}
这个示例代码演示了如何使用MediaPlayer类播放MP4格式视频。如果需要支持其他格式,则需要使用相应的库或解码器。ExoPlayer是一个开源库,可以播放多种格式的媒体文件,包括MP3,MP4和HLS等格式。
用android代码实现一个可以万能播放器相关推荐
- Android 超好用的万能播放器——ijkplayer
前言 ijkplayer是b站开源的超级好用的视频播放器喔,相信大家都早有耳闻.ijkplayer Android和ios都可用,还支持多种视频的硬解码. ijkplayer的github地址 ijk ...
- 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over1 ...
- Vitamio打造自己的Android万能播放器
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- 使用Vitamio打造自己的Android万能播放器(1)——准备
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...
- [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...
前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
前言 新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发其他功能.本章内容为"在线视频播放列表& ...
- 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)...
前言 关键字:Vitamio.VPlayer.Android播放器.Android影音.Android开源播放器 本章节把Android万能播放器本地播放的主要功能(缓存播放列表和A-Z快速查询功能) ...
最新文章
- POJ - 1986 Distance Queries 倍增求LCA
- webpack打包js文件
- 基本的SQL-SELECT语句
- Python读取文件中汉字方法:导入codecs,添加encoding='utf-8'
- 聊聊Vue(前端Vue面试包过)【面试干货】
- 谷歌5款插件推荐:谷歌工具类、翻译类扩展程序
- ultraiso虚拟光驱安装linux,ultra_UltraISO怎么添加虚拟光驱啊?
- 想学一门技术,学java有前途吗?
- ASO优化选词:三种方法教你精准定位关键词
- 物联网应用案例,中易云真实搭建项目
- 转载至:http://blog.csdn.net/antony9118/article/details/51425581
- 区分当前用户SIM卡是移动还是联通
- 第一篇博客-Sql排名函数DENSE_RANK
- KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释
- 3D Max中布尔运算介绍
- rpcs3计算机丢失,【小白必看】关于缺失Vulkan无法打开RPSC3等问题的方案
- Unit Test(UT)单元测试
- Nginx-虚拟主机
- Python入门:制作世界人口地图
- matlab植物,matlab分形植物模拟
热门文章
- 141.如何使用图标做一个加载特效
- 【转】LoadRunner结果分析
- Ab3d.PowerToys 9.5.x Crack
- 调用百度搜索接口查询
- 【C/C++面试必备 | 基础概念】union的用法
- Linux之压测工具Siege安装和使用
- 01-系统安装-acer台式机使用固态盘重装系统后无法进入BOOT
- Android APP签名文件.keystore和.jks的相互转换
- python炒股教程_Python股市数据分析教程 学会它,或可以实现半“智能”炒股
- 通过路由器来设置WIFI密码