ffmpeg
yi巴
普通程序员,这么久,也没啥长进。
展开
-
ffmget编译
网上有直接可以运行执行文件可下,但是还是想感觉一下ffmpeg在windows编译的过程.都说不容易,到底有多难呢?这么大一份代码,了解它如何编译后,会对它的框架有一个大致的认识.我的这个编译没有加入任何扩展库,很原始的,很简单的.等我把这个编译完成后,会加入第三方库的,譬如librtmp,x264等.1 linux中编译1 获取代码wget http://ffmpeg.org/release原创 2017-01-23 15:40:23 · 625 阅读 · 0 评论 -
23 ffmpeg 如何探测编解码器
1 avformat_find_stream_infoavformat_find_stream_info 是现在为止我看到的ffmpeg中最复杂的代码,我都分析过几回啦。每次都忘记,没关系,忘记了就接着来。这个代码最主要的作用就是:确定每个stream的codec。那问题就是如何确定呢?先判断是否已经具有完整的codec信息了。读取frametry decodeint ...原创 2018-03-16 09:50:54 · 1097 阅读 · 0 评论 -
17 分析x264的例子
这个例子来自于X264源码中的example.c,很简单,功能很单一。把一个yuv文件编码成为h264文件。通过这个例子来了解一下x264的使用方法。对于这种写wiki来读代码的方式,比光读代码很好多,因为记忆加深了。光读代码的话,过几天就会忘记。又得重新读一遍。一个main函数而已。除开变量的定义,代码可以分成三部分, 第一部分是param的设置,这个一部分在这份代码中很简单,设置了参数不...原创 2018-03-02 17:28:15 · 743 阅读 · 0 评论 -
18 ffmpeg如何使用libx264
每个编解码的协议实现都需要有一个结构体:AVCodec ff_libx264_encoder = { .name = "libx264", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_H264, .priv_data_size = sizeof(X264...原创 2018-03-05 18:55:21 · 1853 阅读 · 0 评论 -
19 ffmpeg中的AVClass和AVOption
先看它的使用,知道使用后就非常简单了。如果不看使用,直接看实现的话,那可够看的。AVCodec ff_libx264_encoder = { .name = "libx264", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_H264, .priv_da...原创 2018-03-05 19:35:05 · 1352 阅读 · 0 评论 -
21 ffmpeg中的io分析
ffmpeg中的io之所以复杂,是因为ffmpeg基本支持所有的读写协议,最底层的有tcp,udp,文件和串口。上层又支持很多协议,譬如rtmp,http,rtsp等等。今天主要分析的就是ffmpeg对于io操作,特别是open和读操作。从文件开始,看一个io操作的例子。这是截取的一段代码。分五部分:av_register_all进行注册avformat_open_input打开url...原创 2018-03-13 11:47:52 · 760 阅读 · 0 评论 -
20 ffmpeg中的log分析
每个后台进程的日志很重要的,实现的文件在log.c/log.h。FFmpeg的日志在实现上有一些小细节是我以前从来没有考虑过的,譬如颜色,是否重复等。但还是很简单滴。先上使用方式:av_log(obj, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range\n", num, name);声明:/** * @par...原创 2018-03-06 17:59:44 · 709 阅读 · 0 评论 -
25 ffmpeg ffprobe
ffprobe是ffmpeg中提供的一个工具,和其他工具比较起来是最简单的一个工具。所以如果要想看ffmpeg的代码,想了解ffmpeg框架,从ffprobe是一个不错的选择。当然如果要看编解码,ffprobe没有涉及到。使用ffprobe:./ffprobe -loglevel debug -i rtmp://127.0.0.1:1935/live/stream1 ffprobe ...原创 2018-03-27 10:45:53 · 1140 阅读 · 0 评论 -
24 ffmpeg 解析器和编解码器
avcodec_register_all被av_register_all调用了,主要是注册编解码器。#define REGISTER_ENCODER(X,x) { \ extern AVCodec ff_##x##_encoder; \ if(CONFIG_##X##_ENCODER) avcodec_register(&ff_##x##_...原创 2018-03-27 16:57:53 · 965 阅读 · 0 评论 -
22 ffmpeg中的rtmp
rtmp属于传输协议,底层是tcp。那么真正的传输是靠tcp,解析是靠rtmp,所以rtmp和tcp结合起来使用。所以本篇wiki解决两个问题:rtmp 没有input format,和FLV同时使用input FORMATrtmp协议和tcp的结合使用1 rtmp和FLV共用一个 input formatrtmp是没有input format的。使用的flv的input f...原创 2018-03-15 11:40:47 · 656 阅读 · 0 评论 -
004 ffmpeg_VideoEncodingMuxing
这个demo的功能是:构造音频数据,且和一个yuv文件合成一个flv文件。不一定是flv文件,根据后缀名来判断容器格式。这份代码很多是从ffmpeg的例子中拷贝过来的。还是先上两个结构体:typedef struct _IOParam{ const char *input_file_name; //输入的像素文件名 const char *output_file...原创 2018-02-27 14:28:05 · 327 阅读 · 0 评论 -
003 ffmpeg_videodemuxing
这个demo实现的功能是把一个容器文件(flv文件,mkv文件等)解复用为video和audio,后分别对其解码,再把原始数据写入到文件中。这种原始数据直接写入到文件应该只有ffplay才能播吧。先别管播不播吧,把这条流程走通。突然想到代码其实没那么重要,但是把代码忘掉,用自己的语言来表达,得需要融会贯通,得非常熟悉。并且文笔得好,我做不到啊。还是看代码吧。这次不从main开始,从底层开始。先...原创 2018-02-27 14:09:51 · 373 阅读 · 0 评论 -
ffmpeg makefile 分析
分析一份代码的configure和makefile,可以了解这份代码的整体结构.但是一般configure和makefile太复杂,很难完全弄明白.ffmpeg是自己写的configure和makefile,幸好没用到其他工具,如autoconf,automake等.Makefile的语法不太熟悉,我写代码时每次都依葫芦画瓢,没有太追究它的语法.感叹一下CMAKE多好.我参考了雷神的blog: h原创 2017-01-23 15:43:05 · 2002 阅读 · 0 评论 -
简化ffplay的分析
这份代码来自:http://www.cnblogs.com/mcodec/articles/1933754.htm感谢这位作者. ffplay简化版,剪了百分之80的代码.入门还是不错的,并且可以在vc 6.0编译.但是这个版本很老了,应该是0版本,现在都是3版本了.代码基本都变动了.但是万变不离其宗.总结写在前面,这一部分是在本篇结束后写的:音视频的真正输出是SDL,SDL是Simple Dir原创 2017-01-23 15:46:59 · 496 阅读 · 0 评论 -
简化版ffplay中视频播放逻辑
分析的是网上别人简化了的ffplay,很老的版本,0点几的版本.ffplay用的视频的播放用的是SDL.vedio的编辑码是msrle,一种无损的压缩算法,很简单的.所以靠它来摸一摸编解码的大门也不错.视频是如何展示出来的呢?视频是由一帧一帧的图片连贯组成的,展示的间隔是在几十ms,所以人眼感觉不出来一张一张的感觉.从代码来看,是不是一张一张的图片来的呢?看一份代码static int video_原创 2017-01-23 15:48:36 · 330 阅读 · 0 评论 -
fmpeg中第三方库的编译_libx264和librtmp
在前一篇blog中编译ffmpeg,是没有添加进任何库的.但是ffplay照样可以播放本地flv文件,播放rtmp协议,其中的编解码是h264和aac的.也就是说没有第三方库的支持,ffmpeg是支持h264和aac解码的.分析一下ffmpeg的configure的输出:Enabled decoders: //解码器 aac和h264都支持aac ... h264 ....Enabled enc原创 2017-01-23 15:49:12 · 9029 阅读 · 1 评论 -
ffplay如何支持多协议
分析过一个简化版的,现在开始搞新版本ffmpeg-3.0.2。ffmpeg的代码量太大了,必须得找准点,并且不能急躁,弄不懂的先放着,后面一步一步的解决。插一个流程图的例子,这个例子足够可以画流程图啦.用markdown来画流程图,就简单了.平常一个流程图基本解决问题.Created with Raphaël 2.1.0Startstream_openread_threadavformat_open原创 2017-01-23 16:08:47 · 605 阅读 · 0 评论 -
ffmpeg SDK 学习系列
这一系列的学习源头在这里:http://blog.csdn.net/shaqoneal/article/details/51607105,作者网名是:取次花丛懒回顾。blog写得很好,逻辑非常清晰,除了写blog外,还有一些视频课程,也在github上开源了相应的代码。赞一下。我主要是分析这些demo的代码,让自己来熟悉ffmpeg,特别是如何使用ffmpeg的动态库。这些demo很多都取材于...原创 2018-02-27 14:07:37 · 2083 阅读 · 0 评论 -
001 ffmpeg_videoencoding
这个wiki主要是讲video的编码流程,代码功能就是:把YUV文件变成h264文件的过程。其实看代码很简单,但是为了加深我的记忆,所以分析代码流程,虽然没有一行一行的分析,但是至少做到每个细节都清晰。1 ffmpeg的编译准备ffmpeg和x264两个报文,因为ffmpeg默认是不支持h264的编码,解码是支持的。1.1 x264下载地址是:http://download...原创 2018-02-27 14:08:29 · 793 阅读 · 0 评论 -
002 ffmpeg_videodecoding
功能是把h264文件变成yuv文件,测试命令行:./video_decoding ds_480x272.h264 res.ds_480x272.yuv我用PotPlayer来播放h264文件,yuv文件通过ffplay或者YUVplayer来播放。这次不从main函数开始了,从一个函数,属于ffmpeg函数初始化和结束的部分。typedef struct{ AVC...原创 2018-02-27 14:09:02 · 309 阅读 · 0 评论 -
26 ffmpeg 使用libx265
跟h264和x264一样,h265的开源也有x265。FFMPEG用就是libx265。FFMPEG的h265编码用的是libx265,解码是自身提供的功能。这里跟h264一样。主要是分析ffmpeg如何使用libx264的,但是对于libx265主要细节没有涉及到,这也没那么简单。得先理清h265的相关标准协议才行。这还有很长一步路要走咯。原创 2018-04-04 17:43:28 · 9684 阅读 · 0 评论