音视频开发利用方向
1. 流媒体网络通讯开发
流媒体网络通讯开发岗位 占 70%~ 80%,待业,集中在芯片,安防,数字电视,广告,行车记录仪,车载零碎,智能家居,楼宇对讲,视频会议 …. 大部分从业者吃饭靠这个畛域。须要把握的是 unix 操作系统,网络 socket 通信, 音视频根底,264/265 根底,编解码,FFmpeg, 常见的网络通讯协定 TCP/UDP/RTMP/RTSP/RTP/HLS, 当然还有 WebRTC. 为什么大部分待业岗位都在这个畛域,因为这个畛域百花齐放,大量的硬件公司,各行各业,光一个跟摄像头相干的安防产业年产值就是几万亿,只有有摄像头的中央,就须要软件开发者,而且薪水还不错,入门者大部分年薪 30W+。年薪 50W,百万级的程序员也有,次要钻研音视频流媒体畛域的利用。
2. 数字图像处理
音视频图像处理岗位,占大概 20%+。次要集中在视频剪辑,特效,医疗,教育领域. 最近几年新兴的 VR/AR 畛域。须要把握的次要是音视频开发根底,FFmpeg, 重点是 OpenGL/ES,会大量应用 OpenGL/ES 去写一些轻量级的渲染引擎。你能够把它看作一个精简版的游戏渲染引擎。这个畛域有些非凡,容易跟互联网联合,一些软件容易造成垄断,比方视频剪辑畛域,就那么三四个玩家。垄断了 80% 以上的份额。Finalcut pro , premire, Davinci.. 造成垄断的行业,绝大多数利润会向头部集中,也就不须要那么多待业,细分畛域不多。
当然,这个畛域也有本人的一些劣势,比方比流媒体容易学习一些。将来十年前景也十分好。
3.AI
其实 AI 原本应该倒退很迅猛的,但受限于 MYZ,疫情,芯片重大缺货。终端,边缘计算畛域,这几年还没倒退起来。这个畛域须要局部音视频根底 opencv,tensorflow,机器学习,深度学习...
视频文件 / 封装格局
咱们播放的视频文件个别都是用一种 封装格局 封装起来的,封装格局的作用是什么呢?个别视频文件里不光有视频,还有音频,封装格局的作用就是把视频和音频打包起来。所以咱们先要 解封装格局 ,看有哪些视频流和哪些音频流,此时的音频流和视频流都还是 压缩数据 ,不能间接用于显示的,这就须要 解码。上面是播放一个视频文件时的流程图。
一、视频文件封装格局
封装格局(也叫容器),就是将曾经编码压缩好的视频轨和音频轨依照肯定的格局放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也能够。说得艰深点,视频轨相当于饭,而音频轨相当于菜,封装格局就是一个碗,或者一个锅,用来盛放饭菜的容器。上面是几种罕用的 视频文件后缀类型 与其绝对应的 封装格局。
视频文件格式 | 视频封装格局 |
---|---|
.avi | AVI(Audio Video Interleaved) |
.wmv、.asf | WMV(Windows Media Video) |
.mpg、.mpeg、.vob、.dat、.3gp、.mp4 | MPEG(Moving Picture Experts Group) |
.mkv | Matroska |
.rm、.rmvb | Real Video |
.mov | QuickTime File Format |
.flv | Flash Video |
二、音视频编码方式简介
1、视频编码方式
- 视频编码的作用: 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而升高视频的数据量。
名称 | 推出机构 | 推出工夫 | 目前应用畛域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 |
H.264 | MPEG/ITU-T | 2003 | 各个领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不遍及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
三、音频编码方式
音频编码的作用: 将音频采样数据(PCM 等)压缩成音频码流,从而升高音频的数据量。罕用的音频编码方式有以下几种:
名称 | 推出机构 | 推出工夫 | 目前应用畛域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域(新) |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMV | Microsoft Inc. | 1999 | 微软平台 |
AC-3 | Dolby Inc. | 1992 | 电影 |
1 MP3
MP3,英文全称 MPEG-1 or MPEG-2 Audio Layer III,是已经十分风行的一种数字音频编码和有损压缩格局,它被设计来大幅升高音频数据量。它是在 1991 年,由位于德国埃尔朗根的钻研组织 Fraunhofer-Gesellschaft 的一组工程师创造和标准化的。MP3 的遍及,曾对音乐产业造成极大的冲击与影响。
2 AAC
AAC,英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony 等公司共同开发,在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 规范呈现后,AAC 从新集成了其个性,退出了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。AAC 比 MP3 有更高的压缩比,同样大小的音频文件,AAC 的音质更高。
3 WMA
WMA,英文全称 Windows Media Audio,由微软公司开发的一种数字音频压缩格局,自身包含有损和无损压缩格局。
视频编码
视频是间断的图像序列,由间断的帧形成,一帧即为一幅图像。因为人眼的视觉暂留效应,当帧序列以肯定的速率 播放时,咱们看到的就是动作间断的视频。这么多间断的图像数据如果不通过编码的数据量太大了。比方一个 1920×1080 分辨率,24 位,每秒 30 帧的视频,一秒钟须要 1920*1080*24*30=1492992000 位数据,大概为:1.5Gbps(bps: 位 / 秒)。
左图是一个时长为 2 小时,通过编码封装后的的 mp4 文件;右图则是从 mp4 中抽取进去的一分钟的解码后的视频数 据。能够看到 2 小时的音频 + 视频文件大小为 516M,而独自的未压缩编码的 1 分钟的 yuv 图像数据为 1.73G。
因而咱们能够先简略的了解编码最次要的目标就是压缩数据。所谓视频编码就是指通过压缩技术,将原始视频格式 的文件转换成另一种视频格式文件。
原始视频压缩的目标是去除冗余信息。大量统计表明,同一副图像的邻近像素之间有着相关性,相邻图像之间内容 也存在类似,也就是说有大量的冗余信息。编码就是为了压缩,要实现压缩,就要设计各种算法,将视频数据中的 冗余信息去除,包含空间上的冗余和工夫上的冗余。
1. 如何编码?
编码的目标,就是为了压缩数据。各种视频编码方式,都是为了让视频变得体积更小,有利于存储和传输。编码的核心思想就是去除冗余信息。
空间冗余: 图像外部相邻像素之间存在较强的相关性多造成的冗余。
工夫冗余: 视频图像序列中的不同帧之间的相关性所造成的冗余。
视觉冗余: 是指人眼不能感知或不敏感的那局部图像信息。
信息熵冗余: 也称编码冗余,人们用于表白某一信息所须要的比特数总比实践上示意该信息所须要的起码比特数要大,它们之间的差距就是信息熵冗余,或称编码冗余。
常识冗余: 是指在有些图像中还蕴含与某些验证常识无关的信息。
2.IPB 帧
I 帧:帧内编码帧,帧示意关键帧,你能够了解为这一帧画面的残缺保留;解码时只须要本帧数据就能够实现(因为蕴含残缺画面)。
P 帧:前向预测编码帧。P 帧示意的是这一帧跟之前的一个关键帧(或 P 帧)的差异,解码时须要之前缓存的画面叠加上本帧定义的差异,生成最终画面。(也就是差异帧,P 帧没有残缺画面数据,只有与前一帧的画面差异的数据)。
B 帧:双向预测内插编码帧。B 帧是双向差异帧,也就是 B 帧记录的是本帧与前后帧的差异(具体比较复杂,有 4 种状况,但我这样说简略些),换言之,要解码 B 帧。不仅要获得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加获得最终的画面。B 帧压缩率高,然而解码时 CPU 会比拟累。
H.264 编码标准
H.264 与 H.265 是目前视频格式中用得最宽泛的编码方式,H.264 发明了多参考帧、多块类型、整数变换、帧内预测 等新的压缩技术,应用更精密的分像素静止矢量和新一代的环路滤波器,使得压缩性更高,零碎更加欠缺。H.265 则是 ITU- T 继 H.264 之后制订的新规范,旨在在无限的带宽下传输更高质量的网络视频。
划分宏块
H264 视频压缩算法当初无疑是所有视频压缩技术中应用最宽泛,最风行的。随着 x264/openh264 以 ffmpeg 等开源库的推出,大多数使用者无需再对 H264 的细节做过多的钻研,这大升高了人们应用 H264 的老本 H264 的基本原理其实非常简单,下咱们就简略的形容一下 H264 压缩数据的过程。通过摄像头采集到的视频被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。
一帧图片通过 H.264 编码器之后,就被编码为一个或多个片(slice), 每片蕴含整数个宏块(至多一个宏块,最多 蕴含整个图像宏块),而装载着这些片(slice)的载体,就是 NAL 单元。
3.H.264 码流剖析
H.264 码流文件分为两层。
1.VCL(Video Coding Layer,视频编码层):负责高效的视频内容示意,VCL 数据即编码解决的输入,它示意 被压缩编码后的视频数据序列。VCL 只关怀编码局部,重点在于编码算法以及在特定硬件平台的实现,VCL 输 出的是编码后纯视频流信息,没有任何冗余头信息。
2.NAL(Network Abstraction Layer,网络提取层):负责以网络所要求的失当的形式对数据进行打包和传 送,是传输层。不论在本地播放还是网络播放,都要通过这一层来传输。NAL 关怀的是 VCL 输入纯视频流如何 被表白和封包利于网络传输。
VCL 就是编码后的原始数据,在 VCL 数据封装到 NAL 单元中之后,才能够用于传输或存储。
音频
同视频编码一样,音频编码的目标也是压缩数据。常见的音频编码格局有:AAC、MP3、AC3 等
数字音频
模仿音频的记录就是通过唱片外表的起伏跌宕或者是磁带上的磁粉引起的磁场强度来示意音箱上振膜的即时地位,比如说,当唱片外表在某一时刻比前一时刻的纹路呈降落趋势时,音箱上的振膜就会向里膨胀;如果呈上升趋势,音箱上的振膜就会向外舒张。
模仿音频是间断信号,间断信号的特点是间断,比方唱片、磁带,磁带在播放时磁带的挪动是间断程度挪动的,唱 机的唱针在唱片上静止时是间断变动的。这意味着信号不会失真,然而保留这样的介质就会十分艰难,比如说唱片 会磨损,磁带也会老化。
不过能够应用数字来记录下这些信息。这些模仿信息一旦被数字保留就能够被永恒的保留不会磨损,也能够轻松的 被传输,这就是数字音频。
为了将模拟信号数字化,首先须要对模拟信号采样,所谓采样就是在时间轴上对信号进行数字化。依照奈奎斯特定 理(采样定理),按比声音最高频率高 2 倍以上的频率对声音进行采样。对于高质量的音频信号,频率范畴为(人 耳能听到得范畴):20Hz ~ 20kHz,所以以后声卡罕用的采样频率个别为 44.1KHz(1 秒采样 44100 次)。
每个采样通过量化记录数据。量化就是指在幅度轴上对信号进行数字化,比方 16bit 的二进制信号示意一个声音采 样。而后依照肯定的格局记录采样和量化后的数字数据。
通常所说的音频的裸数据就是脉冲编码调制(PCM)。形容一段 PCM 数据个别须要:量化格局(sampleFormat)、采样率(sampleRate)、声道数(channel)。以 CD 的音质为例,量化格局(也形容为位 深度)为:16bit,采样率为:44100,声道数为 2。对于声音数据码率计算为:
44100 16 2 = 1378.125kbps
如果是 1 分钟的这类 CD 音质的数据占用存储空间为:
<u>1378.125 * 60 / 8 / 1024 = 10.09MB</u>
10M 的大小如果仅仅存在磁盘中,可能还好,然而要在网络中实时传输,那么这个数据量就太大了。所以必须对其 进行压缩编码。对于声音数据而言,不被人耳感知到的信号,包含人耳听觉范围之外的以及掩蔽掉的信号就是冗余 信号。编码实际上就是把这些冗余信号压缩、去除掉。
音视频直播
直播架构次要分三块。第一块采集数据推流过程,包含对数据流编码,通过流媒体协定传输到服务器上。第二块是 服务端收到推流数据后,进行内容散发以及两头转存解决。最初一块是播放器进行拉流操作。这其中不只是播放音 视频,还能够做一些实时美颜和滤镜成果。由这三局部独特组成整个直播零碎的主播端和用户端之间在视频内容上 的交互。整个流程式直播应用推流零碎将采集的音视频进行编码,并最终发送到流媒体服务器上;用户端应用拉流 零碎将流媒体服务器上的视频资源进行播放。整个过程是一个发布者 / 订阅这的模式。
RTMP
RTMP 是 Real Time Messaging Protocol(实时音讯传输协定)的首字母缩写。该协定基于 TCP,是一个协定族,包含 RTMP 根本协定及 RTMPT、RTMPS、RTMPE 等多个变种协定。RTMP 是一种被设计用来进行实时数据通信的网 络协定,次要用在 Flash 平台和反对 RTMP 协定的流媒体 / 交互服务器之间进行音视频和数据通信。反对该协定的软 件包含 Adobe Media Server、Ultrant Media Server、Red5 等。RTMP 是目前支流的流媒体传输协定,广泛应用 于直播畛域,能够说市面上绝大多数的直播产品都采纳了这个协定。
推流
推流过程就是把编码后的数据打包并通过直播协定发送给流媒体服务器的过程:
RTMP 与 HTTP(超文本传输协定)同样是一个基于 TCP 的 Real Time Messaging Protocol(实时音讯传输协定)。由 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的一种凋谢协定。在国内被宽泛的应 用于直播畛域。HTTP 默认端口为 80,RTMP 则为 1935。咱们通过浏览 Adobe 的协定标准,通过与服务器建设 TCP 通信(Socket),依据协定格局生成与解析数据即可应用 RTMP 进行直播。当然咱们也能够借助一些实现了 RTMP 协定的开源库来实现这一过程。