自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(271)
  • 收藏
  • 关注

原创 ffmpeg ffplay.c 源码分析二:数据读取线程

一 准备⼯作本章主要是分析 数据读取线程read_thread 中的工作。如上图红色框框的部分从ffplay框架分析我们可以看到,ffplay有专⻔的线程read_thread()读取数据,且在调⽤av_read_frame 读取数据包之前需要做:1.例如打开⽂件,2.查找配置解码器,3.初始化⾳视频输出等准备阶段,主要包括三⼤步骤:准备⼯作For循环读取数据退出线程处理一 准备⼯作准备⼯作主要包括以下步骤:1.avformat_alloc_context 创建上下⽂2.

2024-07-25 22:27:33 711

原创 ffmpeg ffplay.c 源码分析一:ffplay 框架分析,主要数据结构分析

ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。例如哔哩哔哩著名开源项⽬ijkplayer也是基于ffplay.c进⾏⼆次开发。ffplay实现了播放器的主体功能,掌握其原理对于我们独⽴开发播放器⾮常有帮助。2.1.1 初始化packet queue。2.1.2 初始化frame queue。2.1.4 创建数据读取线程。1 ffplay.c的意义。1 ffplay.c的意义。2.1.3初始化clock。2.1 播放器初始化。

2024-07-18 00:38:53 261

原创 FFmpeg库常用函数介绍(三)

假设val数组为enum AVPixelFormat val[] = {AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUYV422, AV_PIX_FMT_NONE},那么term的值就是AV_PIX_FMT_NONE,AV_PIX_FMT_NONE值为-1;作用:获取描述通道布局属性的字符串,该字符串与av_channel_layout_from_string的参数格式相同,可以用来重建相同的通道布局。例如,AV_OPT_SEARCH_CHILDREN指的是首先搜索给定对象的子对象。

2024-07-17 13:00:33 684

原创 FFmpeg库常用函数介绍(二)

作用:将数据流文件尾写入到文件中,并释放文件私有数据,在avformat_write_header调用成功后才可以调用。注意:声道布局描述的是声道的分布和排列方式,它决定了声道数和声道之间的位置关系。注意:和av_write_frame的区别是是否需要交错写入,av_write_frame不会交错写入。返回值:-1表示时间戳ts_a早于ts_b,0表示两个时间戳相等,1表示时间戳ts_a滞后于ts_b。注意:和av_free_packet功能类似,但av_free_packet在较新版本中已经被弃用。

2024-07-17 12:59:16 865

原创 ffmpeg 常用api 一

注意:在较新版本中,该函数已被弃用,取而代之的是avcodec_parameters_copy、avcodec_parameters_to_context和avcodec_parameters_from_context。作用:和av_rescale_q_rnd的作用完全一样,也是将以时间基bq表示的时间戳a转换成以时间基cq表示,区别在于取整方式不可选,固定为AV_ROUND_NEAR_INF,也就是四舍五入。一般不使用,为NULL;format_name:输出格式的名称,例如”avi”、”flv”等。

2024-07-17 12:58:21 902

原创 音视频开发36-7【FFmpeg】Filter 过滤器代码实现

AVFilterLink用于连接滤镜图中两个滤镜之间的输入和输出。它包含了连接两个滤镜所需的所有信息,例如输入和输出的样本格式、缓冲区、时间戳等等。AVFilterLink还包含了有关滤镜链中帧的信息,如PTS(Presentation Time Stamp,显示时间戳)和DTS(Decoding Time Stamp,解码时间戳)。通过AVFilterLink,不同的滤镜可以在滤镜图中相互连接,从而实现视频和音频处理的各种功能。AVFilterPad是FFmpeg中的结构,用于描述滤镜的输入或输出端口。

2024-07-14 18:58:39 913

原创 C++11 设计模式8 责任链/职责链模式 ,(ChainofResponsibility)

责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

2024-07-14 10:58:27 296

原创 音视频开发36-6【FFmpeg】Filter 过滤器 ⑥ ( 九宫格画面拼接 | nullsrc 过滤器 | setpts 过滤器 | scale 过滤器 | 内置输入/输出流表示 )

【FFmpeg】Filter 过滤器 ⑥ ( 九宫格画面拼接 | nullsrc 过滤器 | setpts 过滤器 | scale 过滤器 | 内置输入/输出流表示 )_c语言调用ffmpeg filter 实现图像拼接-CSDN博客

2024-07-14 09:03:21 166

原创 音视频开发36-5 Filter 过滤器 ⑤ ( 画中画 - overlay 过滤器 | overlay 过滤器可选参数设置 | 内置参数 | 基础用法 | 控制画中画尺寸及播放效果 跑马灯效果 )

【FFmpeg】Filter 过滤器 ⑤ ( 画中画 - overlay 过滤器 | overlay 过滤器可选参数设置 | 内置参数 | 基础用法 | 控制画中画尺寸及播放效果 | 跑马灯效果 )_ffmpeg overlay 参数-CSDN博客

2024-07-14 09:02:01 114

原创 音视频开发36-4 FFmpeg 编码- Filter 过滤器 ④ ( 图片水印 - movie 过滤器 / overlay 过滤器 | movie 过滤器内置参数值简介 | 图片水印

FFmpeg中 的movie 过滤器可用于向 视频中添加 图片水印;上述 movie 过滤器语法中 ,file_path 是必须指定的参数 ,设置输入文件路径 ,可以是 文件 / 协议 / 设备;下面的参数都是可选参数 , 不是必须得 , 可选参数 与 file_path 参数 之间都使用冒号隔开;format_name 参数 : 设置 输入文件的封装格式;FFmpeg 可以自动识别出文件的格式 , 因此该选项一般情况下不需要显示指定 , 除非设置的文件没有后缀;

2024-07-14 08:24:01 948

原创 音视频开发36-3 FFmpeg 编码- Filter 过滤器 ③ ( 文字水印 - drawtext 过滤器 | drawtext 过滤器支持库编译配置 | drawtext 过滤器

drawtext 过滤器 是 FFmpeg 中的一个 视频过滤器 , 用于 在 视频画面帧 上绘制文本 , 也就是添加文字水印 , 也可用于添加 标题 , 字幕 等元素;文字水印属性 : drawtext 过滤器 可以 在 视频画面 的任何位置添加任何文字内容 , 并可以 自定义文字的字体 / 大小 / 颜色 / 位置 等属性;动态时间戳显示 : drawtext 过滤器 可以 使用 时间戳 显示 动态变化 的时间信息 , 如 : 在视频上显示从 视频开始 到 当前时间 的经过时间;

2024-07-14 08:10:57 594

原创 ffmpeg 时间相关--时间基,timebase,pts,dts,duration

每种格式的time_base的值不一样,根据采样来计算,比如mpeg的pts、dts都是以90kHz来采样的,所以采样间隔就是1/900000秒。///3、AVPacket下的pts和dts以AVStream->time_base为单位(数值比较大),时间间隔就是AVStream->time_base。///2、AVCodecContext的time_base单位同样为秒,不过精度没有AVStream->time_base高,大小为1/framerate。/// 不同结构体的 time_base。

2024-07-13 15:29:08 289

原创 音视频开发36-2 FFmpeg 编码- Filter 过滤器 ② ( 裁剪过滤器 Crop Filter | 裁剪过滤器语法 | 裁剪过滤器内置变量 | 裁剪过滤器常用用法 )

FFmpeg 裁剪过滤器 Crop Filter 可用于 裁剪 视频或图像 的特定区域;裁剪过滤器 Crop Filter 的 主要工作 是 将 输入视频帧 的 指定宽高像素的区域 从 x 和 y 坐标位置 裁剪出来 , 输出 到指定的 宽高像素画面 中;x 和 y 是裁剪的 输入视频 的 左上角坐标;裁剪的画面 像素宽高 可以 不等于 输出画面的 像素宽高;裁剪过滤器 不仅可以裁剪视频 , 还可以裁剪图片;

2024-07-12 22:55:09 309

原创 音视频开发36-1 FFmpeg 编码- Filter 过滤器 ① ( FFmpeg 过滤器简介 | 过滤器概念 | 过滤器用法 | 过滤器工作流程 | 过滤器文档 | 过滤器分类 )

FFmpeg 过滤器 又称为 " 滤镜 " , 是 FFmpeg 的重要的组件 , 用于 处理音视频流 和 处理多媒体操作;裁剪旋转缩放变速添加水印音视频转码音视频剪辑多个 过滤器 一起使用 , 又称为 " 过滤器链 " , 或 " 滤镜链 ";

2024-07-12 17:52:53 779

原创 ffmpeg 找到编解码器,和编解码器上下文后,是如何初始化具体的编解码器的?aac 初始化流程大致如下

3.3 av_codec_iterate 方法 实际是是从 codec_list 中找到对应的 codec,这个list很长,包括所有的 编码器 和 解码器 在ffmepg 内部的名字。内部是做了这个事情的。我们可以看到,在 codec_list 对应的aac有多个,我们用 ff_aac_encoder 来说明。在search 代码后,发现,ff_aac_encoder 的定义是在 aacenc.c 中,其中有。1.当使用 avcodec_find_encoder_by_name找到编码器的时候,

2024-07-08 21:02:22 385

原创 音视频开发35 FFmpeg 编码- 将YUV 和 pcm合成一个mp4文件

****该程序的目的是:* 将 一个pcm文件 和 一个 yuv文件,合成为一个 0804_out.mp4文件* pcm文件和yuv文件是从哪里来的呢?是从 sound_in_sync_test.mp4 文件中,使用ffmpeg命令 抽取出来的。* 这样做的目的是为了对比前后两个mp4(sound_in_sync_test.mp4 和 0804_out.mp4 ) 文件。

2024-07-03 12:05:16 431

原创 windows下在QT里调用ffmpeg库处理音频视频数据时,出现error missing -D__STDC_FORMAT_MACROS 错误的解决方法(MINGW32编译器)。

windows下在QT里调用ffmpeg库处理音频视频数据时,出现error missing -D__STDC_FORMAT_MACROS 错误的解决方法(MINGW32编译器)。#define __STDC_FORMAT_MACROS //timestamp.h中的错误。#define __STDC_CONSTANT_MACROS //common.h中的错误。

2024-07-01 15:33:15 284

原创 音视频开发34 FFmpeg 编码- 将h264和acc文件打包成flv文件

av_write_frame/av_interleaved_write_frame: 写packet。示例本程序会⽣成⼀个合成的⾳频和视频流,并将它们编码和封装输出到输出⽂件,输出格式是根据⽂件。avformat_write_header : 写⽂件头。av_write_trailer : 写⽂件尾。FFmpeg合成流程。FFmpeg合成流程。示例的流程图如下所示。

2024-06-30 21:03:21 305

原创 音视频开发33 FFmpeg 编码- error 信息打印常用方法

【代码】音视频开发33 FFmpeg 编码- error 信息打印常用方法。

2024-06-29 14:10:35 135

原创 音视频开发32 FFmpeg 编码- 视频编码 h264 参数相关

可选值为[“undef”],表示传输特性,包括undef、bt709、bt470m、bt470bg、smpte170m、smpte240m、linear、log100、log316、iec61966-2-4、bt1361e、iec61966-2-1、bt2020-10、bt2020-12、smpte2084、smpte428和arib-std-b67。可选值为[7],表示亚像素运动估计和模式决策的级别,包括0(仅全像素,不推荐使用)、1(SAD模式决策,一次qpel迭代)、2(SATD模式决策)等。

2024-06-28 23:39:29 787

原创 音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name

***/那么这个 AVCodecID 如果传递的是AV_CODEC_ID_AAC,那么这个AAC具体是哪个呢?通过可以看到 结果如下意思是如果是decoders:默认会使用第一个 aac如果是encoders:默认也会使用第一个 aac。

2024-06-27 23:53:04 442

原创 音视频开发30 FFmpeg 视频编码- 流程以及重要API,H264编码原理说明,该章节使用h264编码说明

我们在前面已经编码完成的图像中,循环遍历每一个 块,将它作为预测块,用当前的编码块与这个块做差值,得到残差块,取残差块中 像素值的绝对值加起来最小的块为预测块,预测块所在的已经编码的图像称为参考 帧。得到的结果就是量化后的 系数。一般就是即将编码块的左边块、上边块、左上角块和右上角块, 通过将这些块与编码块相邻的像素经过多种不同的算法得到多个不同的预测 块。解码的时候,需要将 QStep 乘以量化后的系数得到变换系数,很明显这个变换系数和原始没有量 化的变换系数是不一样的,这个就是常说的有损编码。

2024-06-27 14:18:48 978

原创 音视频开发29 FFmpeg 音频编码- 流程以及重要API,该章节使用AAC编码说明

从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。

2024-06-19 21:06:43 1140

原创 Windows修改CMD窗口编码为UTF-8

windows下的cmd的默认编码是GBK编码,有时可能造成乱码问题,下面是我找到的两种更换编码方式为UTF-8的方法。

2024-06-16 23:01:49 689

原创 音视频开发28 FFmpeg ffmpeg各种帧率 计算说明

1、ffmpeg在转码过程中,输出文件的帧率如何确定。2、深入ffmpeg源码,剖析帧率的数据来源,涉及到的有 基本帧率(tbr/r_frame_rate)、平均帧率(fps/avg_frame_rate)以及编码器帧率(framerate)的数值是如何获取和计算的,以及它们之间的关系。3、上述数据如何通过ffmpeg/ffprobe/ffplay获取。

2024-06-16 15:44:10 763

原创 音视频开发28 FFmpeg 使用 AVDictionary 配置参数

本文是我的 FFMPEG Tips 系列的第五篇文章,准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置和定义播放器的参数,ffmpeg 本身也有很多 API 通过它来传递参数。当然,我们也可以仿照 ffmpeg,给自己的核心结构体对象定义这样的 options 选项,这篇文章就不展开详述了。那么,我们怎么知道 ffmpeg 的这个 API 支持哪些可配置的参数呢?(4) 获取 key 的值。

2024-06-16 14:42:49 311

原创 音视频开发27 FFmpeg Sample Aspect Ratio

为什么psp中的480P的sar为40:33?------------------ =sar值 例如转一个720X480的16:9的视屏,根据公式得sar=----------=32:27。一个校正值是必须的,它依赖于两者的SAR必须是已知的(就是说,必须知道原始SAR和目标SAR,才能计算这个校正值)所以说,图像的分辨率越高,画面越细腻,原因就是点变小了,我们的眼睛感觉不到它的存在了),在一个系统上,素材的播放是根据特定的sar来的,不同的sar会导致图像的拉伸或者挤压,它们的sar是1:1,

2024-06-16 14:38:19 250

原创 音视频开发-- 坑整理

AVStream 是从 av_find_best_stream获得的,而 AVCodecContext 是从直接通过 avcodec_find_decoder(enum AVCodecID id) 获得的,而AVCodecID 就是固定的那几种,例如 AV_CODEC_ID_H264,可以想象,ffmpeg内部的实现一定是有限制的,其实现一定是参考 h264的spec。AVStream 和 AVCodecContext 得到的信息不一样,严格来说,是AVStream获得的多。

2024-06-14 22:48:55 413 1

原创 使用sourceInsight 查看源代码

使用sourceInsight 查看源代码

2024-06-12 17:39:56 227

原创 音视频开发26 FFmpeg 音频重采样实战化思考前提 - 时间问题整理,avcodec_send_packet源码分析,avcodec_receive_frame源码分析

1、AVStream的time_base的单位是秒。每种格式的time_base的值不一样,根据采样来计算,比如mpeg的pts、dts都是以90kHz来采样的,所以采样间隔就是1/900000秒。3、AVPacket下的pts和dts以AVStream->time_base为单位(数值比较大),时间间隔就是AVStream->time_base。2、AVCodecContext的time_base单位同样为秒,不过精度没有AVStream->time_base高,大小为1/framerate。

2024-06-11 23:21:45 304

原创 音视频开发25 FFmpeg 音频重采样实战化思考前提 - AVAudioFifo 详细分析

AVAudioFifo是FFmpeg提供的一个先入先出的音频缓冲队列。主要要以下几个特点:操作在样本级别而不是字节级别。支持多通道的格式,不管是planar还是packed类型。当写入一个已满的buffer时会自动重新分配内存。

2024-06-10 18:50:22 194

原创 音视频开发24 FFmpeg 音频重采样实战化思考,从mp3到aac,AVAudioFifo的应用

在23章节,学习如下的内容一个采样率为44100,采样通道为2,格式为AV_SAMPLE_FMT_DBL 的数据转换成一个采样率为48000,采样通道为1,格式为AV_SAMPLE_FMT_S16 的按照我们以往的经验,转码的大致流程应该是这样的:解封装->提取音频流->解码成->重新编码成AAC流程是这样没错,但是内部的出来细节是怎样的呢?是mp3解码出来后的AVFrame可以通过函数avcodec_send_frame送进aac编码器即可吗?

2024-06-09 22:27:51 624

原创 音视频开发23 FFmpeg 音频重采样原理,音频重采样API 整理

1.1 为什么要重采样?为什么要重采样?当然是原有的⾳频参数不满⾜我们的需求。⽐如在FFmpeg解码⾳频的时候,不同的⾳源有不同的格式,采样率等,在解码后的数据中的这些参数也会不⼀致。(最新FFmpeg 解码⾳频后,⾳频格 式为AV_SAMPLE_FMT_FLTP,这个参数应该是⼀致的),如果我们接下来需要使⽤解码后的⾳频数据做 其他操作,⽽这些参数的不⼀致导致会有很多额外⼯作,此时直接对其进⾏重采样,获取我们制定的⾳频 参数,这样就会⽅便很多。

2024-06-07 18:41:31 997

原创 音视频开发22 FFmpeg AVIO内存输入模式

avio是FFmpeg中的一个模块,用于实现多种输入输出方式的封装。avio提供了一系列API,可以将数据从内存读取到缓冲区中,也可以将缓冲区中的数据写入到内存中。其实现依赖于IOContext结构体,该结构体定义了当前输入/输出事件的状态、数据、回调函数等信息,并支持通过自定义回调函数实现不同的输入/输出方式。内存输入(Memory Input)是指将数据从内存中读取到缓冲区中,常见的应用场景包括:从内存中读取音视频数据进行解码或处理。

2024-06-07 15:09:21 878

原创 音视频开发21 FFmpeg 视频解复用练习,将一个mp4文件,分解成一个aac文件 和 h264文件

【代码】音视频开发21 FFmpeg 视频解复用练习,将一个mp4文件,分解成一个aac文件 和 h264文件。

2024-06-07 09:57:28 132

原创 音视频开发20 FFmpeg 视频解码- MP4文件格式分析

一个mp4文件通常由音频和视频两部分组成(当然有些还包含字幕和一些自定义的信息),一段在时间上相关联的sample序列sample:对于视频而言是一帧压缩后的图像数据(如264/h265数据包),sample:对于音频而言是:一小段语音信号采样编码后的数据(aac编码数据包)我们将这种sample序列定义为一个track,于是就有了和的说法。一段数据协议通常由两部分组成:HEADERDATA其中Header一般具有一种固定的格式,它的作用是描述其后的Data部分。

2024-06-06 18:46:45 1043

原创 音视频开发19 FFmpeg 视频解码- 将 h264 转化成 yuv

视频解码过程视频解码过程视频解码过程如下图所示:⼀般解出来的是420pFFmpeg流程这里的流程是和音频的解码过程一样的,不同的只有在存储YUV数据的时候的形式。

2024-06-06 16:03:19 973

原创 音视频开发18 FFmpeg AVCodec 说明,AVCodecContext 说明

3.调用av_codec_next()函数,即可获得指向链表下一个解码器的指针,循环往复可以获得所有解码器的信息。注意,如果想要获得指向第一个解码器的指针,则需要将该函数的参数设置为NULL。采样格式:16 bit, 32 bit, 在ffmpeg 中 对应类型为 AVSampleFormat。声道数: 1为单声道,2 为立体声 在ffmpeg 中 对应类型为 AVChannelLayout。对于视频,一定要知道视频的像素,视频的格式-也就是RGB/yuv, fps。AVMediaType定义如下。

2024-06-05 22:18:51 259

原创 音视频开发17 FFmpeg 音频解码- 将 aac 解码成 pcm

这一节,接分析,前面我们已经对一个 MP4文件,或者 FLV文件,或者TS文件进行了 解复用,解出来的 视频是H264,音频是AAC,那么接下来就要对H264和AAC进行处理,这一节 主要是对 AAC进行处理。

2024-06-03 19:48:40 681 1

原创 音视频开发16 FFmpeg FLV文件解码,不使用ffmpeg提供的API,自己解析,代码实现。注意的是,这个code需要掌握之前的 AAC ADTS格式,AVC NALU,以及FLV格式才能看懂

D:\AllInformation\qtworkspacenew\07-04-flv_parser_cplus

2024-06-03 11:06:21 419

FLV文件解码,不使用ffmpeg提供的API解析

FLV 文件 不使用ffmpeg 提供的api 解析,学习这个的目的是,在后续的 流媒体中会自己解析flv,或者封装flv,因此要掌握,难度较大,需要3天 full time 学习

2024-06-03

音视频开发12 FFmpeg 解复用详情代码测试-使用不同的文件测试log

音视频开发12 FFmpeg 解复用详情代码测试-使用不同的文件测试log

2024-05-30

epoll反应堆 libevent.c核心源码

epoll反应堆 libevent.c核心源码

2024-03-22

socket高并发多线程多进程代码

socket高并发多线程多进程代码

2024-03-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除