avcodec专题

FFmpeg源码:avcodec_descriptor_get函数分析

一、avcodec_descriptor_get函数的声明 avcodec_descriptor_get函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavcodec/codec_desc.h中: /*** @return descriptor for given codec ID or NULL if no descriptor exists.*/c

从零到一学FFmpeg:avcodec_open2 函数详析与实战

文章目录 前言一、函数原型二、功能描述三、使用实例 前言 avcodec_open2是FFmpeg库中的一个关键函数,用于根据给定的AVCodecContext和AVCodec实例初始化编解码器,使其准备好进行编解码操作。 这个函数是编解码流程中配置编解码器上下文后的重要一步,它负责分配编解码器所需的资源,并根据上下文中的参数设置编解码器。 提示:以下是本篇文章正文内容

从零到一学FFmpeg:avcodec_parameters_from_context 函数详析与实战

文章目录 前言一、函数原型二、功能描述三、使用场景四、使用实例 前言 avcodec_parameters_from_context是FFmpeg库中的一个实用函数,用于将AVCodecContext中的编解码参数复制到AVCodecParameters结构体中。 这个操作在很多场景中都非常有用,尤其是在处理多媒体流和文件格式时,需要根据编解码上下文的信息来设置输出或输入流的

ffmpeg学习六:avcodec_open2函数源码分析

上一节我们尝试分析了avformat_open_input函数的源码,这个函数的虽然比较复杂,但是它基本是围绕着创建和初始化一些数据结构来展开的,比如,avformat_open_input函数会创建和初始化AVFormatContext,AVClass ,AVOption,URLContext,URLProtocol ,AVInputFormat ,AVStream等数据结构,这些数据结构的关系

FFmpeg源码分析:avcodec_send_frame()和avcodec_receive_packet()音视频编码

FFmpeg在libavcodec模块,旧版本提供avcodec_encode_video2()作为视频编码函数,avcodec_encode_audio2()作为音频编码函数。在FFmpeg 3.1版本新增avcodec_send_frame()与avcodec_receive_packet()作为音视频编码函数。后来,在3.4版本把avcodec_encode_video2()和avcodec

FFmpeg源码分析:avcodec_send_packet()与avcodec_receive_frame()音视频解码

FFmpeg在libavcodec模块,旧版本提供avcodec_decode_video2()作为视频解码函数,avcodec_decode_audio4()作为音频解码函数。在FFmpeg 3.1版本新增avcodec_send_packet()与avcodec_receive_frame()作为音视频解码函数。后来,在3.4版本把avcodec_decode_video2()和avcodec

FFmpeg源码分析:avcodec_open()打开编解码器

FFmpeg在libavcodec模块提供编解码能力,使用流程:寻找编解码器、分配编解码器上下文、打开编解码器、编码成AVPacket/解码成AVFrame、关闭编解码器。本文以avcodec_open()打开编解码器为主,对编解码整体流程进行分析。 一、寻找编解码器 寻找解码器的函数位于libavcodec/allcodecs.c。可以通过avcodec_find_encoder()根据AV

关于FFMPEG的libavcodec/avcodec.h' file not found的问题

错误情况:'libavcodec/avcodec.h' file not found 因为你的路径不正确引起 file not found的问题, 在你选的路径中包含有汉字或者路径错误 解决办法: 1. 因为添加FFMPEG后,会导致三方的Library Search Paths路径不对,需要自己添加路径; 2. 如果自己添加的路径是找不到。 检查include文件路径,并重新修改$(P

FFmpeg 'avcodec_copy_context' deprecated (视频裁剪)

在学习一些代码的时候发现有些已经弃用了:记录一下新的写法: 1,avcodec_copy_context 以前的写法: ret = avcodec_copy_context(outStream->codec, inStream->codec);if (ret < 0){fprintf(stderr, "Failed to copy context from input to output

avcodec_copy_context函数引发的问题

在FFmpeg库中,有一个旧的API函数:avcodec_copy_context,主要的功能就是编码参数上下文的拷贝,函数原型如下: int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); 在使用过程中没有发现问题,使用方式如下: AVCodecContext *ctx = NULL;//经过一

avcodec send_packet和receive_frame

下面是解码的过程代码,对输入给解码器的pkt桢类型进行判断,关键桢打印出is key frame,解码出来的桢根据pict_type打印桢类型出I/P/B桢类型,从这里也可以看出来,没解码之前,AVPacket只能得到是否关键帧,要知道桢类型,必须在解码后。 完整代码可以从github上获取 /* Read packets from input file and decode t

avcodec_decode_video 解码失败,got_picture返回0

//H264解码器初始化 bool H264DecodeInit(void) {         //         int  numBytes;         avcodec_init();         /* register all the codecs */         avcodec_register_all();         codecContext= NULL;

FFmpeg之AVCodec

这一节是最重要的一节,ffmpeg的解码,还是和以前一样,一定是先来一个上下文context,再一个具体的解码器类。 AVCodecContext和 下面是一个解码器定义,三部分组成,第一部分是设置参数,第二部分是基类,第三部分是具体实现。 如果你要实现自己的一个解码器,实现第三部分的那几个回调函数就可以了。 #define OFFSET(x) offsetof(H264Context, x)

avcodec_send_packet()函数与avcodec_receive_frame()函数

https://blog.csdn.net/yihuanyihuan/article/details/84679701 https://blog.csdn.net/zhangpengzp/article/details/88942053

FFMPeg代码分析:avcodec_decode_video2函数

该函数的作用是实现压缩视频的解码。在avcodec.h中的声明方式如下: int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt);待解码的数据保存在avpkt->data中,大小为avpkt->size;解码完成后,pictu

FFMPeg代码分析:AVCodec结构体以及编解码器的查找和加载

书接上回。在调用av_find_stream_info函数分析媒体文件并找到其中的视频流之后,视频流的相关信息被存放在了AVFormatContext结构体实例中。此时AVCodecContext实例所保存的AVCodec仍然为空。该结构体的定义如下: typedef struct AVCodec {const char *name;//codec名称,如果是解码HEVC的文件,那就是"he

ffmpeg源代码简单分析 :avcodec_decode_video2()

avcodec_decode_video2()的函数实现如下所示: int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,int *got_picture_ptr,const AVPacket *avpkt){AVCodecInternal *avci = avctx->i

工作小记 ffmpeg avcodec_receive_frame 缓存问题

最近的流媒体项目中,在拉车辆流的过程中,发现调用ffmpeg avcodec_send_packet 和avcodec_receive_frame 时总是不能做到送入1包,立刻吐出对应pts的一帧,总是有缓存2-3帧的问题。对于普通的播放器已经足够,但是平行驾驶要求的极低延时就无法做到了。因为传输的h264流完全是只有IP帧,并没有依赖后向的B帧。所以开始调查问题解决办法。 1 首先尝试一些低延时

FFMPEG之结构体解析 --- AVCodec

在FFMPEG中定义了一系列的结构体,计划写一些分析结构体的文章,在这里列一个列表: FFMPEG之结构体解析 --- AVFormatContext FFMPEG之结构体解析 --- AVInputFormat FFMPEG之结构体解析 --- AVOutputFormat FFMPEG之结构体解析 --- AVIOContext