ffmpeg代码学习计划(持续更新)
2016-12-27 21:48
423 查看
最近学习FFmpeg代码,好记性不如烂笔头,代码较复杂,入坑要小心,为了避免不小心沉浸在代码的海洋里,在此列个代码学习计划,学习习惯因人而异,这里仅供参考:
注:部分分析其他大神(如雷神等)已经做过,所以就不再重新写,直接加个传送门过去。
《FFmpeg源代码结构》
ffmpeg:一个快速的音视频转换工具。比如各种音视频格式转换,音频采样率转换,视频码率、质量转换等。
ffplay:一个简单的使用FFmpeg库和SDL库的播放器。
ffprobe:收集多媒体流的信息并以易读的方式输出。比如检查多媒体流的容器封装格式以及媒体流内部的格式和类型。
ffserver:一个音视频流服务器。
学习ffplay:《ffplay.c函数结构简单分析》
解码
avformat_open_input():打开媒体。
avformat_find_stream_info():获得媒体信息。
av_read_frame():获取一帧压缩编码数据(即一个AVPacket)。
avcodec_decode_video2():解码一个AVPacket的第一个视频帧,若一个AVPacket包含多个视频帧,则需要多次调用此方法。
avcodec_decode_audio4():解码一个AVPacket的第一个音频帧,若一个AVPacket包含多个音频帧,则需要多次调用此方法。
avformat_close_input():关闭和释放一个AVFormatContext,与avformat_open_input相对应。
注:上面几个函数可以理解成一些点,熟悉这些点之后再回头review一遍《FFmpeg源代码结构》的解码流程和《ffplay.c函数结构简单分析》,把这些点串成一条解码线路,以加深对代码的理解。
编码
avformat_write_header():写流媒体封装格式头。
avcodec_encode_video2():编码一帧视频。
avcodec_encode_audio2():编码一帧音频。
av_write_frame():封装输出一个音视频包。
av_write_trailer():写流媒体封装格式尾。
注:部分分析其他大神(如雷神等)已经做过,所以就不再重新写,直接加个传送门过去。
一、概览
FFmpeg代码比较复杂,在没熟悉之前建议先不要急着看代码,再说,这么多代码你也不知道从哪里看起。不防泡杯热茶,看看代码的整体结构,先在脑海里勾勒一幅草图:《FFmpeg源代码结构》
二、找入口
FFmpeg源码提供4个工程:ffmpeg、ffplay、ffprobe和ffserver。由于最近在研究播放器,所以直接从ffplay代码入手研究。ffmpeg:一个快速的音视频转换工具。比如各种音视频格式转换,音频采样率转换,视频码率、质量转换等。
ffplay:一个简单的使用FFmpeg库和SDL库的播放器。
ffprobe:收集多媒体流的信息并以易读的方式输出。比如检查多媒体流的容器封装格式以及媒体流内部的格式和类型。
ffserver:一个音视频流服务器。
学习ffplay:《ffplay.c函数结构简单分析》
三、从点到线
avformat_open_input():打开媒体。
avformat_find_stream_info():获得媒体信息。
av_read_frame():获取一帧压缩编码数据(即一个AVPacket)。
avcodec_decode_video2():解码一个AVPacket的第一个视频帧,若一个AVPacket包含多个视频帧,则需要多次调用此方法。
avcodec_decode_audio4():解码一个AVPacket的第一个音频帧,若一个AVPacket包含多个音频帧,则需要多次调用此方法。
avformat_close_input():关闭和释放一个AVFormatContext,与avformat_open_input相对应。
注:上面几个函数可以理解成一些点,熟悉这些点之后再回头review一遍《FFmpeg源代码结构》的解码流程和《ffplay.c函数结构简单分析》,把这些点串成一条解码线路,以加深对代码的理解。
编码
avformat_write_header():写流媒体封装格式头。
avcodec_encode_video2():编码一帧视频。
avcodec_encode_audio2():编码一帧音频。
av_write_frame():封装输出一个音视频包。
av_write_trailer():写流媒体封装格式尾。
四、扩展
TBD相关文章推荐
- Vincent iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- iPhone学习系列、代码教程----___持续更新中
- [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- Deep Learning(深度学习)代码/课程/学习资料整理【持续更新】
- 深度学习代码(持续更新中)
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- [文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中
- 学习计划 (持续添加与更新)
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- 学习javascript对象创建方法(参照别人代码,持续更新)
- [持续更新] 学习历程 迭代计划和小结
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
- 学习算法的计划(持续更新)
- 深度学习方向的牛人个人主页,文章必须带代码呀,持续更新
- myeclipse tomcat jsp servlet javabean的学习(持续更新)
- JS代码在IE和Firefox间的区别(独家搜集归纳整理,持续更新中)
- JS代码在IE和Firefox间的区别(独家搜集归纳整理,持续更新中)
- 代码中常见错误(持续更新)