千家信息网

android如何使用surfaceview+MediaPlayer播放视频

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"android如何使用surfaceview+MediaPlayer播放视频",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"and
千家信息网最后更新 2026年11月01日android如何使用surfaceview+MediaPlayer播放视频

这篇文章主要为大家展示了"android如何使用surfaceview+MediaPlayer播放视频",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"android如何使用surfaceview+MediaPlayer播放视频"这篇文章吧。

Android中播放视频主要有两种方式:

使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种方法太简单就不介绍了 使用SurfaceView+MediaPlayer,这种方式效果比较好,这里也重点介绍

SurfaceView从android 1.0就有了,十分好用。一般来说,UI对刷新都需要在UI线程中完成,但是,surfaceview可以在非UI线程中完成刷新。这样以来就很方便了,比如在线播放,就不需要自己去写handler来实现两个线程之间的通信了,直接可以在非UI线程中播放视频。

步骤:

1、调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。2、调用MediaPlayer.setDisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()方法获得。3、调用MediaPlayer.prepare()来准备。4、调用MediaPlayer.start()来播放视频。

这是大致步骤,但只有这些是不够的

在第二步之前需要确保surfaceHolder已经准备好了。因此需要给surfaceHolder设置一个callback,

调用addCallback()方法。Callback 有三个回调函数,如下:

SurfaceHolder.Callback { @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { }}

surfaceCreated()会在SurfaceHolder被创建的时候回调,在这里可以做一些初始化的操作,surfaceDestroyed()会在SurfaceHolder被销毁的时候回调,在这里可以做一些释放资源的操作,防止内存泄漏。

一般,会在surfaceCreated中给MediaPlayer设置surfaceHolder。

@Override public void surfaceCreated(SurfaceHolder holder) { player.setDisplay(holder); }

下面贴上具体代码:

public class VideoActivity extends Activity { private SurfaceView surfaceView; private MediaPlayer player; private SurfaceHolder holder; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.surfaceview_item); surfaceView = (SurfaceView) findViewById(R.id.surfaceView); progressBar= (ProgressBar) findViewById(R.id.progressBar); //视频链接可能已失效 String uri="http://video.dispatch.tc.qq.com/77613075/x0021o8d3g3.mp4?sdtfrom=v1001&type=mp4&vkey=23289E4B8D0F4B6CF18703222DFD0038845D8F56A75EEC20D5D4FDE678093D9AB211EFD7F4C99E5A612A96A04F46CEEB483628CFFBEA493D3AADBFCB81A540F7A92193874192FA0F70D1099DF330B2B419D45736554CB9BB3435019C985F530C5960E4B20FEBD5FAED17DC9F1FCE1C73&platform=10902&fmt=auto&sp=350&guid=1175defd049d3301e047ce50d93e9c7a"; player=new MediaPlayer(); try { player.setDataSource(this, Uri.parse(uri)); holder=surfaceView.getHolder(); holder.addCallback(new MyCallBack()); player.prepare(); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { progressBar.setVisibility(View.INVISIBLE); player.start(); player.setLooping(true); } }); } catch (IOException e) { e.printStackTrace(); } } private class MyCallBack implements SurfaceHolder.Callback { @Override public void surfaceCreated(SurfaceHolder holder) { player.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }}

xml文件:

以上是"android如何使用surfaceview+MediaPlayer播放视频"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

视频 方法 线程 内容 文件 篇文章 方式 时候 步骤 资源 准备 学习 帮助 一般来说 三个 不够 两个 之间 代码 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 江苏根荣互联网科技 中关村互联网科技集团 互联网通讯科技 广州凡科互联网科技 掌上梦互联网科技 深圳期待互联网科技 互联网科技大会 衡水科技产业互联网平台 互联网大会黑科技排名 互联网和黑科技的看法 互联网科技大赛获奖感言 科技赋能视角下互联网保险发展 济南有互联网科技公司吗 区块链结合互联网科技 工业互联网展湾科技股份有限公司 智帮互联网科技公司最近动向 云鲸互联网络科技有限公司 重庆科技产业互联网有哪些 宁波允成互联网科技有限公司 江苏根荣互联网科技 奇士达互联网科技 重庆科技学院互联网 哈尔滨秒房互联网科技有限公司 湖北码尼互联网科技有限公司电话 如何创新互联网科技 世界互联网领先科技成果获奖 中科明德北京互联网科技 广东工业互联网大赛深圳学泰科技 易租星互联网科技有限公司
0