音视频集
分享ffmpeg,webrtc音视频开发知识技能。
星火撩猿
莫道君行早,更有早行人;全心敲代码,天道自酬勤。
展开
-
H264码流结构
H264码流分层NAL层Network Abstraction Layer,视频数据网络抽象层。VCL层Video Coding Layer,视频数据编码层。VCL结构关系码流基本概念SODB(String Of Data Bits)原始数据比特流,长度不一定是8的倍数,故需要补齐。它是由VCL层产生的。RBSP(Raw Byte Sequence Payload)SODB + trailing bits 算法是如果SODB最后一个字节不对齐,则补1和多个0.NALU原创 2021-05-15 18:25:54 · 203 阅读 · 0 评论 -
H264无损压缩及编解码处理流程
两种方法H.264:CABAC压缩MPEG2:VLC压缩(可变长的编码)详细介绍先进行有损压缩,再进行无损压缩,数据量及码流更小经过有损压缩的数据分散在二维图表中各个节点中,数据比较分散,压缩困难DCT变换后将所有数据集中到一块,数据由分散变得集中,便于压缩...原创 2021-05-15 18:05:27 · 488 阅读 · 0 评论 -
帧间压缩技术
帧间压缩原理GOP(在同一个GOP之内不同帧之间进行压缩)参考帧(后面的帧参考前面的帧)运动估计(通过宏块匹配找到运动矢量)运动补偿(解码时补上残差值)宏块查找算法三步搜索二维对数搜索四步搜索钻石搜索帧间压缩的帧类型P帧B帧补充知识点P帧解码优先于B帧帧分组GOP:一组强相关的帧根据运动矢量和每一帧的残差值进行恢复视频花屏原因:如果GOP分组中有帧丢失(主要是P帧和B帧),会造成解码端的图像发生错误,这会出现马赛克(花屏)视频卡顿原因:为了避免花屏问题的发生原创 2021-05-09 18:33:42 · 849 阅读 · 1 评论 -
帧内压缩技术
帧内压缩的理论相邻像素差别不大,所以可以进行宏块预测人们对亮度的敏感度超过色度YUV很容易将亮度与色度分开(Y数据表示亮度,UV数据表示色度)帧内预测H264中存在9种帧内预测模式,算法选用最接近原来4*4宏块的模式,如下:不同模式的预测结果补充知识点亮度块和色度块是分开预测的帧内预测残差值计算,预测模式信息和残差值一起压缩,恢复时先预测再加残差值帧内压缩的帧类型I帧(帧内预测是针对I帧的压缩)IDR帧...原创 2021-05-09 17:11:44 · 704 阅读 · 0 评论 -
H264中的宏块
H264H264压缩技术是一系列技术的组合帧内压缩,解决的是空域数据冗余问题帧间压缩,解决的是时域数据冗余问题整数离散余弦变化(DCT),将空间上的相关性变为频域上无关的数据然后进行量化CABAC压缩(根据上下文进行数据压缩)帧内压缩和帧间压缩属于有损压缩,DCT和CABAC属于无损压缩宏块宏块是视频压缩操作的基本单元无论是帧内压缩还是帧间压缩,它们都以宏块为单位宏块划分的越小,控制力越强...原创 2021-05-04 14:59:56 · 244 阅读 · 0 评论 -
H264中I帧P帧和B帧
编码帧的分类I帧(intraframe frame),关键帧,采用帧内压缩技术。IDR帧属于I帧。P帧(forward Predicted frame),向前参考帧。压缩时,只参考前面已经处理的帧,采用帧间压缩技术。它占I帧的一半大小。B帧(Bidirectionally predicated frame),双向参考帧。压缩时,既参考前面已经处理的帧,也参考后面的帧,帧间压缩技术。它占I帧1/4大小。详细解释I帧自己编码解码还原,与其他帧没有依赖关系P帧只有前面的解码后,才能进行解码。一组原创 2021-04-18 17:20:23 · 1301 阅读 · 0 评论 -
H264压缩码率与GOP
H264压缩比假设:有个1秒钟的视频:格式为YUV420;分辨率为640x480;帧率为15计算码流:640x480x1.5x15x8 = 55mbps建议码流:500kbps(480p)H264压缩后:约1/100,即有100M的数据大小,只占1M的空间常见场景电影院:帧率60~120实时通讯:帧率>=15在线录课:帧率>=30码流参考值非严谨科学计算,建议码流一般为经验值查看文档GOPGOP中帧与帧之间的差别小,强相关,不同GOP中帧与帧之间的差距大,弱原创 2021-04-18 16:46:20 · 3128 阅读 · 0 评论 -
什么是音频重采样
是什么是重采样将音频三元组(采样率,采样大小和通道数)的值转成另外一组值三元组其中任意一个值发生改变就称为重采样, 例如44100/16/2 转成 48000/16/2为什么要重采样从设备采集的音频数据与编码器要求的数据不一致扬声器要求的音频数据与要播放的音频数据不一致更方便运算(回音消除须使用单声道,需要先转换)如何知道是否需要进行重采样要了解音频设备的参数(在设备管理中查看相应要求)查看ffmpeg源码(包括各平台几乎所有编解码器实现)重采样的步骤创建重采样上下文设原创 2021-04-18 15:34:00 · 1697 阅读 · 0 评论 -
Cygwin环境中unknown encoder‘libfdk_aac’解决办法
背景:在Cygwin环境中,使用ffmpeg生成AAC数据时报错。分析:libfdk_aac未安装,编译ffmpeg时未设置enable-fdk-aac参数,包含libfdk_aac解决:apt-cyg install libfdk-aac./configure --prefix=/usr/local/ffmpeg --enable-fdk-aac...原创 2021-04-18 15:11:26 · 526 阅读 · 0 评论 -
通过ffmpeg生成AAC数据
通过ffmpeg命令生成AAC文件命令:ffmpeg -i xxx.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 fff.aac详解:xxx.mp4必须包含音频,需从音频中获取aac并重新编码-vn:即video no简写,表示过滤视频-c:a:即codec:audio简写,指定音频编解码器为libfdk_aac-ar:代表音频采样率-channels:代表通道数,2表示双声道(左声道和右声原创 2021-04-18 13:46:31 · 505 阅读 · 1 评论 -
msys2+vs编译ffmpeg
vs编译ffmpeg安装VS官网下载设置VS环境变量通过开始找到并打开visual studio控制台cd VC/bin => dir => cd amd_x86 => dir找到并执行vcvarsamd64_x86.bat脚本设置MSYS2环境变量进入msys64_2目录打开并修改msys2_shell脚本,放开标识注释执行msys2_shell脚本,msys2_shell.cmd -mingw64 -use-full-path编译ffmpeg./原创 2021-04-17 18:40:27 · 1435 阅读 · 1 评论 -
msys2+mingw编译ffmpeg
MinGW安装ffmpeg下载ffmpeg源码源码下载编译安装ffmpeg./configure --prefix=/usr/local/ffmpeg (生成makefile文件)make -j 4 (多进程并行编译节省编译时间)make install (安装到指定目录)原创 2021-04-17 18:08:31 · 159 阅读 · 0 评论 -
Cygwin编译安装ffmpeg常见问题
总结如下:1.vi使用问题,进入编辑模式后,按下键盘方向键出现ABCD等字符,无法正常使用。分析:猜测应该是vim安装有问题或默认安装版本有问题,先卸载vim再重新安装解决: apt-cyg remove vim;apt-cyg install vim2.ffmpeg目录下make -j 4编译报错,截图如下:分析: strsafe.h中缺乏WEOF定义,而WEOF在头文件wchar.h中解决:在strsafe.h添加#include <wchar.h>...原创 2021-04-17 14:27:02 · 751 阅读 · 0 评论 -
Cygwin下编译安装ffmpeg
下载ffmpeg源码源码下载编译安装ffmpeg./configure --prefix=/usr/local/ffmpeg (生成makefile文件)make -j 4 (4核一起跑编译加快编译速度)make install (安装到指定目录)原创 2021-04-11 13:53:22 · 333 阅读 · 0 评论 -
msys2环境搭建
具体步骤下载MSYS2:MSYS2安装MSYS2安装 pacman -S make gcc diffutils pkg-config nasm卸载 pacman -R make gcc diffutils pkg-config nasm双击打开(包含常用工具链)pacman -Ss gcc 搜索gcc;pacman -S make gcc diffutils pkg-config nasm安装需要工具;...原创 2021-04-07 22:52:46 · 355 阅读 · 0 评论 -
Cygwin环境的搭建
什么是CygwinCygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。Cygwin 提供一个UNIX 模拟 DLL原创 2021-04-05 11:45:15 · 293 阅读 · 2 评论 -
Mac或Linux下编译安装ffmpeg
Mac下安装ffmpeg的方式brew方式(优点:省去源码下载编译;弊端:安装后无法改变;具体操作:brew search ffmpeg =》brew install ffmpeg)源码方式(下载源码编译安装,可定制化,支持相应工具功能去除或添加)Mac/Linux编译ffmpeg下载ffmpeg(下载)git clone git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 或编译ffmpeg./configure --pre原创 2021-04-03 23:17:08 · 225 阅读 · 0 评论 -
Windows编译ffmpeg方式
三种方法CygwinMinGWVS它们的作用与运行原理Cygwin(Cygnus Windows)MinGW(Minimalist GNU for Windows)VS(Visual Studio 2015/2017…)MSYS2(Minimal SYStem 2)如何编译ffmpegCygwin直接安装使用MinGW + MSYS2VS + MSYS2...原创 2021-04-03 22:16:04 · 132 阅读 · 0 评论 -
YUV的存储格式
YUV4:2:0存储格式分层存储,按Y->U->V顺序,是最常见的存储格式。如下图,按颜色对应。YUV存储格式planar(平面)I420:YYYYYYYY UU VV => YUV420pYV12:YYYYYYYY VV UU => YUV420ppacked(打包)NV12:YYYYYYYY UVUV => YUV420spNV21:YYYYYYYY VUVU => YUV420sp注意:ios系统一般使用YV12格式;android系原创 2021-04-03 21:00:34 · 2757 阅读 · 7 评论 -
YUV常见格式
YUV常见格式YUV4:4:4(等同于RGB8:8:8,图像大小为长x宽x3)YUV4:2:2(图像大小为长x宽x2)YUV4:2:0(所有播放器均支持)YUV4:2:04:2:0并不意味着只有Y,cb两个分量,而没有Cr分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0…以此类推。各种格式对比数据量的计算(以4:2:0为准)YUV = Y *原创 2021-04-03 16:57:04 · 246 阅读 · 0 评论 -
什么是YUV
简介YUV(也成YCbCr):Y表示明亮度(灰阶),UV的作用是描述影像色彩及饱和度。由电视系统发展而来,有Y信号即可播放黑白影像,彩色影像需要有UV信号。主要的采样格式有YUV4:2:0,YUV4:2:2,YUV4:4:4。所有播放器均支持YUV4:2:0,其他YUV格式部分播放器不支持,需先转换成为YUV4:2:0格式。YUV中提取Y分量,黑白色;YUV中提取U分量,cb,blue蓝色;YUV中提取V分量,cr,red红色。RGB与YUA的关系RGB用于屏幕图像的展示YUA用于采集与编原创 2021-04-03 16:26:04 · 629 阅读 · 0 评论 -
ADTS结构
ADTS一般由7或9个字节组成如下图所示,A~Q每个字符分别代表1个bit位。每个音频帧都会带有音频头,按位可以节省很多内存。Audio Object Types(音频对象类型)序号从1开始,真正编码中需要减1作为真实的type,解析时需要加1;常见如下:1:AAC Main2:AAC LC5:SBR29:PSSampling Frequency Index(采样率编号)根据ADTS头,对应域添加对应数值即可0:96000 HZ 1:88200HZ 2:原创 2021-04-03 15:24:00 · 576 阅读 · 0 评论 -
AAC编解码器介绍
AAC介绍AAC是最成熟,也是应用最广泛的编解码器,opus主要用于实时通信领域。AAC(Advanced Audio Coding)由Fraunhofer IIS,杜比实验室,AT&T,Sony等公司共同开发,目的是取代MP3格式。AAC相对MP3格式,压缩率更高(压缩后文件更小),保真性更好(还原后相似度更高)。最开始是基于MPEG-2的音频编码技术,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术。目前常用的规格有AAC LC,AAC HE V1,AAC H原创 2021-03-30 23:01:29 · 1946 阅读 · 0 评论 -
常见编解码器的比较
常见的编解码器常见的音频编解码器包括OPUS,AAC,Ogg,Speex,iLBC,AMR,G.711等。Ogg(收费),Speex支持回音消除。AAC在直播系统中应用的比较广泛(ffmpeg中用到);OPUS是较新的音频编解码器(延迟小压缩高),WebRTC默认使用OPUS;固话一般用的G.711系列。网上评测结果:OPUS > AAC > Ogg音频编码质量比较...原创 2021-03-28 22:03:01 · 979 阅读 · 0 评论 -
音频无损压缩技术
熵编码(无损编码)哈夫曼编码(频率高的编码短,频率低的编码长)算术编码(由香农编码改进而来)香农编码无损压缩:压缩之后可完全还原原创 2021-03-28 21:32:21 · 390 阅读 · 0 评论 -
音频有损压缩技术
前言音频压缩技术的目标在两个点:一是将数据量压缩的越小越好;二是压缩数据的速度越快越好。两个点之间需要找到平衡=》压缩的量足够小不影响在网络中传输且又压缩的足够快(源于网络带宽和实时通信的要求)。音频压缩技术消除冗余信息:将采集到的冗余信息剔除掉,无法还原称为有损压缩。无损压缩:类似zip,rar,gz,7z等压缩技术,解码可还原和原来一样的信息,称为无损压缩。音频压缩同时使用消除冗余信息方式的有损压缩和无损压缩技术。音频冗余信息音频压缩技术是在保证信号在听觉方面不产生失真的前提下,原创 2021-03-28 21:18:01 · 945 阅读 · 3 评论 -
音频之PCM与WAV
音频原始数据音频原始数据格式PCM:纯音频数据,没有格式WAV:既可以存储原始数据(PCM),也可以存储压缩数据差异:WAV在PCM之上加了一个文件头(包含基础数据)量化基本概念位深(采样大小):一个采样用多少bit存放。常用的是16bit。位深越高,描述峰值越大,描述声音强度更清楚。采样率:采样频率8k,16k,32k,44.1k,48k。采样率越高,数字信号还原度越高,避免失真。声道数:单声道,双声道,多声道。(跟声源个数成正比)码率计算要算一个PCM音频流的码率是一件很轻原创 2021-03-28 18:07:24 · 3165 阅读 · 8 评论 -
音频之模数转换
前言自然界的声音属于模拟信号,计算机中音频的存储与处理必须以数字化的形式存在,这里需要一个转换。模拟信号对音频进行采样注意:一般每秒钟采样48000次,最低每秒采样8000次(32000,16000等)。采样频率越高,越接近模式信号,还原度越高。形成方波图:模拟信号转数字信号步骤如下:原模拟信号=》对声音进行量化=》量化后的数字信息=》十进制转二进制=》二进制方波图...原创 2021-03-28 17:31:15 · 2574 阅读 · 0 评论 -
图像的显示
常见场景列举图像大小等于显示区域大小图像小于显示区域(拉伸/留白)图像大于显示区域(缩小/截断)常用渲染视频库android:grafika,ijkplayer原创 2021-03-21 18:26:30 · 121 阅读 · 0 评论 -
码率的计算
分辨率X轴的像素个数 x Y轴的像素个数(即宽和高)常见的宽高比16:9/4:3(视频宽高比不一致需先转换)360P/720P/1K/2K(清晰度,标清高清等)帧率每秒钟采集/播放图像的个数(一张图像一帧)动画的帧率是25帧/s常见的帧率:15帧/s,30帧/s,60帧/s(跟带宽密切相关)总结视频平滑度越高,要求帧率越高视频清晰度越高,要求分辨率越高未编码视频的RGB码流RGB码流 = 分辨率(宽 x 高)x 3(Byte) x 帧率(25帧)例如:1280x720原创 2021-03-21 18:10:57 · 1289 阅读 · 1 评论 -
屏幕显示器
简介屏幕上有N多个像素点,每个像素点均由三个发光二极管组成。图像也有像素点的概念,和屏幕上的像素点一一对应,通过三原色组合及透明度控制来显示丰富的图像。图像与屏幕的关系图像是数据屏幕是显示设备图像数据经过驱动程序让屏幕显示图像RGB的色彩问题RGB与BGR(像素点表示数据位置不一样)BMP使用的是BGR格式,需要进行转换屏幕指标PPI(pixels per inch)每英寸的像素数,PPI越大,图像显示更平滑细腻,可判断屏幕好坏。DPI(Dots per inch)每英寸原创 2021-03-21 17:40:45 · 204 阅读 · 4 评论 -
图像的基本概念
视频由一组图像组成为了传输/占用更小的空间而被压缩最终在显示设备上展示(未被压缩)图像由像素组成像素由RGB组成分辨率由横竖总共的像素点个数决定七彩色红+蓝=粉绿+蓝=青红+绿=黄红+绿+蓝=白每个像素的位深含义:用多少个位表示一个像素RGB888(24位)RGBA(32位)总结显示器上像素点一般就是三个发光二极管组成。像素由RGB组成,一个图像有很多个像素组成,很多个像素形成分辨率,即图像的宽高。...原创 2021-03-21 17:15:40 · 1008 阅读 · 0 评论 -
声音是如何被听到的
声音声音是由物体振动产生的它可以通过空气,固体,液体等进行传输振动耳膜人类的听觉范围听觉/发声范围原创 2021-03-14 23:28:01 · 124 阅读 · 0 评论 -
WebRtc简介
WebRtc是什么WebRtc(Web Real-Time Communication)是由google开源的,跨平台的,主要用于浏览器之间的,实时数据传输的音视频引擎。音视频处理+即时通讯的开源库,一个非常优秀的跨平台的多媒体框架。应用领域:音视频在线会议,在线教育,照相机,音乐播放器,共享远程桌面录制,即时通讯工具, P2P网络加速,文件传输工具,游戏, 实时人脸识别等。实时数据传输质量评估100ms内延迟 通话质量非常好200ms内延迟 通话质量比较好500ms内延迟 通话质原创 2021-03-13 12:49:53 · 742 阅读 · 2 评论 -
音视频基础
音视频应用领域互动直播系统(在线教育,音视频会议)娱乐直播系统(抖音快手斗鱼直播)音视频特效(美颜,配音,变声)音视频编辑(剪切重新编辑,便于传播)搭建直播系统常用工具ffmpegffplay(播放器,底层依赖于ffmpeg)vlc(播放器,底层依赖于ffmpeg)架构模型...原创 2021-03-06 17:54:29 · 126 阅读 · 2 评论