
ffmpeg--源码
山西茄子
多媒体工程师,从事ffmpeg,gstreamer,视频编码,deepstream等开发,做做笔记。
展开
-
调试ffmpeg
(1)、使用git clone https://github.com/ShiftMediaProject/FFmpeg.git,下载代码,例如路径为:E:/msvc/source/FFmpeg。(2)、启动git CMD切换到FFmpeg下的SMP下,运行脚本project_get_dependencies.bat,该过程会下载编译ffmpeg所依赖的所有代码。过程比较耗时,可重复执行该命令,...转载 2020-04-19 22:19:09 · 434 阅读 · 0 评论 -
ffmpeg测试deinterlace
本次测试,转码用ffmpeg,播放用elecard。交错标识: 有播放效果:没条带效果:命令:ffmpeg -i 03.ts -vcodec h264_nvenc -acodec aac a.ts交错标识: 无播放效果:有条带效果:命令:ffmpeg -deinterlace -i 03.ts -vcodec h264_nvenc -acodec aaca.ts交错标识: ...原创 2018-05-22 10:22:16 · 2773 阅读 · 0 评论 -
ffmpeg--avformat_find_stream_info
流程分析:avformat_find_stream_info{。。。 for (;;) { for(i = 0; i < ic->nb_streams; i++) { try_decode_frame{ AVCodecCon...原创 2018-03-20 17:11:31 · 424 阅读 · 0 评论 -
ffmpeg使用的问题
‘UINT64_C’ was not declared in this scopeffmpeg 默认是用C文件来编译的,如果某个CPP文件想引用ffmpeg中的某些函数或者头文件,有可能出现‘UINT64_C’ was not declared in this scope的错误可以 在cpp文件中加入extern "C"{#ifdef __cplusplus #define _原创 2014-02-26 17:21:57 · 965 阅读 · 0 评论 -
ffmpeg之av_read_frame
av_read_frame主要用到了如下函数。read_from_packet_buffer,read_frame_internal(ff_read_packet(probe_codec),parse_packet(av_parser_parse2)。与av_read_packet的区别是读出的是包,它可能是半帧或多帧,不保证帧的完整性。av_read_frame对av_read_packet进行...转载 2017-09-05 13:27:34 · 7553 阅读 · 0 评论 -
ffmpeg结构体,函数分析
AVFormatContext在使用FFMPEG进行开发的时候,AVFormatContext是一个贯穿始终的数据结构,很多函数都要用到它作为参数。它是FFMPEG解封装(flv,mp4,rmvb,avi)功能的结构体。typedef struct AVFormatContext { struct AVInputFormat *iformat:输入数据的封装格式 AV转载 2016-05-16 13:56:55 · 898 阅读 · 0 评论 -
ffmpeg--处理视频旋转
旧的ffmpeg,如果视频带旋转标识,转码后(如切ts),播放起来视频有角度,新的ffmpeg(313)已修复此问题。相关代码在ffmpeg_filter.c的configure_input_video_filter。 if (ist->autorotate) { //默认为1 double theta = get_rotation(ist->st);原创 2016-09-26 15:29:58 · 5859 阅读 · 1 评论 -
ffmpeg--日志
日志级别如下:{ "quiet" , AV_LOG_QUIET },{ "panic" , AV_LOG_PANIC },{ "fatal" , AV_LOG_FATAL },{ "error" , AV_LOG_ERROR },{ "warning", AV_LOG_WARNING },{ "info" , AV_LOG_INFO },{ "verbose", AV_转载 2017-03-14 20:57:18 · 796 阅读 · 0 评论 -
FFmpeg--探测机制
FFmpeg探测机制探测的前提是我们有一段媒体数据,基本原理就是根据媒体封装格式的特点,对全部已知的格式进行判断并设置一个分值,取其中最高的分值。FFmpeg中实现探测的函数是av_probe_input_buffer2和av_probe_input_format3。其核心代码如下:// code in av_probe_input_format3 (segment)while ((转载 2017-02-20 17:06:56 · 1958 阅读 · 1 评论 -
avio.c分析
url_find_protocol#define URL_SCHEME_CHARS \ "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "0123456789+-."static转载 2017-02-10 16:23:31 · 518 阅读 · 0 评论 -
fifo注释
#include "avassert.h"#include "common.h"#include "fifo.h"typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; //读指针,写指针。 uint32_t rndx, wndx;} AVFifoBuffer;//分配类指针,并给成员...转载 2017-02-08 16:34:21 · 1664 阅读 · 0 评论 -
ffmpeg-AVStream
AVStream重要的变量如下所示:int index:标识该视频/音频流AVCodecContext *codec:指向该视频/音频流的AVCodecContext(它们是一一对应的关系)AVRational time_base:时基。通过该值可以把PTS,DTS转化为真正的时间。FFMPEG其他结构体中也有这个字段,但是根据我的经验,只有AVStream中的time_base是可用的。PTS*...转载 2016-11-07 14:28:14 · 1342 阅读 · 0 评论 -
FFMPEG之时间基
fps=29.97fps=29.97这是一个小数啊,我如果直接利用公式 frame number = time * fps 得到了也不是一个整数啊,而帧号应该是一个整数才对。首先,29.97f/s这个变态的数是如何得到的?这起源于早期的NTSC电视制式,而现代的数字编码只是为了兼容而沿用了它的标准。其实在标准制定时,NTSC采用的是30f/s的帧率,只是后来为了消除由彩色信号及伴音信号所产生...转载 2014-12-19 17:11:58 · 2133 阅读 · 0 评论 -
av_register_all,avcodec_register_all的源码分析
av_register_all的源代码(allformats.c)如下:……#define REGISTER_DEMUXER(X, x) \ { \转载 2015-06-25 16:13:16 · 1067 阅读 · 0 评论