一般播放器流程

最近领导让工作空闲之余对ijkplayer进行二次开发,在开发过程中,决定写一些关于播放器的博客,以便记录学习过程。

一般播放器的流程:

  1. streaming。这里包括下载和流媒体协议解析,这里重点就是控制下载缓存的ringbuffer。
  2. Demux。这里对容器进行音视频分离。
  3. Audio Decode & Video Decode。音视频解码。Android的解码最终都是通过OMX IL最终调用到芯片方案商的硬解。
  4. Audio render & Video render。音视频渲染。Audio render可以采用OpenSLES或者AudioTrack,AudioTrack最终通过AudioFlinger渲染。Video Render可以采用OpenGLES或者Surface(native层的surface即为ANativeWindow),底层最终用SurfaceFlinger渲染。
  5. AVSync。音视频同步,这个发生在音视频渲染之前。一般都是以audio pts为标准。一般逻辑为:如果audio frame 比video frame快,就丢掉video frame去追赶audio。如果audio frame比video frame慢,就调整底层video的渲染速度,这个时候看到的效果就是video慢放,而audio正常。

整个播放流程实际上就是一个buffer传递的过程,从最开始下载的缓存buffer到demux后的audio es buffer和video es buffer,以及decode之后的pcm buffer和YUV buffer。

后续以ijkplayer为例进行详细的分析一个播放器播放视频的过程。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值