现在的工作是播放器库的开发,可不是调用iOS系统自带的播放器框架进行一些简单的功能和界面定制,这些没什么含量。涉及iOS开发有3个年头了,现在的工作算是有点含金量了。涉及播放器的开发,FFmpeg的架构和功能是必须清楚的。FFmpeg自带的三个工程:ffplay, ffmpeg, ffprobe。这三个工程的代码量太大,如何切入进去,一窥其中的奥秘为自己所用呢?从核心切入,编码和解码。编码和解码的核心API接口就那十几个,通过这些深入然后剖析源代码,目标就明确了。

  就我个人而言,首先要了解FFmpeg整个的运行机制,哪一部分工作需要调用FFmpeg的哪一块,这个必须清楚。播放器库的开发,解码播放这就是核心,我就需要从FFmpeg的解码流程入手了。FFmpeg源代码结构图 - 解码 这篇文章太好了,看得我两眼放光,精华。这篇文章读透了,完全可以把控FFmpeg的使用。我接下来的学习任务,那就是认真研读和敲代码研习,光看是不顶用的,需要动手写。

  FFmpeg源代码结构图 - 解码 中包含的信息太多了,对于像我这种在音视频领域中的小白来说,首先要看FFmpeg源代码结构图 - 解码中提到的 简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0) 入手。心急吃不了热豆腐,心急就不能静下心来搞懂深层次的问题。我给自己半年的时间,把播放器这套东西搞熟练。

  FFmpeg的解码过程调用的API依次为:

开始---->

av_register_all();

avformat_open_input();

av_find_stream_info();

avcodec_find_decoder();

av_read_frame();

获取到packet---->

avcodec_decode_video2();

  对于FFmpeg的解码流程,先知道了有上面那些方法,但是这些方法是用来做什么,从方法名上能看出其功能,要深入的理解才行。作为小白,我必须借鉴别人的经验,收集有效的资源是非常重要的。对FFmpeg解码流程讲解的比较好的一篇博文是 FFMpeg的解码流程 ,配合文章  ffmpeg解码流程 一起服下,效果更好。因为当当看 简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0) 还不足以搞透整个流程。通过研习这三篇文章,整个流程和方法功能应该就吃透了。

  学习任何东西什么时候该从局部把控全局,那就是有了自己的切入点之后,在这个点上摸爬滚打搞得比较熟练之后,就需要把控全局,对FFmpeg框架的整体要有把控。对于FFmpeg框架讲解的比较好的入门读物是 FFMpeg框架代码阅读

  

笔谈FFmpeg(一)的更多相关文章

  1. 笔谈FFmpeg(二)

    经过前面的学习对FFmpeg的基本流程已经很熟悉了,现在到了掌握其中细节的时候了,用FFmpeg做播放器解码操作中,涉及到了一些结构体,这些结构之间到底有什么关系,它们是怎样协同工作的呢.文章 FFM ...

  2. 笔谈kxmovie开源播放器库的使用

    开源播放器项目 kxmovie(https://github.com/kolyvan/kxmovie),现在仍然是很多刚开始接触播放器开发的程序员的参照范本.以下是我操作kxmovie项目的过程: ( ...

  3. FFmpeg学习6:视音频同步

    在上一篇文章中,视频和音频是各自独立播放的,并不同步.本文主要描述了如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放的.主要有以下几个方面的内容 视音频同步的简单介绍 DTS 和 ...

  4. FFmpeg 中AVPacket的使用

    AVPacket保存的是解码前的数据,也就是压缩后的数据.该结构本身不直接包含数据,其有一个指向数据域的指针,FFmpeg中很多的数据结构都使用这种方法来管理数据. AVPacket的使用通常离不开下 ...

  5. FFmpeg + SoundTouch实现音频的变调变速

    本文使用FFmpeg + SoundTouch实现将音频解码后,进行变调变速处理,并将处理后的结果保存为WAV文件. 主要有以下内容: 实现一个FFmpeg的工具类,保存多媒体文件所需的解码信息 将解 ...

  6. 用ffmpeg快速剪切和合并视频

    如果直接找视频剪切和合并视频的软件,通常出来的都是大的视频编辑软件或者是有图形界面的剪切软件,大型一点的功能太多安装麻烦,小型一点的功能可能不齐全. 只是简单的剪切或者一下合并一下,还是ffmpeg这 ...

  7. ffmpeg用法及如何使用fluent-ffmpeg

    http://ffmpeg.org/ 官网 ffmpeg(命令行工具) 是一个快速的音视频转换工具. 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an o ...

  8. FFmpeg学习4:音频格式转换

    前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...

  9. FFmpeg学习5:多线程播放视音频

    在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...

随机推荐

  1. Redis和MongoDB的区别以及应用场景

    Redis和MongoDB的区别以及应用场景 项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB. 最近又想起为什么用MongoDB ...

  2. linux shell中如何批量添加一行内容到某些文件的末尾?

    答:先使用find找出要指定的某些文件,然后使用xargs和sed工具将内容插入到这些文件的末尾 find . -name 'filename*' | xargs sed -i '$a\added-c ...

  3. navicat for mysql 如何设置字段唯一

    在设计表时,上面会有索引这一项 点开,在栏位处选择你需要设置的字段,然后选择unique索引类型即可 望采纳,谢谢!

  4. sysfile20191122

    ass_s_ccp_ft:-108; ass_s_ccp_all:-108; ass_tag_ft:-105; ass_tag_all:-105; rept_port:9000; Q_value:0. ...

  5. Composer 国内加速:可用镜像列表大全

    查看地址1:https://learnku.com/composer/wikis/30594 查看地址2:https://learnku.com/articles/30258

  6. kali 扫描之burp Suite学习笔记1

    1 安装 2 burs功能图解 3 工具栏详解 4 实战 (1) 网络配置 一台kali 一台msf 网络采用nat nat网络设置方法: 查看路由 配置文件 (2) 代理设置 bur代理设置 浏览器 ...

  7. javadoc 抽出代码中的注释

    背景: 在已经有的项目里面利用javadoc来抽出代码中每个类,每个方法的注释部分,形成一个文档. 方法1 利用eslipse来实现 之后会在指定的目录下生成html文档 方法2 利用命令来执行 先把 ...

  8. Linux学习-防火墙-Selinux-配置本地YUM源

    关闭防火墙并设置开机不启动 systemctl status firewalld.service #查看firewalld状态systemctl stop firewalld #关闭systemctl ...

  9. #redis 安装命令

    redis 安装命令 cd /usr/local sudo wget http://download.redis.io/releases/redis-4.0.11.tar.gz sudo tar xf ...

  10. 顺序表习题(1)-打印非递减数组a与b的升序并集(去除重复元素)

    void Print_Union(SqList a,SqList b) { , q = ; //初始化指针 ; //记录上一次打印的元素 while (p!=a.length&&q!= ...