欢迎光临常州普云软件科技有限公司!手机:180-6878-0526 微信洽谈请扫右侧二维码 关于我们 | 联系我们 | 在线留言
全国统一服务热线
180-6878-0526
当前位置:主页 > 资讯中心 > 行业动态 >

SurfaceView 播放视频使用介绍

文章出处:admin 人气:发表时间:2017-11-16 10:29

目前大部分视频播放软件都是通过使用 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 并改变其大小。

此文关键字:SurfaceView,播放,视频,使用,介绍,目前,大部分

常州网站建设