视频播放流程

平时我们播放一个视频(本地或者在线)的时候,有想到过这个视频是如何播放出来的吗? 其实从我们点击播放开始,到最后我们看到视频,这中间经历了一系列的流程。你也许会很惊讶吧,我就点击了一个视频观看,没想到中间还会有这么多的过程呢!这些不可见的过程要感谢工程师们默默的付出。

本文将就在线播放视频播放的流程做一些介绍:

流媒体协议解析

当你点击在线视频的时候,视频很快就会播放出来。你也许会很诧异一个大的视频文件咋就立即播放了呢,这视频文件是已经下载到本地了吗?其实则不然,播放器只是播放了传输了那一部分,这得益于流媒体协议。

何为流媒体协议呢? Real-time Transport Protocol是用于Internet上针对多媒体数据流的一种传输协议(属于应用层),是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。

那第一步就是流媒体协议解析,目的是去除一些信令数据(播放,暂停,停止等控制命令),提取出音视频数据。

image.png

解析封装格式

上步解析协议之后,拿到了音视频数据。这些音视频数据按照一定规则组装成mp4、flv、m3u8等格式的文件。这一步要做的是解封装,即从一个容器里面,提取出音频数据、视频数据以及音视频数据对应关系。

image.png

音视频解码

上一步拿到的音视频数据是没法渲染播放的,原因是为了降低始视频数据占用存储空间,视频文件通过编码压缩形式来使存储空间变小。也就是我们拿到的是压缩后的数据,这一步要做的就是通过压缩算法,还原出音视频的原始数据。对应的视频数据通过H.264/AVC、HEVC/H.265等还原出原始的视频数据(YUV或RGB格式),压缩的音频数据通过AAC还原出原始的音频数据(PCM格式)。

音视频同步

这一步要做的就是视频数据与音频数据的同步问题,即视频播放的画面与播放的声音对应的上。 常用的同步方式有如下三种: - 音频为主时钟(视频同步到音频) - 视频为主时钟(音频同步到视频) - 外部时钟(系统时间)为主时钟(视频、音频同步到外部时钟)

主流的是音频为主时钟,即视频播放过快,则重复播放上一帧,以等待音频;如果视频播放过慢,则丢帧追赶音频。

image.png

渲染与播放

同步后的数据,视频数据送到显卡渲染,音频数据送到声卡播放。

总结

一个完整的在线播放流程包括:解析协议 -> 解析封装格式 -> 音视频解码 -> 音视频同步 -> 渲染与播放。

image.png

在解析出音频数据之后,我们可以再做一些特殊处理,比如对视频数据添加一些滤镜、特效转场等,对音频数据做一些降噪等操作。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的视频播放流程可以简单分为以下几个步骤: 1.选择视频源:首先需要确定要播放视频文件的位置,可以是本地文件、网络文件或者通过其他方式获取的视频数据。 2.创建MediaPlayer对象:使用MediaPlayer类,通过其构造方法创建一个MediaPlayer对象。MediaPlayer是Android中用于播放和控制音视频资源的主要类。 3.设置数据源:在MediaPlayer对象上调用setDataSource()方法,将视频源传递给MediaPlayer,告诉它要播放的是哪个视频文件。 4.准备MediaPlayer:使用prepare()或prepareAsync()方法来准备MediaPlayer。prepare()方法是同步的,会阻塞当前线程,等待MediaPlayer准备就绪;而prepareAsync()方法是异步的,不会阻塞线程,会在后台准备MediaPlayer。 5.设置显示界面:如果需要在界面上显示视频,需要先获取一个SurfaceView或TextureView,并将其传递给MediaPlayer的setSurface()方法,用于渲染视频。 6.开始播放:通过MediaPlayer的start()方法开始播放视频。此时,MediaPlayer会从数据源读取视频数据,解码并渲染到SurfaceView或TextureView上进行显示。 7.视频控制:可以通过调用MediaPlayer的其他方法,如pause()、stop()、seekTo()等,来控制视频的暂停、停止和进度跳转等操作。 8.释放资源:在不需要播放视频时,需要及时释放MediaPlayer的资源,可以调用release()方法来释放相关资源。 总的来说,Android的视频播放流程包括选择视频源、创建MediaPlayer对象、设置数据源、准备MediaPlayer、设置显示界面、开始播放视频控制和释放资源等步骤。根据具体需求,可以根据这个基本流程进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值