视频播放器之开篇

一直想学习如何开发一款视频播放器,做到尽量好用。然而一直没有机会,终于经历大半个月学习了夏曹俊老师的视频播放器开发课程,收获颇多,特此总结。学完基本上有了一个播放器应该有的大多内容了,之后再添加也就是小功能。

目的:

  • 整理整个流程
  • 做出一款能再Android上方便使用的播放器

整体介绍

这里就不介绍视频音频相关的基础知识了,因为我还没有去深刻理解,估计说不好,但是这个部分其实很重要,对理解代码中为什么要这样,很有帮助。

开发这个视频播放器用到了几块技术,分为了以下几个部分:

  • 使用ffmpeg将视频解封装(demux模块)
  • 使用ffmpeg将音视频解码(decode模块)
  • 使用ffmpeg将音频重采样(resample模块)
  • 使用opensles播放音频(音频播放模块)
  • 使用opengl的shader将视频绘制,再由egl将绘制内容显示到surface窗口上(视频显示模块)

这几步中,首先需要将数据解封装,再把数据交给解码器,音频解码器解码音频数据,视频解码器解码视频数据,解码后音频数据交给ffmpeg去重采样,解码后的视频数据交给shader绘制,最后让egl显示到surface上。

当然不一定要所有数据都解码或者重采样,因为如果解封装之后有的数据本身就是原始数据了,那么就能直接使用。

这几步变成时序图就是这样,步骤很清晰,主要是老师讲的好。

3157525-e7d36fb3df92cbe9.png
帧数据处理顺序图.png

其实只要这个流程清楚了,之后的步骤按照这个来就很轻松了,因为ffmpeg、opengl、opensl这些库都把这些功能封装好了,具体怎么解封装,怎么解码,怎么重采样,怎么播放和显示都是调用api就可以了。

到这里,其实这也才是刚入坑而已,其中视频的格式有很多,解码后数据是否存在问题等等,都只能慢慢的尝试调整了。

猜你喜欢

转载自blog.csdn.net/weixin_34194359/article/details/87317235