ffmpeg
文章平均质量分 86
音视频
生椰_李点点
没有脚踏实地的建立起来的东西,就无法形成精神和物质上的支撑!
展开
-
ffplay播放器-音视频解码线程
解码线程ffplay的解码线程独⽴于数据读线程,并且每种类型的流(AVStream)都有其各⾃的解码线程,如:video_thread⽤于解码video stream;audio_thread⽤于解码audio stream;subtitle_thread⽤于解码subtitle stream。为⽅便阅读,先列⼀张表格,梳理各个变量、函数名称类型PacketQueueFrameQueuevidck解码线程视频videoqpictqvidcllkvideo_t原创 2022-05-21 18:39:19 · 898 阅读 · 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 · 1555 阅读 · 0 评论 -
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 · 1655 阅读 · 0 评论 -
FFmpeg Filter过滤器
ffmpeg中有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter⽬录之下,⽤户需要进⾏滤 波时,就是是调⽤这些滤波器来实现的。ffmpeg对于调⽤滤波器有⼀整套的调⽤机制。FFmpeg filter简介FFmpeg filter提供了很多⾳视频特效处理的功能,⽐如视频缩放、截取、翻转、叠加等。 其中定义了很多的filter,例如以下常⽤的⼀些filter。scale:视频/图像的缩放overlay:视频/图像的叠加crop:视频/图像的裁剪trim:截取视频的⽚段rotat原创 2022-05-06 23:10:39 · 1033 阅读 · 0 评论 -
音频过滤器实战
#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 · 197 阅读 · 0 评论 -
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 · 331 阅读 · 0 评论 -
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 · 161 阅读 · 0 评论 -
音视频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 · 1991 阅读 · 0 评论 -
视频编码实战
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 · 1373 阅读 · 0 评论 -
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 · 830 阅读 · 0 评论 -
音频编码实战
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 · 1301 阅读 · 0 评论 -
音频重采样
重点问题如何进行重采样采样率不⼀样的时候pts怎么处理官方参考文档:http://ffmpeg.org/doxygen/trunk/group__lswr.html重采样什么是重采样所谓的重采样,就是改变音频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出为什么要重采样为什么要重采样?当然是原有的音频参数不满足我们的需求比如在FFmpeg解码音频的时候,不同的音源有不同的格式,采样率等,在解码后的数据中的这些参数也会不一致(最新FFmpeg 解码音频后,原创 2022-05-03 17:48:30 · 4458 阅读 · 0 评论 -
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 · 303 阅读 · 0 评论 -
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 · 903 阅读 · 0 评论 -
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 · 2093 阅读 · 0 评论 -
AAC ADTS格式分析
AAC⾳频格式原创 2022-05-01 17:54:42 · 534 阅读 · 0 评论 -
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 · 693 阅读 · 0 评论 -
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 · 522 阅读 · 0 评论 -
FFmpeg编程入门
播放器框架常用音视频术语容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器(有些码流音频他是纯PCM)。数据帧/数据包(Frame/Packet):通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。编解码器:编解原创 2022-05-01 16:02:58 · 2124 阅读 · 0 评论