算机技术领域中,『音视频技术』应该说算是较复杂的小门类。较复杂的东西有个简单的入门指引,或者有前辈带路是很重要的。

前阵子,因为项目中急需音视频技术,虽然网上资料看似很丰富,但对初学者来说,很多资料都是『硬入门』,一上来就摆弄一大堆具体的技术概念点(SPS,PPS,H264,HEAV…),让初学者一直处于半懂不懂的摸索怀疑状态。

更好的方式,假设称为『软入门』,应该是先简单理解到音视频的根本组成原理(即动画原理),再把具体而庞杂的技术点往上拼建,让新同学明白循序渐进,明白枝干的主次,对于他们未来的深入学习将是事半功倍的。

A、简单理解,音视频原理

很多人小时候,应该玩过个小游戏,在笔记本上连续几页绘制一只动物前后迈脚,然后快速翻页,就有了如下图 pic-0的效果。这个过程就蕴含着,(视频)动画原理。音视频原理也是基于此。如再在翻页的时候,你学一声马叫”嘶…..”。不用怀疑,这个声音就是一段音频中采样的PCM了。至于为啥叫PCM,下面这几张图,结合几句说明应该足够解惑了。

图. pic-0

音视频的简单原理,就是一段序列播放的图片,再同步播放相应的序列音频采样片。如同 图pic-0到pic-3中所揭示的,里面就包含三个关键元素。

  • 1、YUV图片:从H264、HEAV等编码的二进制数据中,解码出来的序列图片叫YUV图片,本质上跟常见的jpg、png一样。因为视频中的序列图片实在太多了,考虑到效率和历史原因等,视频中解码出来的图片帧为YUV。显卡的主要工作内容就是处理这些图形数据。
  • 2、PCM音频:从mp3、aac等编码的二进制数据中,解码出来的序列音频采样点叫PCM音频数据,可以理解每一片PCM音频波形就是一个单位的声音。了解PCM格式的信息可以见PCM百科。
  • 3、音画同步:将序列图片帧连续渲染到计算机图层,同时根据同步参数DTS、PTS来同步播放音频帧,这就是视频的播放过程了。请坚信,那些你未来接触到的奇怪音视频术语都是围绕这个简单过程的。

图. pic-1

图. pic-2

图. pic-3(动画能实现,基于两点基础,a、人眼和人脑的视觉缓存效应,b、计算机带来的图画运算速度)


B、音视频技术,常见的概念

音视频技术中一些专业的概念,跟我们平时交流中用到的一些词汇有一定区分。

  • 1、视频格式:我们经常看到的视频格式mp4、avi、mkv。在技术概念中,叫『视频封装格式』,简称视频格式,里面包含了封装视频文件所需要的视频信息、音频信息和相关的配置信息(比如:视频和音频的关联信息、如何解码等等)。
  • 2、编解码方式(视频):视频编解码的过程是指对数字视频进行压缩或解压缩的一个过程。常见的视频编解码方式有,H.26X(H.264,H.265等),MPEG等。这里需要留意到,不同的视频封装格式,其实里面使用的编解码方式很多是可能一样的,封装格式是不同厂家的包装。这就好比,多个雪糕厂家生产一个口味的雪糕,外面的包装都是不一样的。
  • 3、编解码方式(视频):常用的音频编解码方式有 AAC、MP3、WMA等。

图. pic-4

以下的概念就慢慢专业一些,可以逐步消化,用百科词条等来辅助理解。

C、视频解码:实现“H.264->YUV”

视频解码的过程,就是将以某种编码方式(H264)进行编码的二进制数据,解码成YUV图片的过程,即“H.264->YUV”。 最广泛使用的莫过于FFmpeg这个开源的编解码套件,里面广泛涵盖了常见的编解码方式,还有封装格式(视频格式)。

针对到常用的H264编码方式,里面就涉及到一些具体的编码技术。

  • 1、一帧图像、颜色模型:具体就涉及帧编码,场编码,RGB三原色颜色模型,YUV颜色模型,常用的有 YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1 和 YCbCr 4:4:4 这些YUV子分类颜色模型。 详细的介绍参考针对性的资料,这里就只做入门简述了。 《帧和场的概念》 《视频帧的类型》

  • 2、H264码流格式: 码流里面就是装载着编码后的视频数据的结构载体。其它编码方式的码流格式也是类似 图pic-5的结构,里面就包括了一些编解码的参数集等关键信息。 详细的介绍可以了解。 《H.264码流结构解析》 《IDR、CRA、BLA、RASL、RADL、Gop》

    图. pic-5(码流格式,即码流内数据组织方式)

  • 3、帧内预测和帧间预测:因为视频的图像序列很有连续性,所以为了最大可能提高编码压缩效率,就有了『帧内预测和帧间预测』这种技术思路。简单来说帧内预测就是压缩单帧的大小,帧间预测就是根据A帧来预测B帧的变化,从而压缩了B帧。详细资料再多可自己参考,《帧内预测和帧间预测的比较》

    图. pic-6(直观看出哪类帧柱形图比较高,帧预测关键标记在在动画『变动』区域)

  • 4、流媒体协议:除了本地视频的播放,我们经常用到的就是视频的在线播放(点播、直播)。需要在线播放就需要使用到流媒体协议的支持,常见的流媒体协议有RTMP、HLS、Http-flv、RTSP等。《流媒体协议综述》

D、音频解码:实现“AAC->PCM”

音频帧和视频帧处理的工艺都是类似的,差异之处就是音频采用的编码方式为AAC、MP3等,处理出来的基础单元为PCM(视频的基础单元YUV)。 需了解详细的同学,可以从百度百科词条『音频编码』开始。

图. pic-7(上手过Adobe Audition之后就会更直观明白音频文件的大致构成了)

E、移动播放器绕不开的—–>ijkPlayer架构简述

ijkPlayer播放器是一个包括iOS、Android两个平台的播放器,是Bilibili网址基于FFmpeg的简易ffplay播放器来进行开发的。相比于更有名的VLC播放器,ijkPlayer更精简,代码量更小,更方便改造。

如果你是从事手机移动播放相关的工作,你会发现,当探索过VLC的庞杂模块还有各类繁多的基于ffmpeg的小开源播放器之后,ijkPlayer可能还是绕不开的开源方案。

ijjPlayer播放流程跟ffplay使用ffmpeg播放流程一样,区别就是ijkPlayer会根据具体的iOS、Android平台来使用该平台的硬解码工具,效率要比ffmpeg的软解码高出很多。 其实ijkPlayer架构很精简,可以从这些系列资料开始,然后阅读它的代码。 《ijkplayer系列(二) —— ijkplayer初始化流程》

图. pic-8

F、直播化特性,来改造ijkPlayer播放器

如果播放器是移动类的直播需求,其实很多国内的云直播解决方案sdk,比如七牛云直播,金山云直播,都是基于ijkPlayer进行修改的,比如iOS可以通过obj-c runtime特性剖开封装类中是不是含有IJKMediaPlayer这个类。2016年大热起来各种视频直播App,所以各种直播云服务也丰富了起来,这一类直播播放一般会比较重视的特性有,a、直播的秒开,b、避免花屏和弱网卡顿,c、直播的超低延迟以保证互动效率。捡有特点的来简单说明一些。

  • 1、直播秒开。一方面需要服务器做Gop缓存(为了客户端能最快得到第一帧完整图画),一方面需要客户端预置格式信息,避免avformat_find_stream_info等这类耗时函数,还有优先解码出第一帧图像进行渲染。
  • 2、直播低延迟。服务器和客户端同时优化多级缓存中的默认时长。
  • 3、直播紧追(追踪)。金山云称之为直播追踪,实际上『直播紧追』更能代表这个技术的目的。实现的过程是,将网络累计等因素造成的过大缓冲快速播放掉,紧跟直播源时间戳,保证客户端播放进度最大程度接近视频真实发生的时间。

参考:

  • a、《关于视频的一些概念》
  • b、(推荐!)《FFMPEG详解》
  • c、雷霄骅, 视音频编解码技术
  • d、雷霄骅,《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频
  • e、《ijkplayer视频播放器源码分析》。等…
  • f、原文在这里?

转自:http://www.ruoxu.me/yin-shi-pin-qi-fa

入门启发:音视频的简单理解相关推荐

  1. 【深度学习入门基础】二、简单理解 Transformer

    [深度学习入门基础]二.简单理解 Transformer 文章目录 [深度学习入门基础]二.简单理解 Transformer 自注意力层 多头注意力 Transformer 输入(输出)嵌入 位置编码 ...

  2. 音视频入门系列-音视频基础知识篇(录播、点播、直播)

    在学习音视频技术前,笔者还是希望可以分享给小伙伴们一些音视频方便的基本概念,掌握这些概念,有助于大家对于音视频有一个更直观和清晰的了解. 话不多说,今天笔者给大家分享下:录播.点播和直播. 录播:录播 ...

  3. Web音视频入门系列——音视频基础知识

    前言 21世纪以来,随着网络基础设施的不断完善,3G.4G.乃至现今5G网络的普及,互联网彻底改变了我们的生活.以前在家里看一部电影需要买DVD和播放机,现在直接打开浏览器,进各大视频网站就可以看了, ...

  4. 浅谈音视频开发入门基础及进阶资源分享

    导言:音视频开发涉及的知识面比较广,知识点又相对独立琐碎,入门门槛相对较高.想要对音视频开发具有深入全面的了解,需要在行业深耕多年.本文将简单介绍音视频的采集,编解码,传输,渲染四个技术点并对涉及到的 ...

  5. 零基础入门:实时音视频技术基础知识全面盘点

    1.引言 随着移动网络速度越来越快.质量越来越来,实时音视频技术已经在各种应用场景下全面开花,语音通话.视频通话.视频会议.远程白板.远程监控等等. 实时音视频技术的开发也越来越受到重视,但是由于音视 ...

  6. 音视频怎样入门?带你入门基础+学习思路

    Android开发的路越走越难,难道真的没有其他出路了? 并没有,一个行业的下降趋势也会带起新的行业,他的本质不会变,技术会稍有改变,本篇我们就来说说音视频行业. 音视频行情分析 1.市场 市场是一个 ...

  7. 安卓音视频入门难,老司机分享音视频开发学习技巧与痛点

    最近在写文章的时候,发现很多读者给我私信提问,想了解安卓音视频这块, 很多同学也对音视频开发有点浓厚的兴趣,但奈何没有系统的学习知识,仅靠自己苦苦钻研确实力不从心,今天就借这个机会分享一下我学习音视频 ...

  8. Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  9. Android音视频学习系列(八) — 基于Nginx搭建(rtmp、http)直播服务器

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

最新文章

  1. xss攻击汇总--转
  2. 3.通过现有的PDB创建一个新的PDB
  3. java get post 注解,GET/POST接收或发送数据的问题
  4. 互联网晚报 | 10月23日 星期六 | 恒大宣布全面实施现楼销售;华为开发者大会2021开幕;家乐福中国首家会员店正式开业...
  5. 信息学奥赛一本通(1018:其他数据类型存储空间大小)
  6. 【报告分享】科技抗疫,5G助力:5G通信为公共卫生防控诊疗体系带来的新契机.pdf...
  7. 探究streambuf
  8. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽
  9. linux下游戏手柄测试程序
  10. 【数学建模】CUMCM-2010A 储油罐的变位识别与罐容表标定 解题思路整理
  11. 获取微信公众号用户的openid
  12. html用if函数,if函数的使用方法(IF函数七种条件判断用法都在这)
  13. 交换机端口mtu值最大_-【SDN】交换机MTU配置总结
  14. 用 Creator 写微信小游戏排行榜
  15. 再介绍一篇最新的Contrastive Self-supervised Learning综述论文
  16. python 实现问卷星自动填写多份
  17. 《计算机存储与外设》----2.3 DRAM
  18. 使用Excel创建线性回归模型
  19. 博文第二天,一切刚刚开始
  20. flex布局均分高度了,没有自适应内容高度,怎么回事

热门文章

  1. Docker镜像与容器命令 专题
  2. POJ2299 逆序数
  3. stm32程序中的assert_param()的说明
  4. 3月上旬我国域名增长平稳 新增92059个域名
  5. 域环境下用组策略禁止客户机更改IP
  6. CodeForces - 1567C Carrying Conundrum(思维/状压)
  7. UVALive - 3231 Fair Share(最大流+二分)
  8. HDU - 4821 String(字符串哈希+优化)
  9. 6.变量的使用.rs
  10. socket穿透代理代码(C++版)