自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李点点

唯一确定的是,明天会使我们大吃一惊!

  • 博客(23)
  • 收藏
  • 关注

原创 数据结构-----红黑树

/如果指向同一个结点 说明是叶子结点 } rbtree;1//如果指向同一个结点 说明是叶子结点 } rbtree;2//如果指向同一个结点 说明是叶子结点 } rbtree;

2023-05-03 12:31:44 208

原创 ffplay播放器-音视频解码线程

解码线程ffplay的解码线程独⽴于数据读线程,并且每种类型的流(AVStream)都有其各⾃的解码线程,如:video_thread⽤于解码video stream;audio_thread⽤于解码audio stream;subtitle_thread⽤于解码subtitle stream。为⽅便阅读,先列⼀张表格,梳理各个变量、函数名称类型PacketQueueFrameQueuevidck解码线程视频videoqpictqvidcllkvideo_t

2022-05-21 18:39:19 769 4

原创 ffplay播放器-数据读取线程

数据读取线程从ffplay框架分析我们可以看到,ffplay有专⻔的线程read_thread()读取数据,且在调⽤av_read_frame 读取数据包之前需要做例如打开⽂件,查找配置解码器,初始化⾳视频输出等准备阶段,主要包括三⼤步骤:准备⼯作For循环读取数据退出线程处理⼀ 准备⼯作avformat_alloc_context 创建上下⽂ic->interrupt_callback.callback = decode_interrupt_cb;avformat_open_.

2022-05-09 23:54:32 1485

原创 ffplay播放器

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

2022-05-08 12:01:58 1566

原创 FFmpeg Filter过滤器

ffmpeg中有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter⽬录之下,⽤户需要进⾏滤 波时,就是是调⽤这些滤波器来实现的。ffmpeg对于调⽤滤波器有⼀整套的调⽤机制。FFmpeg filter简介FFmpeg filter提供了很多⾳视频特效处理的功能,⽐如视频缩放、截取、翻转、叠加等。 其中定义了很多的filter,例如以下常⽤的⼀些filter。scale:视频/图像的缩放overlay:视频/图像的叠加crop:视频/图像的裁剪trim:截取视频的⽚段rotat

2022-05-06 23:10:39 937

原创 音频过滤器实战

#include <stdio.h>#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>//#include <libavfilter/avfiltergraph.h>#include <libavfilter/avfilter.h>#include <libavfilter/buffersink.h>#include <libavfilte

2022-05-05 22:43:25 154

原创 FFmpeg过滤器框架分析

ffmpeg的filter⽤起来是和Gstreamer的plugin是⼀样的概念,通过avfilter_link,将各个创建好的filter按 ⾃⼰想要的次序链接到⼀起,然后avfilter_graph_config之后,就可以正常使⽤。 ⽐较常⽤的滤镜有:scale、trim、overlay、rotate、movie、yadif。scale 滤镜⽤于缩放,trim 滤镜⽤ 于帧级剪切,overlay 滤镜⽤于视频叠加,rotate 滤镜实现旋转,movie 滤镜可以加载第三⽅的视频, yadif 滤镜可以

2022-05-05 22:35:50 304

原创 AVIO内存输⼊模式

/** * Allocate and initialize an AVIOContext for buffered I/O. It must be later * freed with avio_context_free(). * * @param buffer Memory block for input/output operations via AVIOContext. * The buffer must be allocated with av_malloc() and fr

2022-05-05 21:53:10 140

原创 音视频FLV合成实战

FFmpeg合成流程示例本程序会⽣成⼀个合成的⾳频和视频流,并将它们编码和封装输出到输出⽂件,输出格式是根据⽂件 扩展名⾃动猜测的。示例的流程图如下所示。ffmpeg 的 Mux 主要分为 三步操作:avformat_write_header : 写⽂件头av_write_frame/av_interleaved_write_frame: 写packetav_write_trailer : 写⽂件尾avcodec_parameters_from_context:将AVCodecCont

2022-05-04 12:31:50 1852

原创 视频编码实战

FFmpeg流程从本地读取YUV数据编码为h264格式的数据,然后再存⼊到本地,编码后的数据有带startcode。与FFmpeg 示例⾳频编码的流程基本⼀致。函数说明:avcodec_find_encoder_by_name:根据指定的编码器名称查找注册的编码器。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_open2:打开编解码器。avcodec_send_frame:将AVFrame非压缩数据给编码器。。avcodec_rec

2022-05-03 22:39:28 1292

原创 H264编码原理

1. 视频为什么需要进行编码压缩一张为720x480的图像,用YUV420P的格式来表示,其大小为:7204801.5 约等于0.5MB如果是25帧,10分钟的数据量 0.5M1060*25 = 7500MB -> 7GB多视频编码压缩的目的是降低视频数据大小,方便存储和传输2. 为什么压缩的原始数据采用YUV格式视频编码是对一张张图像来进行的。我们知道彩色图像的格式是 RGB 的,但RGB 三个颜色是有相关性的。采用YUV格式,利用人对图像的感觉的生理特性,对于亮度信息比较敏感,

2022-05-03 21:23:21 741

原创 音频编码实战

FFmpeg流程从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。 示例的流程如下所示。avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_open2:打开编码器。avcodec_send_frame:将AVFrame⾮压缩数据给编码器。avcodec_receive_packet:获取到编码后的AVPacket数据,收到

2022-05-03 18:40:58 1176

原创 音频重采样

重点问题如何进行重采样采样率不⼀样的时候pts怎么处理官方参考文档:http://ffmpeg.org/doxygen/trunk/group__lswr.html重采样什么是重采样所谓的重采样,就是改变音频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出为什么要重采样为什么要重采样?当然是原有的音频参数不满足我们的需求比如在FFmpeg解码音频的时候,不同的音源有不同的格式,采样率等,在解码后的数据中的这些参数也会不一致(最新FFmpeg 解码音频后,

2022-05-03 17:48:30 4384

原创 FFmpeg内存模型

问题int avcodec_send_packet(AVCodecContext avctx, const AVPacketavpkt);int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);从av_read_frame读取到一个AVPacket后怎么放入队列?从avcodec_recevice_frame读取到一个AVFrame后又怎么放入队列?FFmpeg内存模型从现有的Packet拷贝一个新Packet的时

2022-05-03 10:27:34 261

原创 MP4格式分析

介绍mp4⽂件格式又被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器,广泛用于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,⽬前流行的视频编码格式AVC/H264 定义在MPEG-4 Part 10)。mp4⽂件格式基于Apple公司的QuickTime格式,因此,QuickTime File Format Specification 也可以作为我们研究mp4的重要参考MP4文件结构的资料mp4box大杀器概述mp4⽂件由box组成,每个bo

2022-05-02 20:04:23 2767

原创 视频解码实战

视频解码对于FFmpeg⽽⾔,流程基本上和⾳频解码⼀致。 对于⾳频的resample和视频的rescale在⾳视频合成输出再做讲解。视频解码过程视频解码过程如下图所示: ⼀般解出来的是420pFFmpeg流程关键函数avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。av_parser_init:初始化AVCodecParserContext。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_ope

2022-05-02 16:24:03 1154

原创 音频解码实战

音频解码过程⾳频解码过程如下图所示FFmpeg流程关键函数avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。av_parser_init:初始化AVCodecParserContext。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_open2:打开解码器。av_parser_parse2:解析获得⼀个Packet。avcodec_send_packet:将AVPacket压缩数据给解码器。

2022-05-02 12:39:47 713

原创 FLV格式解封装(demuxer)-----FlvParser源码阅读

总体流程了解了FLV的封装原理,我们通过⼀个简单的FLV解析器的例⼦来看看FLV到底是怎么样封装/ 解封装的 该FLV的地址:功能强大的 FLV 文件分析和解析器这个程序能够做什么:(1)不能直接商⽤,因为每个tag解析后都存放到内存;(2)audio parse(3)video parse(4)script parsemain函数流程:1、读取输⼊⽂件(flv类型的视频⽂件)2、调⽤Process进⾏处理3、退出int main(int argc, char *argv[]){

2022-05-02 11:53:45 823

原创 FLV格式分析

简介FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积 ⼩、封装简单等特点,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤ FLV格式封装的⽂件后缀为.flv。FLV封装格式是由⼀个**⽂件头(file header)和 ⽂件体(file Body)**组成。其中,FLV body由⼀ 对对的(Previous Tag Size字段 + tag)组成。Previous Tag Size字段 排列在Tag之前,占⽤ 4个字节。Previou

2022-05-02 09:42:59 1998

原创 H264 NALU格式分析

H264简介H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称 为H.264,在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10,⼜叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。

2022-05-01 18:51:06 627

原创 AAC ADTS格式分析

AAC⾳频格式

2022-05-01 17:54:42 489

原创 ffmpeg-解封装(demuxer)

============================FFMPEG系列:FFmpeg编程入门============================简介:基于ffmpeg的封装,将flv或者MP4封装格式的文件分离出音频和视频,并且打印其音视频的参数流程图:FFMPEG 的关键枚举AVCodecIDAV_CODEC_ID_VP9,AV_CODEC_ID_HEVC,AV_CODEC_ID_PCM_S16LE_PLANAR,AV_CODEC_ID_ADPCM_G722,等等

2022-05-01 17:25:30 491

原创 FFmpeg编程入门

播放器框架常用音视频术语容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器(有些码流音频他是纯PCM)。数据帧/数据包(Frame/Packet):通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。编解码器:编解

2022-05-01 16:02:58 2071

空空如也

空空如也

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

TA关注的人

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