FFmpeg接口使用说明

FFmpeg - 基本 API大全(视频编解码相关的) API功能描述常用场景注册所有编解码器和格式旧版本初始化 (4.0+已废弃)初始化网络库处理网络流前调用打开媒体文件或流本地文件/网络流输入获取流信息打开输入后获取详细信息查找解码器根据codec_id查找解码器创建编解码器上下文解码器/编码器设置复制参数到上下文设置解码器参数打开编解码器初始化编解码器读取数据包解码循环中获取数据发送数据包到解码器现代解码流程接收解码后的帧现代解码流程释放数据包处理完包后释放资源释放帧处理完帧后释放资源。 阅读详情

ed582d87840a43929dfef04a226e2b38.png

  1. avformat_open_input()
  • 打开输入流并读取标题。编解码器此时不会打开。流必须使用avformat_close_input()关闭。
  • **参数1: AVFormatContext ps:用户提供的AVFormatContext的指针(由avformat_alloc_context()分配),如果此接口失败AVFormatContext将被释放。
  • *参数2: const char url:要打开的流的URl地址。
  • **参数3:const AVInputFormat *fmt:**一般为NULL。
  • **参数4:AVDictionary **options,**结构体,简单的key/value存储, ffmpeg中有很多 API 通过它来传递参数。 例如设置缓存大小、设置超时断开连接时间、设置最大时延等。
  • **返回:**成功返回0,失败返回负数。
  1. avformat_find_stream_info()
  • 读取媒体文件的数据包以获取流信息.
  • **参数1:AVFormatContext *ic: **上下文句柄
  • **参数2:AVDictionary **options:**一般为NULL
  • **返回:**成功返回0,失败返回负数。
  1. av_find_best_stream()
  • ** 用于查找最佳匹配的媒体流。**
  • **参数1:AVFormatContext *ic:**上下文句柄
  • **参数2:enum AVMediaType type: 要查找的媒体流类型,可以是音频流、视频流或字幕流等。 **
enum AVMediaType {
    AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA
    AVMEDIA_TYPE_VIDEO,
    AVMEDIA_TYPE_AUDIO,
    AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous
    AVMEDIA_TYPE_SUBTITLE,
    AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse
    AVMEDIA_TYPE_NB
};
  • **参数3:int wanted_stream_nb: **期望的媒体流索引号,可以是特定的索引号,也可以是AV_NOPTS_VALUE(-1)表示任意流。
  • **参数4:int related_stream: **前一个相关流的索引号,如果没有前一个相关流,则传入-1。 ** **
  • **参数5:const struct AVCodec **decoder_ret: **返回解码器指针。
  • **参数6:int flags: **查找最佳流的标志位,默认为0。
  • ** 返回:**找到的最佳匹配媒体流的索引号,如果找不到则返回负数。
  1. avcodec_alloc_context3()
  • 分配AVCodecContext(编解码器上下文)并将其字段设置为默认值。生成的结构体应该使用avcodec_free_context()释放。
  • **参数1: AVCodec *codec:**通常为NULL。如果为NULL,则不会初始化编解码器特定的默认值。
  • 返回:AVCodecContext * 编解码器上下文;填充默认值或失败时为NULL。
  1. avcodec_find_decoder()
  • 通过id查找解码器。
  • **参数1:enum AVCodecID id: **枚举类型,所请求解码器的AVCodecID。
  • **返回:**如果找到一个,则为解码器,否则为NULL。
  1. avcodec_open2()
  • 使用给定的AVCodec初始化AVCodecContext。使用此函数之前上下文必须使用avcodec_alloc_text3()进行分配。
  • **参数1:AVCodecContext *avctx: **需要初始化的AVCodecContext。
  • **参数2:AVCodec *codec:**要打开此上下文的编解码器.
  • **参数3:AVDictionary **options:**字典选项,通常为NULL
  • **返回:**成功返回0,失败返回负数。
  1. av_packet_alloc()
  • 分配AVPacket并将其字段设置为默认值。由此产生的struct必须使用av_packet_free()释放。
  • 返回:AVPacket,失败时为NULL。
  1. av_frame_alloc()
  • 分配一个AVFrame并将其字段设置为默认值。由此产生的struct必须使用av_frame_free()释放。
  • **返回:**AVFrame,失败时为NULL。
  1. av_read_frame()
  • 返回流的下一帧。
  • **参数1:AVFormatContext *s:**上下文句柄。
  • **参数2:AVPacket *pkt:**返回的一帧数据包 。
  • **返回:**成功返回0,失败返回负数。
  1. avcodec_send_packet()
  • 提供原始数据包数据作为解码器的输入,即负责把AVpacket数据包发送给解码器
  • *参数1:AVCodecContext avctx:编解码器上下文
  • *参数2:AVPacket avpkt:一帧数据包
  • **返回:**成功返回0,失败返回负数。
返回说明:
@retval AVERROR(EAGAIN)  在当前状态下不接受输入-必须读取输出avcodec_receive_frame()
@retval AVERROR_EOF 解码器已被刷新,不能生成新的数据包发送给它
@retval AVERROR(EINVAL) 编解码器未打开,它是编码器,或者需要flush
@retval AVERROR(ENOMEM)  向内部队列添加报文失败
  1. avcodec_receive_frame()
  • **从解码器或编码器返回已解码的输出数据, 即从解码器取出一帧AVFrame数据 **
  • **参数1:AVCodecContext *avctx:**编解码器上下文。
  • **参数2:AVFrame *frame:**由编解码器分配的帧。
  • **返回:**成功返回0,失败返回负数。(返回参考avcodec_send_packet)
新旧版ffmpeg版本的解码接口说明及注意事项 新旧版ffmpeg版本的解码接口说明及注意事项 (1)旧版的解码函数avcodec_decode_audio4()用起来是挺好用的,就是只要设置好编码器上下文AVCodecContext *avctx、分配好输入AVFrame *frame的空间,以及输出的const AVPacket *avpkt,就可以进行解码和获取解码后的数据了。 //以往版本的解码函数 //函数原型 int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, 阅读详情

相关推荐

基于FFmpeg的编解码器设计实现方案

1、提供的能力codec组件基于FFmpeg做的封装,通过命令行+jni调用FFmpeg库源码的方式提供编解码、封装/解封装、滤镜、重采样等能力,具体包括:1、编码原始音频(pcm)、视频(yuv)数据编码(aac、ac3、mp3、h264、h265、mpeg4、mjpeg)2、解码编码的音频、视频数据解码成原始数据(pcm、yuv)3、转码基于1-2实现转码,如RV40转换为MPEG4格式。

yinshipin007的博客 560

ffmpeg常用接口

ffmpeg编解码常用接口 avcodec_send_packet() / avcodec_receive_frame(): 解码获取frame。avformat_new_stream() 和 avcodec_parameters_from_context() sws_scale():根据输入图像数据进行实际的转换操作,结果输出到输出缓冲区。 swr_init()/swr_alloc_set_opts():设置转换参数。 swr_alloc() / swr_free():创建/释放音频转换器。

smartDMer的专栏 1217

FFMPEG完美入门资料---004---FFmpeg 裁剪说明

此次是在 linux 环境下进行的,在以后的配置中,如果需要其他的什么编码器或什么 的, 按照选项要求进行配置即可。即使是有经验的用户也偶尔需要使用使用--help 选项, 因为一个复 杂的项目会包含附加的选项。与--prefix 选项类似,但是他是用来设置结构倚赖的文件的安装位置。相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用--enable-FEATURE 来起用它。类似的, --x-libraries 选项提供了向 configure 脚本指明包含 X11 库的目录的方法。

yinshipin007的博客 1216

FFmpeg基础知识之视频解码api接口

从输入文件中读取未解码的二进制码流到buf缓冲区通过码流解析器从二进制码流中解析出符合Packet结构的未解码视频数据将未解码视频数据送到解码器去解码从解码器中读取已经解码好的视频数据将视频数据写入到输出文件中这是一个非常普适且简单的流程,放到任何一个解码器中,都应该是差不多的。当然,流程是一样的,但是内部的算法称得上是千差万别,就像是吃饭一样,有些人每天粗茶淡饭,有些人每天食不果腹,吃的能一样吗?

weixin_46983030的博客 506

FFmpeg使用小结

最近由于工作需要在做一些视频监控相关的工作,其中一个研究点就是如何将网络摄像头的实时视频流拉取并保存到本地,我使用的开发语言是python,通过查找资料找到了如下几种方法。相较于opencv,FFmpeg对视频的处理更为专业,提供的接口也更加丰富,使得我们开发起来更加方便,对程序流程的掌控也更加精细。在接下来的篇幅中,我将从以下几个部分对FFmpeg的使用进行介绍。

yinshipin007的博客 265

ffmpeg4.4项目学习--常用模块及API接口(持续更新)

目录 一、引言 二、C++ 输入输出概述 ------> 2.1、iostream ------> 2.2、重定向 ------> 2.3、cout进行输出 ------> 2.4、使用cin输入 三、文件输入和输出 ------> 3.1、文件I/O 一、引言 二、常用API 1、封装相关 name function avformat_open_input 根据输入的源文件构造一个 AVFormatContext 结构体,是该媒体文件的抽象 avforma

文艺小少年的博客 1642

ffmpeg 比较 三:新旧接口说明

ffmpeg源码包里面有个apichangs文档,里面有各种接口改变的记录,如果你发现接口不能用了,可以去搜索那个文档,可以找到对应的新接口,然后到新接口对应的头文件中找到说明文字 网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。 为了解决大家

连志安 3349

【FFmpeg】FFmpeg中操作目录、文件的接口

1、简述 在学习FFmpeg源码中的例子时,发现FFmpeg封装了操作目录和文件的接口。这篇博客把这些接口罗列出来,作为笔记简单记录下。 2、 3、源码doc/examples/avio_dir_cmd.c #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libav...

郭老二 1011

ffmpeg接口实现rtmp推流

学习雷博士的文章16.04.7ffmpeg-6.1。

langzi113的专栏 1851

激光可燃气体传感器:核心技术环节分析

激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字)

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1043

从补码原理到实践:RISC-V中addi指令的符号扩展机制详解

本文深入解析了RISC-V架构中addi指令的符号扩展机制。从补码的数学原理出发,详细阐述了12位立即数在指令编码中如何通过符号位进行扩展,并结合lui指令,揭示了加载任意32位立即数的正确方法与实践陷阱,帮助开发者编写高效可靠的底层代码。

weixin_29161719的博客 139

【亲测免费】 C 使用 FFmpeg 显示 RTSP 视频流

C# 使用 FFmpeg 显示 RTSP 视频流 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个资源文件,用于在 C# 中通过 FFmpeg 显示 RTSP 视频流。通过二次封装 FFmpeg 接口成 DLL,使得在 C# 中调用变得简单方便。 资源文件描述 在 C# 中直接调用 FFmpeg 接口可能会比较困难,尤其是对于一些简单的功能。为了简化这一过程,我们...

gitblog_09802的博客 542

【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】

ISAR成像定标方法的研究具有重要意义,但是与之相关的学习资料以及仿真对于小白来说很难找或者很杂乱,本人作为小白之一在研究过程中苦不堪言,现在自己所要研究的定标内容已经完成,以后还学不学雷达也不一定,因为后面的路更难,现在打算把一些相关推导和仿真结果列出来,以供小白交流学习使用,希望能有点帮助。(PS:由于公式和符号的原因,采用图片形式说明)

此木旧年的博客 6418

FFMPEG详解

原文地址:http://3xin2yi.info/wwwroot/tech/doku.php/tech:multimedia:ffmpeg 文章主要包括一些常用的命令及选项、主要接口、架构等。 FFMPEG详解 认识FFMPEG 使用FFMPEG 基本选项 能力集列表 常用输入选项 常用输出选项 流标识 音频选项 视

瑜媛的专栏 1693

R语言新手也能搞定!WGCNA分析全流程代码详解(附常见报错解决方案)

本文为R语言新手提供了WGCNA分析的完整代码流程与实战指南。从环境配置、数据准备、软阈值选择、网络构建到模块-表型关联分析,逐步详解核心步骤。重点针对安装依赖、内存不足等常见报错提供了具体解决方案,帮助初学者避开陷阱,顺利完成加权基因共表达网络分析。

terraform7cloud的博客 539

使用单调栈求解最大矩形面积问题的C++实现

通过本文的介绍,我们详细讲解了如何使用单调栈求解砖墙中最大矩形面积的问题,并提供了完整的C++代码实现。希望通过本文的学习,你能掌握单调栈的基本概念及其在实际问题中的应用。如果你有任何疑问或建议,欢迎在评论区留言交流。

m0_57781768的博客 814

FFmpeg视频解码器

视频码流一般存储在一定的封装格式(例如MP4、AVI等)中。封装格式中通常还包含音频码流等内容。对于封装格式中的视频,需要先从封装格式中提取出视频码流,然后再进行解码。例如解码MKV格式中的视频文件,就是“MKV。例如解码H.264,就是“h.264码流。

iCora的博客 345

RK3588 InsightFace人脸识别移植及精度测试全解析

本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。

Hi20240217的博客 3673

【亲测免费】 Rust-FFmpeg 使用指南

Rust-FFmpeg 是一个用 Rust 编程语言编写的 FFmpeg 安全封装库,它提供了对 FFmpeg 库的低级绑定和高级使用的便捷接口。此项目由 [zmwangx](https://github.com/zmwangx) 维护,旨在让 Rust 开发者能够安全、高效地在他们的项目中利用 FFmpeg 强大的多媒体处理能力。项目遵循 WTFPL 许可证,确保了高度的自由度。 ## 项目快...

gitblog_00454的博客 1785

配置xen上VM混杂模式,使其能捕获物理网络流量

本文目的:配置VM和xen相应的物理网卡(pif)和虚拟网卡(vi

LeoDuo的专栏 3720

从矩阵理论角度理解偏最小二乘回归,以及在脑科学中(脑影像与行为、基因表达的关系)的应用举例

偏最小二乘法 (PLS) 是一种多元数据驱动的统计技术,旨在提取表示最大大脑行为关联的潜在变量(或潜在成分 latent components [LC])。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 975

【亲测免费】 FFmpeg.AutoGen 使用指南

该项目的目录结构如下: ``` - FFmpeg.AutoGen |- FFmpeg.AutoGen.Abstractions // 抽象层,提供跨平台的接口定义 |- FFmpeg.AutoGen.Bindings // 绑定层,包含动态和静态链接的FFmpeg库绑定 |- DynamicallyLinked // 动态链接FFmpeg...

gitblog_00080的博客 1814

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

可编译运行的FFMPEG接口RTSP保存为MP4

本仓库提供了一个资源文件,该文件展示了如何使用FFMPEG接口来打开RTSP流并将其保存为MP4格式的视频文件。保存后的MP4文件可以直接播放,方便用户进行后续处理或查看。 ## 功能描述 - **调用FFMPEG接口**:通过调用FFMPEG库中的相关接口,实现对RTSP流的处理。 - **保存为MP4格式**:将获取到的RTSP流保存为MP4格式的视频文件,确保文件格式通用且易于播放。 -

gitblog_09721的博客 355

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ffmpeg 新老接口问题及对照集锦

转自:http://blog.youkuaiyun.com/cosmoslife/article/details/7618616 网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。 为了解决大家的头痛的问题,特列一个贴子,把ffmpeg相关的一些常见的、版本的问题列举出来,供大

蜗牛的家 1902

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

FFmpeg.AutoGen API参考:掌握音视频开发的关键接口

FFmpeg.AutoGen是GitHub加速计划中的一个重要项目,它为C#/.NET和Core(Linux、MacOS和Mono)提供了FFmpeg自动生成的不安全绑定。通过这个项目,开发者可以轻松地在C#环境中利用FFmpeg强大的音视频处理能力,实现各种音视频开发需求。 ## 一、核心模块概览 FFmpeg.AutoGen项目结构清晰,主要包含多个关键模块,每个模块负责不同的功能,共同构

gitblog_00731的博客 714

C++封装FFMPEG拉取RTSP音视频流接口类

C++封装FFMPEG拉取RTSP音视频流接口类 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个C++封装的FFMPEG拉取RTSP音视频流的接口类。该类设计简洁,调用方便,采用回调方式获取音视频数据,适用于需要从RTSP流中提取音视频数据的场景。工程基于VS2015开发,希望对有相关需求的人士有所帮助。 功能特点 简单易用:接口类设计简洁,调用方便,无...

gitblog_09798的博客 556
上一篇: Qt5 + FFmpeg
下一篇: FFmpeg线程类封装+QT5实现直播拉流(文末含源代码)
taciturn丶
博客等级 码龄9年 471粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taciturn丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值