视频播放器底层框架解析

原创 2016年08月28日 21:10:36

存在问题:

说到视频编解码,就得谈谈ffmpeg有人说vlc很强大,但是你它的基础编解码也用ffmpeg。小伙伴们问什么是ffmpeg呀?


解决方案:

FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂。本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一些编解码部分,只有真正了解了多媒体处理的基本流程,研读ffmpeg源代码才能事半功倍。

下面分析一下多媒体中最基本最核心的视频解码过程,平常我们从网上下载一部电影或者一首歌曲,那么相应的多媒体播放器为我们做好了一切工作,我们只用欣赏就ok了。目前几乎所有的主流多媒体播放器都是基于开源多媒体框架ffmpeg来做的,可见ffmpeg的强大。下面是对一个媒体文件进行解码的主要流程:


1. 解复用(Demux)

当我们打开一个多媒体文件之后,第一步就是解复用,称之为Demux。为什么需要这一步,这一步究竟是做什么的?我们知道在一个多媒体文件中,既包括音频也包括视频,而且音频和视频都是分开进行压缩的,因为音频和视频的压缩算法不一样,既然压缩算法不一样,那么肯定解码也不一样,所以需要对音频和视频分别进行解码。虽然音频和视频是分开进行压缩的,但是为了传输过程的方便,将压缩过的音频和视频捆绑在一起进行传输。所以我们解码的第一步就是将这些绑在一起的音频和视频流分开来,也就是传说中的解复用,所以一句话,解复用这一步就是将文件中捆绑在一起的音频流和视频流分开来以方便后面分别对它们进行解码,下面是Demux之后的效果。



2. 解码(Decode)

这一步不用多说,一个多媒体文件肯定是经过某种或几种格式的压缩的,也就是通常所说的视频和音频编码,编码是为了减少数据量,否则的话对我们的存储设备是一个挑战,如果是流媒体的话对网络带宽也是一个几乎不可能完成的任务。所以我们必须对媒体信息进行尽可能的压缩。


3. FFmpeg中解码流程对应的API函数

了解了上面的一个媒体文件从打开到解码的流程,就可以很轻松的阅读ffmpeg代码,ffmpeg的框架也基本是按照这个流程来的,但不是每个流程对应一个API,下面这副图是我分析ffmpeg并根据自己的理解得到的ffmpeg解码流程对应的API,我想这幅图应该对理解ffmpeg和编解码有一些帮助。


Ffmpeg中Demux这一步是通过avformat_open_input()这个api来做的,这个api读出文件的头部信息,并做demux,在此之后我们就可以读取媒体文件中的音频和视频流,然后通过av_read_frame()从音频和视频流中读取出基本数据流packet,然后将packet送到avcodec_decode_video2()和相对应的api进行解码。

播放器/短视频 SDK 架构设计

短视频 SDK 架构设计实践- http://blog.csdn.net/dev_csdn/article/details/78683826 短视频开发需要的预备知识及难点:贴纸,特效/美颜/混音/内...
  • ShareUs
  • ShareUs
  • 2017年12月01日 20:54
  • 106

音乐播放器的实现,框架的基本搭建,资源

效果图 你们肯定会说没图我怎么做...那好吧 我压缩一下藏在百度云把是整体的所有图片哦 有的可能用不到 链接:http://pan.baidu.com/s/1mhOXk4g 密码:7t92...
  • mp624183768
  • mp624183768
  • 2017年01月17日 12:17
  • 644

android视频播放框架Vitamio

概述         开发公司一个乐视TV项目时,本来有个播放视频广告的功能,到最后不了了之。虽然没有在项目中做要求,但是这个点子还是激起了我研究多媒体的好奇心。刚好后面遇到一款比较喜欢的视频A...
  • lsyz0021
  • lsyz0021
  • 2016年04月30日 01:07
  • 7299

github上十二款最著名的Android播放器开源项目

1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的...
  • qq_24531461
  • qq_24531461
  • 2017年06月19日 09:09
  • 11487

iOS实现一个简单的视频播放器

说明:用系统自带的AVPlayer类实现一个简单的视频播放器。它既能播放本地视频,也能较流畅地播放网络视频。 首先要引入AVFoundation.framework框架; 播放器类.h文件代码如下...
  • u011334685
  • u011334685
  • 2015年01月13日 13:07
  • 3897

网易视频云技术分享:移动端播放器框架搭建

一、概述   目前,移动互联网技术飞速发展,影响着人们生活的各个方面。据有关数据统计,2016年中国的移动互联网用户数已经超过8亿。旅游,教育,购物,娱乐等方面都与之紧密联系。其中最火的当属移动直播...
  • bingyanhu924
  • bingyanhu924
  • 2016年11月02日 11:50
  • 61

Android 视频播放器vitamio框架

项目简介:该项目为视频播放器,使用Vitamio框架完成。 vitamio框架下载地址:到这里去 另外,使用Android原生的VideoView播放视频请 参考 使用S...
  • qq_36642554
  • qq_36642554
  • 2017年04月11日 10:18
  • 639

网易视频云技术分享:移动端播放器框架搭建

一、概述   目前,移动互联网技术飞速发展,影响着人们生活的各个方面。据有关数据统计,2016年中国的移动互联网用户数已经超过8亿。旅游,教育,购物,娱乐等方面都与之紧密联系。其中最火的当属移动直播...
  • bingyanhu924
  • bingyanhu924
  • 2016年11月02日 11:21
  • 135

Android视频框架 Vitamio 打造自己的万能播放器

转载地址:http://xfenglin.com/a/12007153515.html?ref=myread Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开...
  • l_215851356
  • l_215851356
  • 2016年11月28日 14:49
  • 290

利用Qt Phonon框架制作音视频播放器

Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放源代码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档...
  • lywzgzl
  • lywzgzl
  • 2014年09月10日 18:09
  • 1642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:视频播放器底层框架解析
举报原因:
原因补充:

(最多只允许输入30个字)