SurfaceView 播放视频使用介绍
目前大部分视频播放软件都是通过使用 SurfaceView 来解析视频流的。视频软 件得到视频流数据后,确定视频的格式。视频格式跟视频的编码方式有关。根据相 应的编码方式对视频流进行解码就可以得到视频图像,将视频图像一帧一帧的显示 在界面上就达到播放视频的效果了。SurfaceView 在 Android 中就是完成这个功能的。
SurfaceView 是配合 MediaPlayer 使用的,MediaPlayer 也提供了相应的方法设置 SurfaceView 显示图片,只需要为 MediaPlayer 指定 SurfaceView 显示图像即可。它 的完整签名如下: void setDisplay(SurfaceHolder sh) 它 需 要 传 递 一 个 SurfaceHolder 对 象 , SurfaceHolder 可以理解为 SurfaceView 装载需要显示的一帧帧图像的容器,它可以 通过 SurfaceHolder.getHolder()方法获得。
SurfaceView 中提供了双缓冲机制。当 SurfaceView 将视频流通过相应的解码方 式解析成对应的视频图像显示在界面上时如果第一张显示完毕第二张还没有解析完就会造成画面不流畅或者声音和视频不同步等问题。SurfaceView 的双缓冲机制是基 于多线程原理来解决这一问题的。双缓冲机制即为两个线程轮番去解析视频流的数 据。第一张图像渲染到界面的过程中另一个线程解析第二张图片,使得两个线程轮 番配合去解析视频流,以达到流畅播放的效果。
SurfaceHolder 是用于显示解析视频流得到视频图像的类。由于 SurfaceView 的 双缓冲机制对内存的消耗比较大,考虑到 Android 设备的局限性,当 SurfaceView 对 用户可见的时候创建 SurfaceHolder,不可见时候销毁 SurfaceHolder,来节省内存, 节约资源。所以开发人员要根据 SurfaceView 的状态实时的对 SurfaceHolder 进行维 护。否则会出现当程序最小化后,再打开程序时没有创建 SurfaceHolder 类即出现只 有声音不显示视频的现象。编程人员需要对 SurfaceHolder 进行编码维护,维护 SurfaceHolder 一个回调的回调方法即 Callback()方法,它需要实现重写如下三个方 法:
void surfaceDestroyed(SurfaceHolder holder),当 SurfaceHolder 被销毁的时候回 调。
void surfaceCreated(SurfaceHolder holder),当 SurfaceHolder 被创建的时候回调。
void surfaceChange(SurfaceHolder holder),当 SurfaceHolder 的尺寸发生变化的时 候被回调。 以下是这三个方法的调用的过程,在应用中分别为 SurfaceHolder 实现了这三个 方法,先进入应用,SurfaceHolder 被创建,创建好之后会改变 SurfaceHolder 的大小, 然后按 Home 键回退到桌面销毁 SurfaceHolder,最后再进入应用,重新创建 SurfaceHolder 并改变其大小。
同类文章排行
- 高校数字校园建设方案与软件设计现状
- 国内外视频监控的现状及发展趋势
- 常州普云软件基于iOS的视频监控软件的背景及意
- 常州普云基于iOS的家校沟通软件的设计与实现
- 常州普云软件基于Android平台OA软件的设计与实现
- 常州普云基于云计算的企业管理信息化建设方案
- 基于云计算的企业信息化管理平台建设研究背景
- 常州普云关于交互式电子白板的研究现状
- SurfaceView 播放视频使用介绍
- 基于移动互联网的视频会议系统市场分析