我是靠谱客的博主 迷路马里奥,最近开发中收集的这篇文章主要介绍视音频技术基础概念,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

视音频技术主要包含:封装技术,视频压缩编码技术,音频压缩编码技术,如果考虑到网络传输还包括流媒体协议技术。

视频播放器原理

以播放网络视频为例,需要经过解协议 —解封装—解码视音频—视音频同步(如果播放本地文件则不需要解协议)

这里写图片描述


视频编码

视频压缩编码标准:

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。比如MPEG,H.264。

主要视频编码一览(图片有些过时)

主要视频编码一览

MPEG:

采用帧间压缩,仅存储连续帧之间有差别的地方。从而从而达到较大压缩比。

H.264/AVC:

采用事先预测和与MPEG中的P-B帧一样的帧预测方法压缩。它可以根据需要产生适合网络情况传输的视频流,还有更高的压缩比,有更好的图像质量;

两者区别:

1.如果从单个画面清晰度比较,MPEG4有优势;从动作连贯性上的清晰度,H.264有优势。
2.H264算法更加复杂,运行它需要更多的处理器和内存资源,因此对系统要求较高。
3.H264更加灵活,它把一些实现留给了厂商自己去实现。但不同产品之间沟通便成了很大问题(例如通过A公司的编码器,也必须通过A公司的解码器解码)。

H265/HEVC:

基于H.264基础上,对相关技术加以改进,以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。H.265是一种更为高效的编码标准,能够在同等画质效果下将内容的体积压缩得更小,传输时更快更省带宽。

I帧:

关键帧 保留一副完整的画面,解码时只需要本帧数据就可以完成(因为包含完整画面)

P帧:

差别帧 保留这一帧跟之前帧的差别,解码时需要用之前缓存的画面叠加本帧定义的差别,生成最终画面。(P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧:

双向差别帧 保留的是本帧与前后帧的差别,解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面与本帧数据的叠加取得最终的画面。B帧压缩率高,但解码时CPU会比较累。

帧内压缩:

intraframe,当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,帧内一般采用有损压缩算法。

帧间压缩:

interframe,时间压缩(Temporal compression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的。

muxing(合成):

将视频流、音频流甚至是字幕流封装到一个文件中(容器格式(FLV,TS))。作为一个信号传输。

码率控制:

多码率:根据当前网络环境自定义码率:


音频编码技术

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。

主要音频编码技术


视频封装格式:

TS:一种流媒体封装格式,流媒体封装的好处是不需要加载索引再播放,大大减少了首次载入的延迟,如果片子较长,MP4文件的索引相当大,影响用户体验。

主要封装格式一览
主要封装格式一览

为什么要用TS:

这是因为两个TS片段可以无缝拼接,播放器能够连续播放。

FLV:一种流媒体封装格式,由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,因此FLV成为了当今主流视频格式。

流媒体协议

RTMP:

实时消息传输协议,RTMP协议用于对象、视频、音频的传输,这个协议建立在TCP协议或者轮询HTTP协议之上。
RTMP协议就像一个用来装数据包的容器,这些数据可以是FLV中的视音频数据。一个单个的链接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小传输的。

HLS:
HTTP Live Streaming (HLS) 协议科普扫盲

主要流媒体协议一览

这里写图片描述


流媒体服务器

常用服务器:

SRS:国人开发的优秀开源流媒体服务器系统
BMS:SRS的的商业版
Nginx:免费开源web服务器,常用来配置流媒体服务器。

数据分发:

CDN:内容分发网络,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决internet网络拥挤的状况,提高用户访问网站的响应速度。作用相当于中介。

CDN工作原理:

以请求流媒体数据为例
1. 上传流媒体到源服务器
2. 源服务器储存流媒体数据
3. 客户端播放流媒体,向CDN请求编码后的流媒体数据
4. CDN响应请求,若节点上没有该流媒体数据存在,则向源服务器继续请求流媒体数据;若节点上已经缓存了该视频文件,则跳到第6步。
5. 源服务器响应CDN的请求,将流媒体分发到相应的CDN节点上。
6. CDN将流媒体发送到客户端。

带宽:

在固定的时间可传输的数据总量,比如64位、800MHz的前端总线,它的数据传输率就等64bit×800MHz÷8(Byte)=6.4GB/s

回源:

当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存相应的内容,或者是缓存已经到期,就会到源服务器获取搜索,如果没有人访问,那么CDN节点不会主动去源站拿。

负载均衡:

由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助,通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立的地回应客户的请求。
均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。
这种集群技术可以用最少的投资获得接近于大型主机的性能。

Qos(带宽管理):

限制每一个组群的带宽,让有限的带宽发挥最大的效用。


[总结]视音频编解码技术零基础学习方法
开发直播app中要了解的原理

最后

以上就是迷路马里奥为你收集整理的视音频技术基础概念的全部内容,希望文章能够帮你解决视音频技术基础概念所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部