FFMPEG
文章平均质量分 77
陌上烟雨遥407
专注于单片机,嵌入式linux驱动,嵌入式linux应用,嵌入式QT,音视频开发。
展开
-
FFMPEG之H.264视频解码
一 概括FFMPEG 的libavcodec完成音视频编码或解码,H.264解码主要由H264.c实现,H.264.c 往下调用X264 实现编解码功能,H.264解码过程包含初始化/解码/关闭三个部分。解码原理为: 将NAL 数据位流输入到H.264解码器中,熵解码模块解码后输出量化系数X;系数经过反量化和反变化得到残差数据R;解码器使用从码流中解析的头信息生成预测块Pred,然后把Pred与残差R求和得到数据块DF;每个块df通过去除块效应滤波得到解码图像的重建块F。...原创 2021-07-25 12:02:04 · 3220 阅读 · 0 评论 -
Android Audio系统
1 简述Audio 是Android 一个重要组成部分, 它主要包括三个方面:1 Audio Recorder和Audio Track:.原创 2021-06-20 16:45:33 · 669 阅读 · 2 评论 -
ffmpeg 之 dash
1 简介 在dash 协议出现以前, 各家公司都开发自己的私有流媒体协议,如微软的SS, 苹果的HLS,Adobe 公司的HDS, 3GPP组织的AHS。这给客户端开发者带来了很大的困扰,后由MPEG 组织牵头,参考前几家公司的流媒体协议,共同制定DASH 协议,也称MPEG-DASH,协议标准号为:ISO/IEC23009, 标准共计八部分,其中媒体呈现(MPD)是最重要的一部分,占据正文的70% 以上。关于DASH 协议的演进历史如下图所示。 dash 协议一经推出,就被很多公司接入,...原创 2021-03-14 14:44:43 · 3098 阅读 · 1 评论 -
ffmpeg 之 http 分析 二
1 前言 本文我们学习关于HTTP 是如何在FFMPEG 中实现的,关于HTTP 协议部分请参考《ffmpeg 之 http 分析 一》, 只有熟悉了http 协议部分,我们在阅读http 源码时才能有的放矢,不至于迷失方向。 和其他demuxer 一样, 我们从分析其给外界开出的API 入手。const URLProtocol ff_http_protocol = { .name = "http", .url_open2 = h.原创 2021-02-28 15:24:20 · 1550 阅读 · 0 评论 -
ffmpeg 之 http 分析 一
一 协议简介 http(超文本传输协议)它是一个简单的请求响应协议,工作在tcp 之上,请求响应信息是ASCII 编码,消息内容是则具有一个类似MIME的格式。两台计算机之间使用HTTP通信,必定一个是客户端,一个是服务端。用于HTTP协议交互的信息统称为报文,请求端的HTTP报文叫做请求报文, 响应端的报文叫做响应报文。二 请求报文请求报文格式为:请求行 + 请求头部 + 空行+ 报文主体。第一部分:请求行, 方法 + 路径 + 版本号第二部分:请求头部,紧接着请求行,用来说明服...原创 2021-02-27 17:24:37 · 1859 阅读 · 0 评论 -
ffmpeg 之 RTSP 二
一 前言 在《ffmpeg 之 RTSP 一》主要讲解关于RTSP 协议部分, 本文主要讲解关于RTSP 在 ffmpeg 中是如何实现的, 相关代码见libavformat/rtspdec.c , libavformat/rtsp.c.还是从如下几个函数入手:AVInputFormat ff_rtsp_demuxer = { .name = "rtsp", .long_name = NULL_IF_CONFIG_SMALL("RTSP inpu.原创 2021-02-06 15:13:28 · 925 阅读 · 1 评论 -
ffmpeg 之 RTSP 一
一 前沿 打算花两篇文章来写RTSP ,第一篇介绍RTSP 协议,第二篇介绍RTSP 是如何在FFMPEG 中实现的。RTSP 是早期的流媒体协议,协议由RealNetworks,NetScape和哥伦比亚大学合作开发,并由IETF标准化(RFC2326),现在常用于安防摄像头监控。我们在播放rtsp 连接,并开启wireshark 抓取其网络包是发现,其中不但有rtsp 包,还有大量的rtp, rtcp 包。 这是 怎么回事?ffplay.exe -i rtsp://wowzaec2dem.原创 2021-01-31 16:28:46 · 12147 阅读 · 1 评论 -
FFMPEG 之 RTMP 二
一 简介上接《FFMPEG 之 RTMP 一》,讲解关于RTMP 协议相关的知识。本文讲解在FFMPEG 中是如何对RTMP 协议进行封装的,相关代码位于rtmproto.c 中,在rtmproto.c 中,它封装了RTMP 协议,相比与librtmp.c 要复杂很多, 前者是对TCP 协议的封装, 后者乃是直接对librtmp.so 的封装。如下函数乃是开给使用者的API, 我们将以此为切入点,对rtmproto.c 进行分析。const URLProtocol ff_##flavo...原创 2021-01-24 16:47:46 · 1214 阅读 · 0 评论 -
ffmpeg 之 RTMP 一
1 RTMP 介绍RTMP(Real Time MessagingControl) 是Adobe 公司flash 播放器和服务器之间的音视,视频以及数据传输的流媒体协议。该协议是个协议族,包括多种协议,包括最基本的RTMP 以及RTMPE,RTMPT,RTMPS 等多种变种。RTMP:工作在TCP 上, 使用端口号为1935;RTMPE:在RTMP 上增加了加密功能。RTMPT:: 工作在HTTP 上...原创 2021-01-24 16:00:57 · 3262 阅读 · 1 评论 -
ffmpeg 之 hls
前言 与其他博客不同,本文不是讲解HLS 协议本身,而是讲解在FFMPEG 中是如何解析HLS的,当然FFMPEG 也是按照HLS 协议去封装/解析 HLS 流的,因此读完本文不但能了解HLS 协议本身,还能看到HLS 是如何落地的。1 综述HLS(Http Live Streaming )是有苹果公司基于HTTP 传输的协议,目的解决防火墙屏蔽问题,如RTMP 不是走HTTP,容易被防火墙阻难。我们首先来看一个简单的m3u8 文件:#EXTM3U //固定格式,首行开头必须是#E..原创 2021-01-17 16:09:29 · 4729 阅读 · 1 评论 -
FFMPEG 之 msrledec.c
1 RLE 简介RLE(Run Length Encoding) 行程长度编码,属于熵编码,是最简单的图像压缩方法之一,比如视频msrle,tscc 以及bmp 格式 都是用的RLE 编码。 在FFMPEG 中msrledec.c 就是描述rle 格式的解码过程。RLE编码的原理比较简单,即在被压缩文件中寻找连续重复的数值,以重复次数和重复数值自身两个值取代文件中的连续值,重复次数称为行程长度。例如,若有一串字符信息aaaaabbbbcccddeefffaa,经RLE编码处理可表示为5a4b3c2.原创 2021-01-03 15:30:58 · 372 阅读 · 0 评论 -
FFMPEG 之 Avidec.c
1 简介 AVI格式(Audio Video Interleave)是一种将语音和影像同步组合在一起的多媒体文件格式。1.1 如何识别为AVI 文件?AVI 文件是一种RIFF 文件格式,其组成为 RIFF(4字节) + RIFF文件大小(4字节) + AVI(文件类型,4字节),如下图所示,前4个字节就是ASICC缩写, byte4 ~ byte 7表示长度0x0162E574(实际数据大小,前8个字节不算), byte8 ~ byte 11 就是AVI的ASICC 。因此判断一个文件是...原创 2021-01-01 15:58:34 · 693 阅读 · 0 评论 -
缓冲IO --- AVIOContext
1 AVIOContextURLContext它是一个不带缓冲的IO 结构体,读取实际是调用底层的IO 接口, 只仅仅统一不同文件IO API 而已。 AVIOContext 是一个在URLContext 基础上,带缓冲的结构体, 这样做的好处是加快IO 效率, 减少IO 次数。假设网络数据,只仅仅读取一个字节,也要发起一次网络请求的话难免会降低效率。 假设先预先申请一块buff ,当请求的数据,小于buff 缓存的数据,那么直接在buff 中memcpy 就好了, 这样会极大的提高处理性能。下面我们将原创 2020-12-20 16:47:45 · 549 阅读 · 0 评论 -
FFMPEG 框架分析
1 播放器包含的模块按照DirectShow 对播放器模块的划分,一个完整的播放器应该需要包含以下五个模块:Source Filter : 数据源,可以是本地文件fopen, 也可以是网络文件,http,rtp,rtmp 等等Demux Fliter: 解复用,下载的数据是带容器封装的,需要Demux Filter 解析头部信息,分离音频,视频流,然后送到对应的解码器。Decoder Fliter :对音频,视频流进行解码输出。Color Space Converter Filter :一般显示器原创 2020-12-19 10:55:40 · 678 阅读 · 4 评论 -
ffmpeg源码分析
1 简述ffmpeg.exe 是一个非常快速的音频视频转换工具, 我们可以通过它进行格式,编码转换,还可以加滤镜。它可以读取普通文件,网络文件,甚至抓取设备数据。ffmpeg 转码的过程如下图所示:ffmpeg 涉及的c 文件有三个:ffmpeg.c , ffmpeg_opt.c,cmdutils.c ,有关ffmpeg.exe 框架,引用雷神画的流程图:从上图我们可以看到,main() 函数中调用的函数有:1)av_register_all()2)show_banner() .原创 2020-11-28 17:04:48 · 3364 阅读 · 0 评论 -
ffplay源码分析(2)
ffplay源码分析(1)1音视频同步基础因为音视频解码,输出都是在不同线程中完成的,且有些片源音视频本身的pts 就存在飘动, 因此需要引入音视频同步机制。用一句话来总结音视频同步就是"慢了等,快了丢"。在ffplay 中, 需要时刻将音频,视频时间与系统时间对齐(set_clock)。通过引入pts_drift 变量,记录系统时间与音频,视频时间的差值。 当set_clock() 时,pts_drift = pts - os time。当get_clock() 时,得到的pts = os原创 2020-11-22 11:33:55 · 296 阅读 · 0 评论 -
ffplay源码分析(1)
1 ffplay 简介FFplay是使用FFmpeg库和SDL库的非常精简且可移植的开源媒体播放器。整个播放器源码才三千多行, 且性能稳定功能齐全,被广大开发者学习引用。比如向ijkplayer(哔哩哔哩)就是基于ffplay 做二次开发的。我们可以顺着如下六个函数,去阅读ffplay 源码:1)read_thread() : 读取读取音频,视频,字幕packet 并将将其放入对应的packet_queue 中去。2)audio_thread(): 音频解码,取音频packet_queue 内容原创 2020-11-15 15:47:36 · 1673 阅读 · 0 评论 -
FFMPEG 之 AVSwscale
1 AVSwscaleavswscale 它是颜色转换,裁剪库。函数名 作用 unsigned swscale_version (void) const char * swscale_configuration (void) 返回libswscale生成时配置。 const char * swscale_license (void) 返回libswscale许可证 const int * sws_getCoefficients (int colorspa.原创 2020-11-01 15:55:52 · 767 阅读 · 0 评论 -
FFMPEG 之 AVSwresample
1 AVSwresample音频重采样,样本格式转换和混合库。函数名 作用 const AVClass * swr_get_class (void) Get the AVClass for SwrContext. struct SwrContext * swr_alloc (void) Allocate SwrContext. int swr_init (struct SwrContext *s) 设置用户参数后初始化上下文。 int swr_is_init.原创 2020-11-01 15:20:35 · 1095 阅读 · 0 评论 -
FFMPEG 之 AVDevice
1 AVDevice函数名 作用 unsigned avdevice_version (void) 返回libavdevice_version_int常量 const char * avdevice_configuration (void) 返回libavdevice生成时配置。 const char * avdevice_license (void) 返回libavdevice许可证 void avdevice_register_all (void) 初始原创 2020-11-01 14:50:58 · 2610 阅读 · 0 评论 -
FFMPEG 之 AVFilter
函数名 作用 unsigned avfilter_version (void) 返回libavfilter_version_int常量 const char * avfilter_configuration (void) 返回libavfilter构建时配置 const char * avfilter_license (void) 返回libavfilter许可证。 int avfilter_pad_count (const AVFilterPad *pads)原创 2020-11-01 11:05:23 · 2080 阅读 · 0 评论 -
FFMPEG 之 AVUtility 2
AVUtility 库提供了很多通用的函数, 这篇介绍AVUtility 库中AVFrame, AVOption, AVDictionary 三个部分.1 AVFrame函数名 作用 const char * av_get_colorspace_name (enum AVColorSpace val) 获取颜色空间的名称 AVFrame * av_frame_alloc (void) 分配一个avframe,并将其字段设置为默认值 void av_frame_free原创 2020-10-31 15:34:40 · 550 阅读 · 0 评论 -
FFMPEG 之 AVUtility 1
## 1 avutil简述avutil它是所有ffmpeg库之间共享通用代码。libavutil 设计为模块化。在大多数情况下,为了使用 libavutil 的一个组件提供的函数,必须显式包括包含该功能的特定标头。如果您只使用与媒体相关的组件,则只需包括 libavutil/avutil.h,它带来了大多数"核心"组件。它包含如下几个部分:1加密和哈希,2时间戳,时间基数的数学公式,3字符串操作,4内存管理,5数据结构,6视频相关,7音频相关,8 error code,9 log,10 其他。原创 2020-10-31 11:29:03 · 820 阅读 · 0 评论 -
FFMPEG 之 AVCodec
## 1概述libavcodec提供了通用的编解码框架,并包含多个视频,音频,字幕编码器,解码器,和几个比特流筛选器。## 2 Decoding 函数原型 作用 Avcodec *avcodec_find_decoder(enum AVCodecID Id) 在已注册的解码器中,查找匹配的解码器 AVCodec *avcodec_find_decoder_by_name(char*name) .原创 2020-10-31 09:43:40 · 2261 阅读 · 0 评论 -
FFMPEG 之 AVFormat
1 描述它是一个I/O 和muxing/demuxing库,处理各种媒体容器格式库,主要包括两大功能:demuxing ,如将一个媒体文件拆分成音视频流, muxing,如将音视频数据写入一个媒体文件中。同时它还具有I/O module 可支持各种协议,如文件,tcp,http等等。muing 由AVInputFormat 结构体去描述,相反地,demuxing 由AVOutputFormat 去描述。 AVFormatContext 它是整个AVFormat 的上下文, 所有有关d...原创 2020-10-25 09:53:07 · 2059 阅读 · 0 评论 -
FFMPEG Overview
1简述ffmpeg,它是一个完整的跨平台方案,用于录制,转换和流式传输音频和视频。使用也特别容易:ffmpeg -i input.mp4 output.avi。2关于FFMPEGffmpeg它是一款非常优秀的多媒体处理框架,能够编码,解码,转码,复用,解复用,网络流媒体下载,滤镜,播放等功能。它包含六个模块:1libavcodec,音视频解码/编码库.2libavutil,简化编程,提供一些通用函数。3 libavformat,复用/解复用库4 libavfilter,多媒体滤镜库5原创 2020-10-24 10:11:26 · 243 阅读 · 0 评论