FFmpeg
FFmpeg相关内容
泰勒朗斯
人,可以痛苦,可以失意,可以疯狂的爱,可以恣意的恨,却别忘了行程,别忘记赶路。
展开
-
git中关于submodule的操作
如果出错,执行。原创 2023-12-26 19:43:41 · 561 阅读 · 0 评论 -
ffmpeg编译cuvid的时候:ERROR: cuvid requested, but not all dependencies are satisfied: ffnvcodec
确认安装了,大概率是pkg-config没有安装。首先确认有没有安装nv-codec-header。原创 2023-12-26 16:25:35 · 576 阅读 · 0 评论 -
FFmpeg之AVCodec
这一节是最重要的一节,ffmpeg的解码,还是和以前一样,一定是先来一个上下文context,再一个具体的解码器类。AVCodecContext和下面是一个解码器定义,三部分组成,第一部分是设置参数,第二部分是基类,第三部分是具体实现。如果你要实现自己的一个解码器,实现第三部分的那几个回调函数就可以了。结构体定义函数函数调用逻辑慢慢补充原创 2023-12-12 14:30:35 · 842 阅读 · 0 评论 -
FFmpeg之HWContextType
具体看看结构体定义吧,一大堆函数指针,这些就是你要实现的,不一定全部要实现,实现你自己想要的就可以了,主要的有transfer_data_to/transfer_data_from,map_to/map_from。仔细看上面函数就发现,全部是device mem操作,大白话说就是ffmpeg通过这套机制来实现D2H或者H2D的操作,别无其它。HWContextType算是ffmpeg中为硬解码第三方接口的一个辅助类,它自己有两个辅助子类。那么它辅助硬解码器做什么呢?我们还是通过英伟达的例子来看。原创 2023-12-12 14:11:48 · 838 阅读 · 0 评论 -
FFmpeg之AVHWAccel
ffmpeg是通过解码起家,所以它内部有很多自己写的软解码器,在这些软解码器的解码过程当中,比如说对于码流中的某些反量化,反变换等操作,把这些操作挪到一块硬件上,这块硬件就是加速设备。这就是hwaccel加速解码的原理,它是在ffmpeg软解码的基础上将一些特定算法加载到硬件上去做。我们可以看看ffmpeg的h264解码器,红框内部的都是h264解码器的加速插件,NVDEC只是其中之一。可以看看AVHWAccel结构体定义,发现有几个关键的函数指针,这些指针就是你需要去实现的。下面我们就说道说道。原创 2023-12-12 14:01:37 · 620 阅读 · 0 评论 -
FFmpeg之AVFilterGraph
AVFilterGraph是对pileline的一个整体描述,没看之前以为里面大概是个有向无环图什么的来描述,进去一看,居然只是用链表来描述。原创 2023-12-12 12:01:17 · 861 阅读 · 0 评论 -
FFmpeg之AVFilterLink
这个结构体主要是用来link两个filter的,它存在于每个AVFilterContext中。原创 2023-12-12 12:00:33 · 901 阅读 · 0 评论 -
FFmpeg之AVFilterPad
AVFilterPad起一个输入和输出接口的作用。原创 2023-12-12 12:00:02 · 674 阅读 · 0 评论 -
FFmpeg的AVFilter框架总成AVFilter-AVFilterContext
毫无疑问,还是和前面的一样一个context和一个包含有回调函数指针的插件结构体,想要实现自己的插件,主要实现里面的回调函数就可以了,当然,AVFilter比其它模块稍微复杂一点还要牵扯到其它一些辅助模块,在其它章节介绍。原创 2023-12-12 11:59:17 · 901 阅读 · 0 评论 -
FFmpeg的io 辅助函数
做过流媒体服务器的都知道这个是多么重要。第二个判断后缀是否一致。原创 2023-12-12 10:30:49 · 437 阅读 · 0 评论 -
FFmpeg的RTP-SDP
写的很清楚嘛,Generate an SDP for an RTP session.原创 2023-12-12 10:24:22 · 418 阅读 · 0 评论 -
FFmpeg的调试打印函数族
这里就简单罗列下,免得你都不知道有这些接口。原创 2023-12-12 10:22:16 · 422 阅读 · 0 评论 -
FFmpeg的AVOutputFormat
还是和前文一样,先把架构勾勒出来,后期慢慢讲一下代码流程,可以进行各类网络协议的推流,各类容器的封装。原创 2023-12-12 10:18:14 · 830 阅读 · 0 评论 -
FFmpeg的AVIODirContext
它的结构体/***//***/char *name;int type;int utf8;原创 2023-12-12 10:04:05 · 443 阅读 · 0 评论 -
FFmpeg的AVInputFormat
首先肯定是AVFormatContext,这个就是上下文,这个结构体太庞大了。特别要注意里面的AVIOContext,这两个回调可以从自己的内存中读取数据。另外还有一个AVStream的结构体,专门用来存储流。原创 2023-12-11 20:14:33 · 701 阅读 · 0 评论 -
FFmpeg的AVIOContext
下面的注释解释了一个类似于环形队列中读取数据,只要设置了这三个指针,就可以从它指定的内存中读取数据/***//***//** READING* | |* pos* WRITING* | |* pos*/int error;原创 2023-12-11 20:12:13 · 608 阅读 · 0 评论 -
FFmpegd的AVBSF
*** @{*/ /**/**/**/**/**/**/**/**上面是bsf的上下文,下面的是它的插件回调函数/***//***/*/看多了就会发现非常相似,基本就一个套路,一个上下文结构体,一个回调插件结构体,上下文中一个私有的指针,大小为priv_data_size,所以如果想要实现插件,简单的实现这几个回调函数就可以了。原创 2023-12-11 19:42:51 · 725 阅读 · 0 评论 -
FFmpeg的AVcodecParser
这个模块是AVCodec中的子模块,专门用来提前解析码流的元数据,为后面的解码做准备,这一点对cuda-NVdec非常明显,英伟达解码器的元数据解析是放在CPU上的,所以就非常依赖这个解析模块。如果你要实现一个自己的parse,只要简单的重写下面四个函数就可以了。下面是操作函数,第一个是列出所有的parser。FFmpeg中有很多现成的parser。第三个是最重要的,也就是解析pkt。最后一个是close parser。第二个是初始化parser。下面是插件接口的入口。原创 2023-12-11 18:24:35 · 666 阅读 · 0 评论 -
FFmpeg-基础组件-AVBufferPool
FFmpeg实现了一个AVBufferPool ,这个pool可以用来提前做些内存分配等,在ffmpeg cuvid插件中hwcontext_cuda.c文件夹中可以看到这个Pool的用法。下面是一个bufferPoll的定义,其中有一个refcount,作为ref来使用,另外有两个alloc函数和pool_free。下面是Pool的元素,BufferPoolEntry,可以看到一个next指针,其实就是一个单向链表。这个是用来释放AVBuffer 中的data数据的,可以由用户来指定。原创 2023-12-11 17:30:23 · 676 阅读 · 0 评论 -
FFmpeg-基础组件-AVPacket
本章主要介绍AVPacket结构以及相关内容。首先非常抱歉,可能你看到的是我粘贴了以下代码,我先打个架构,后期慢慢补充,小弟时间有限。原创 2023-12-11 15:35:35 · 403 阅读 · 0 评论 -
FFmpeg-基础组件-AVFrame
本章主要介绍FFmpeg基础组件AVFrame.原创 2023-12-11 15:20:42 · 730 阅读 · 0 评论 -
FFNPEG编译脚本
【代码】FFNPEG编译脚本。原创 2023-11-24 14:15:14 · 804 阅读 · 0 评论 -
音视频处理中stride以及packet,plannertr学习
在下面这篇文章中有详细定义:https://www.cnblogs.com/lidabo/p/15509539.html原创 2022-05-31 09:45:41 · 225 阅读 · 0 评论 -
ffmpeg 颜色空间sws scale 转换使用案例
ffmpeg 颜色空间转换使用案例。原创 2023-02-07 16:20:16 · 173 阅读 · 0 评论 -
ffmpeg中AVFrame\AVPacket与自己的数据交互
在使用ffmpeg的过程中有时候我们自己的数据结构比如yuv数据或者压缩后的H264数据想要转为ffmpeg中的AVFrame或者AVPacket结构体,怎么转呢?这个在ffmpg的libavcodec的v4l2_buffers.h/.c中有非常好的案例。原创 2022-07-14 14:15:21 · 797 阅读 · 0 评论 -
ffmpeg案例中在cmake中已经链接了lib路径还失败的原因
2、可是我的cmakelists.txt,明明链接了啊。发现还真不是,赶紧改为这个方式,编译就成功了。原创 2022-10-18 14:33:43 · 404 阅读 · 0 评论 -
ffmpeg-codec函数调用流程分析
文章最后是ffmpeg解码的一个案例,我们先从把Codec所有核心函数列出来:1、创建codec看代码:所以核心在于codec_list这个数组:那么这个codec_list.c是哪来的呢?下面是configure里面的一段,所以下述文件全是configure的时候生成的codec_list.c在configure的时候被生成,具体如下总结一下调用:AVCodec定义:上面是根据名称来寻找codec,下面看看根据codec id来寻找的流程,核心就是那么多相同id的,倒地选择哪一个?原创 2022-10-28 20:12:45 · 1159 阅读 · 0 评论 -
jsffmpeg TS学习整理(待续)
最近跟兄弟单位接洽,发现对方使用的是jsffmpeg来实现网页播放:参考文档:基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放原创 2021-10-27 11:32:04 · 1658 阅读 · 0 评论 -
gstreamer资料收集
GStreamer是一个开源的多媒体框架库。利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。 应用程序可以透明的利用解码和过滤技术。开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜。 GStreamer是一个创建流媒体应用程序的框架。其基本设计思想来自于俄勒冈(Oregon)研究生学院有关视频管道的创意, 同时也借鉴了DirectShow的设计思想。 GStreamer的程序开发框架使得编写任意类型的流原创 2021-06-08 20:52:30 · 81 阅读 · 0 评论 -
如何完整编译ffmpeg
网上有很多编译文章,但是最好的还是官网:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos这里比较全面原创 2021-06-26 17:45:28 · 632 阅读 · 0 评论 -
ff_url_join辅助堆栈
Locals auth "\000\000\000\"... (128) char[128] cmd "�I\000p�\177\000\000@����\177\000\000��>��\177\000\000\002����\177\000\000\000\000\000\000\000\000\000\000\020\000\000\0000\000\000\000��>��\177\000\000��>��\177\000\000\001���\000\000\000.原创 2021-04-23 11:41:13 · 121 阅读 · 0 评论 -
av_parser_parse2用法以及解读
首先我们看ffmpeg中examples中的一个案例:/* * Copyright (c) 2001 Fabrice Bellard * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software with原创 2021-04-24 13:14:32 · 4871 阅读 · 0 评论 -
编译支持hevc 的ffmpeg编译-linux
首先,看这里:https://github.com/pingostack/pingos然后,下载ffmpegffmpeg源码连接:https://github.com/im-pingo/CDN-Union_H265 ffmpeg编译过程可参考ffmpeg官网文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Centosbuild.shinc_dir=${PWD}/nvheaders/includenvenc_inc=${PWD}/Nvidia/Vi原创 2021-01-25 16:32:56 · 640 阅读 · 0 评论 -
如何采用ffmpeg自己构造流写mp4或者 flv文件
代码引用了工程中的一部分,关键是要看如何自己构造一个输出流参数,不依赖输入流的流参数:#ifndef FFMPEGFILEWRITER_H#define FFMPEGFILEWRITER_H#include "videoutils.h"#include "writer.h"extern "C" {#include "libavformat/avformat.h"#include "libavformat/avio.h"}#define ONE 1namespace flow {cl原创 2021-10-11 10:42:04 · 933 阅读 · 0 评论 -
FFMPEG中AVFrame中数据是怎么存储的
这里我介绍一个存储YUV420P颜色格式的例子:w * h = 1920 * 1080buf中有大小和数据指针三个指针分别指向YUV分量,U和V分量分别是Y的1/4data指向数据这是矩阵步长,注意颜色空间再看一个例子,这个颜色空间是NV12 或者CUDA(AV_PIX_FMT_CUDA)这个是4:2:0 并且是Y 和UV两种方式这里只有在buf{0]中存储了所有的数据192010801.5=3110400,但是实际确实3133568,为什么会这样呢,暂时不知道,估计是解码后加入了其原创 2021-10-27 17:42:26 · 612 阅读 · 1 评论 -
AVFrame 的两种手动分配内部buf和data的方式
用ffmpeg的时候我们有时候需要手动为AVFrame分配内存数据,目前有两种方式,第一种:AVFrame *m_yuvFrame{nullptr};uint8_t *m_outbuf{nullptr};int m_outbuffSize{0};m_yuvFrame = av_frame_alloc(); // allocate buffer to store decoded frame AVPixelFormat av_fmt = AV_PIX_FMT_YUV420P; m_原创 2021-10-28 11:28:38 · 1631 阅读 · 0 评论 -
ffmpeg 推出的rtp流解析
通过命令:ffmpeg -re -i /home/zhe/Videos/12.mp4 -an -c copy -f rtp rtp://127.0.0.1:10086推出rtp流,抓包如下:首先第一个rtp流的载荷如下:payload=4118 00 19 67 64 00 32 AC 2C 6A 80 A0 02 D6 9B 80 80 80 A0 00 00 E1 00 00 2B F2 00 80 00 04 68 EE 3C B0 00 05 06 E5 01 C3 80na原创 2020-12-03 09:02:15 · 1750 阅读 · 0 评论 -
ffmpeg学习笔记
这是学习的网页内容:https://blog.csdn.net/weixin_42462202/article/details/99068041https://blog.csdn.net/u013692429/article/details/101536940avformat_open_input阻塞源码分析https://blog.csdn.net/cai6811376/article/details/77151469使用RTSP判断摄像机设备是否在线以及快照抓取...原创 2020-08-29 17:55:34 · 115 阅读 · 1 评论 -
ffmplay框架分析收集
https://www.cnblogs.com/leisure_chn/p/10301215.htmlhttps://github.com/feixiao/ffsrc原创 2021-01-08 16:11:30 · 223 阅读 · 0 评论 -
ffmpeg 小结
视频播放器的原理算法封装格式缓存做用:视频码流和音频码流按照必定的格式储存在一个文件汇总服务器视频编码数据网络做用:将视频像素数据(RGB,YUV等)压缩成为视频码流,从而下降视频的数据量app音频编码数据ide做用:将音频采样数据(PCM等)压缩成为音频码流,从而下降音频的数据量函数视频像素数据工具做用:保存了屏幕上每个像素点的像素值格式:常见的像素数据格式有RGB24, RGB32, YUV420P,YUV422P,YUV444P等。压缩编码中通常使用的是YUV格式的像素数据,最为常原创 2021-01-04 10:31:39 · 471 阅读 · 0 评论