不看这几篇好文,就别说自己了解物联网

1. 前言

多媒体是什么?

维基百科的解释是:多媒体(Multimedia),在电脑应用系统中,组合两种或两种以上媒体的一种人机交互式资讯交流和传播媒体。使用的媒体包括文字、图片、照片、声音(包含音乐、语音旁白、特殊音效)、动画和影片,以及程序所提供的互动功能。目前为止,多媒体的应用领域已涉足诸如广告、艺术,教育,娱乐,工程,医药,商业及科学研究等行业。在物联网场景,多媒体的应用也越来越多。但不管是怎么样的使用场景,多媒体涉及到基础原理和底层知识都是一致的。

本文将聚焦在说明多媒体世界中的视频文件是怎么播放出来的。一个多媒体文件播放涉及到哪些过程?人体通过肉眼看到画面、通过耳朵听到视频声音,这中间经过了哪些处理?本文将尽可能通过简单易懂的文字讲述一个视频文件的播放流程。

2. 播放链路(Pipeline)

一个播放器的构成或者播放器的pipeline虽然有不同的实现,但大多遵循以下的流程:

这些部分功能大致如下:

  • MediaSource:视频源文件的来源
  • Demux:音视频数据分离
  • Video\Audio Decode:音视频数据解码
  • Video\Audio Ouput:音频数据外放、视频帧渲染
  • AVSync:音视频同步

3. MediaSource

接下来从视频源开始讲起。视频源也就是MediaSource,MediaSource也就是多媒体的数据源,这些数据源包括:

  • 本地存储介质的视频文件,uri以“file:\\“前缀;
  • 来源于网络http协议传输,uri以“http:\”前缀;
  • 来源于网络rtsptp协议传输,uri以“rtsp:\”前缀;

MediaSource实现一般会有read、seek的抽象,根据不同的source来源有不同read、seek操作的实现;这些实现为后续的AV Demux提供数据输入流。

4. Demux

有了视频源之后,接下来就是要把获取到的音视频文件做基本的分析处理了,这里就必须要提到Demux了。Demux部分起到的作用是把音视频文件或者音视频数据流中的音频数据与视频数据分离,分离供后续的音视频decode分别解码。

在demux部分不得不提到AVFormat的概念,这个可以理解为音视频的数据的封装格式,封装格式的意义在于把视频帧与音频帧按照一定格式交织封装,便于存储、传输及分离。

AVFormat封装格式的意义是什么呢?

倘若没有封装格式的交织封装,那会出现大段的视频数据后接音频数据的情况,在最终音视频同步输出方面是不利的,一个好的封装格式可以减少更少的AV数据缓存,即可做到音视频数据同步。

介绍了一些AVFormat的概念,那当在讲AVFormat的时候,到底讲的是什么?其实在日常的接触中,已经有打过照面了,比如大家熟知的视频文件后缀如.mp4、.mp3、.ts、.mkv,这些都是通过文件后缀看到AVFormat。

下面以MP4格式为例简单介绍一下AVFormat的具体内容:

MP4文件格式

(图片来源:https://www.cnblogs.com/CoderTian/p/8277965.html)

MP4格式就是由一个个的box组合成的box树,所有的数据都包含在box里,下面来了解一下box的基本结构。一个box是由box header和box里面包含的数据组成的,如下图所示:

(图片来源:https://www.cnblogs.com/CoderTian/p/8277965.html)

整个box以box header开头,box header中包含了box的大小(size)和类型(type)等信息。其中,size指明了整个box所占用的大小,包括header部分,如果box很大(例如存放具体视频数据的mdat box),超过了uint32的最大数值,size就被设置为1,并用接下来的64位uint64的largesize来存放大小。box中的字节序为网络字节序,也就是大端字节序(Big-Endian)。box根据header部分包含的信息的不同可以分为box和full box。

一个MP4文件中,主要需要了解的是存储音视频的metadata和音视频数据的box,metadata主要在moov box,音视频数据在mdat box中。

5. Video Decode

解析了音视频文件之后,接下来就需要对音视频分别进行解码了。这里先来看看视频解码。Video Decode就是视频解码,在提到视频解码之前,需要先看一下什么是视频帧。

5.1 视频帧介绍

视频都是由静止的画面组成的, 这些静止的画面被称为帧。为了节省存储空间和传输带宽,视频帧都是通过某个特定的压缩算法压缩而成的,根据压缩算法,视频帧又分为I帧、P帧和B帧。

  • I帧(I frame)

又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图像。I帧的编码流程如下:

而解码刚好利用了DCT转化的可逆性,是编码流程的逆过程。

  • P帧

前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。

  • B帧

双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。

5.2 色彩空间

I帧、P帧、B帧decode完可以理解为是一帧帧画面,图像的组成可以理解为一个个像素组成,像素的表示涉及到色彩空间,常见的色彩空间包括如下:

  • RGB

工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

  • YUV

YUV是编译true-color颜色空间(color space)的种类,YUV、YCbCr、YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度灰阶值,“U”和“V”表示的则是色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。

  • YUV 4:4:4采样,每一个Y对应一组UV分量。
  • YUV 4:2:2采样,每两个Y共用一组UV分量。
  • YUV 4:2:0采样,每四个Y共用一组UV分量。

在多媒体视频领域,多用的是YUV的颜色空间。

6. Audio Decode

看完了视频解码,接下来可以来看看音频解码了,Audio Decode就是音频解码。

6.1 audio 编解码介绍

  • MP3

MP3即MPEG Audio LayerIII,是一种数字音频编码和有损压缩格式,它被设计来大幅降低音频数据量,通过舍弃PCM音频数据中对人类听觉不重要的部分,达成压缩成较小文件的目的。MP3编码的流程如下:

  • AAC

出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

  • AC3

AC3(全称Audio Coding3音频编码3)是杜比数码的同义词,杜比数码是一种高级音频压缩技术,它最多可以对6个比特率最高为448kbps的单独声道进行编码

音频数据decode完是一些列的PCM数据。

6.2 PCM介绍

即脉冲编码调制(Pulse Code Modulation,PCM),PCM中,channel的概念。PCM数据靠一个个sample采样描述,用一个个非连续的采样点描述现实中连续的声纹。

channel

  • Mono:单声道
  • Stereo:立体声,双声道
  • 四声环绕
  • 5.1声道:杜比、dts
  • 7.1声道

sample 位深,即每个sample数据的精度,bit数

  • U8:无符号8bit
  • S8:有符号8bit
  • S\U16LE\BE:有\无符号小\大端16bit
  • S\U32LE\BE:有\无符号小\大端32bit
  • F32:Float 32bit

sample rate,即每秒采样数

  • 8kHz
  • 16kHz
  • 32kHz
  • 44.1kHz
  • 48kHz
  • ...

7. AVsync

音视频最终渲染输出时,要考虑音视频的同步。在音视频同步中,不得不先了解PTS与DTS的概念。

  • PTS

即Presentation Time Stamp,显示时间戳,代表了每一个音视频帧的显示时间戳。

  • DTS

即Decode Time Stamp,解码时间戳,代表每一帧音视频帧的decode时间戳。

以下是PTS\DTS的例子:

图片从左至右是视频帧的先后文件组织顺序,也是dts的先后顺序,上面标示的是PTS的顺序即显示的顺序,所以看到第三帧画面是再第四个顺序显示的。

AVSync的方法:

Audio Master

Audio Master即以audio的pts作为视频的参考时钟,让audio数据按照自己的pts顺序播,视频显示时参考音频当前的pts,以决定当前视频帧是要repeat还是因为太迟丢弃。在存在音频数据的情况下, 这个是通常的AVSync方式,原因如下:

  • 人耳对声音的敏感度是高于视频的,丢音频帧会明显感觉到声音异常或者pupu音。
  • 音频数据采样率是固定的,采样率固定的情况下,数据的输出速度是持续平稳的,这是一个天然优势的时间参考依据。

Video Master

通常在无音频数据时作为参考。

外部时钟作为Master

这个是音视频pts都遵照外部时钟作为参考。

8. Video Render

视频的输出显示需要依靠Video Render来完成。Video 的渲染显示一般基于一些图形库做,比如SDL\OpenGL等等,这些都可以作为图形显示的技术模块,在android上有基于OpenGL封装的surface view,借助surfaceflingle显示。AliOS Things上会有HaaS UI。图形渲染也是一块比较专业的知识,后续会用其他文章来介绍。

9. Audio Output

音频的输出播放需要依靠Audio Output来完成。Audio Output部分是讲PCM数据交到音频设备播放,常见的选择有ALSA等实现。AliOS Things上会有A2SA。音频播放也是一块比较专业的知识,后续会用其他文章来介绍。

10. 总结

到这里一个视频文件总算是播放出来了,是不是非常不容易?这里面确实也涉及到很多专业知识,但总结起来你只要记住4个要素就可以了:

  1. 视频文件来源
  2. 视频文件格式解析及音视频数据分离
  3. 音视频解码
  4. 音视频播放及同步

是不是又觉得没那么复杂?愿大家在知识的海洋中能找到最适合自己的学习方式,不断学习,保持进步!

更多精品好文

物联网云端一体AI方案的探索

物联网设备连接的下一个引爆点:4G Cat.1

物联网教育现状和前景

一文看懂蓝牙在物联网中的应用场景

下一个智能硬件爆品是什么?

华为、阿里、小米都在用的全屋智能技术

为什么物联网领域使用Rust的项目越来越多?

物联网中也能使用区块链技术?面向IoT的区块链基础架构IoTeX

开源硬件的前世今生

物联网碎片化的一些思考

边缘计算在物联网行业的应用

物联网太难 ? 不妨试试用Python来开发

5G会给物联网行业带来哪些变化?

必须要了解的物联网安全知识

ARMv9能给ARM带来新一轮腾飞吗?(安全篇)

ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)

国产物联网操作系统的出路在哪里?

RISC-V架构能否引领物联网时代?

物联网到底为什么这么火?

谁才是物联网连接技术中的王者?

物联网平台大量出现能否将行业带入爆发式发展

脚本语言适合物联网开发吗

从“嵌入式”到“物联网”的四大转变

物联网发展新趋势

带你走进多媒体世界:视频文件是怎么播放出来的相关推荐

  1. 计算机走进画图世界课件,《走进多媒体世界》PPT课件.ppt

    <<走进多媒体世界>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<走进多媒体世界>PPT课件.ppt(11页珍藏版)>请在人人文库网上搜索. ...

  2. 带你走进虚拟化世界之kvm(转载)

    http://chuck.blog.51cto.com/10232880/1720953 带你走进虚拟化世界之kvm 2015-12-08 23:10:46 标签:云计算 虚拟化 kvm 原创作品,允 ...

  3. 阿里的27个项目资源带你走进Github世界!

    阿里的27个项目资源带你走进Github世界! 1.设计语言 & 前端框架 Ant Design https://github.com/ant-design/ant-design ★ 1488 ...

  4. 视频文件损坏无法播放怎么修复?

    有很多原因可能导致视频文件损坏无法播放,如: 病毒和漏洞:漏洞和病毒是计算机的噩梦,它们可以攻击存储在硬盘上的文件和视频.如果没有杀毒程序,视频文件很容易受到损坏. 盗版视频转换器:一些视频转换器不是 ...

  5. mp4视频文件损坏无法播放怎么修复?

    对于喜好分享想小伙伴,都会拍摄各种各样的视频,然后在对拍摄好的视频文件进行编辑处理,这样才能展现出更多的精彩瞬间,但有时在处理视频素材时,会发现视频已经损坏,无法正常播放.这种情况下,我们很难再进行二 ...

  6. 佳能R5相机断电0KB字节DAT视频文件无法打开播放怎么数据恢复MP4

    佳能相机录制视频过程如遇到异常状况,比如说录着录着突然电池没电,人为误操作没关机前电池或者卡被意外拨出,死机,相机摔落等等意外中断录制的情况,有可能导致录制中的MP4视频变为扩展名为DAT的文件,有时 ...

  7. 仓鼠体重年龄对照表_一文带你走进仓鼠世界:仓鼠种类之叙利亚仓鼠(上)

    (宠鼠百科第76期) 今天咱们要谈的是仓鼠中的巨无霸--叙利亚仓鼠,又名金丝熊,黄金鼠.叙利亚仓鼠,很显然祖籍叙利亚,是位来自戈壁荒漠的浪子.叙利亚仓鼠体长12~15厘米,尾长1~1.5厘米,体重10 ...

  8. 本地服务器的音乐如何才能播放视频文件夹,mx播放器如何添加本地文件 添加本地文件设置方法...

    更换播放器皮肤/主题颜色 在这个版本中 主题颜色的设置十分丰富 不再拘泥于原来的黑白二色 点击"设置"选择"列表"项 修改主题,选择一种自己喜欢的颜色 现在有十 ...

  9. OpenCV重复播放摄像头视频,循环播放摄像头(视频)文件,循环播放视频中某一段视频

    OpenCV中使用摄像头录像并保存并不难实现,本文针对摄像头实时帧画面进行记录,并重复播放 视频文件的读取和处理方法类似,首先,本文对摄像头进行采集和实时帧画面显示. #include <ope ...

  10. 浏览器-点击预览视频文件(自动播放、循环播放)

    点击预览按钮,弹出窗口自动播放视频文件,并伴有遮罩层 从网上自行下载jquery-1.11.2.min.js(版本自己选择)和flvplayer.swf文件.需要注意的是网上一般有两个版本的flvpl ...

最新文章

  1. 【青少年编程(第25周)】隔离终于解除了!
  2. distinct 排序_自己造一个排序算法
  3. 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器
  4. OpenTLD相关资料
  5. 机器学习之数据预处理——特征编码(标签编码,独热编码)
  6. C语言之标识符与关键字
  7. Zuul 上传大文件服务报错的问题
  8. javascript键盘事件
  9. 云出阿里见月明(二)
  10. wps-excel的自动分页符(虚线)怎么去掉
  11. htc one m7刷Linux,HTC One M7 刷机图文教程 一键刷Recovery教程
  12. python能调用身份证读卡器吗_最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册...
  13. 磁盘分区怎么恢复回去
  14. Jekins的简介和使用
  15. kitti 数据集点云使用笔记
  16. Python内置函数—vars的具体使用方法
  17. 1.怎么样使一个 div 居中于浏览器中间
  18. IC验证:静态时序分析
  19. 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)...
  20. [RK3399[NanoPC-T4][Android-Q]强调色

热门文章

  1. 最近的收获以及清明节的安排
  2. texture_laws 纹理滤波用于缺陷检测
  3. SBC音频编解码算法在无线音频传输上的简单应用
  4. php获取steam装备信息,api – 获取某人的Steam库存
  5. mummer基因组共线性分析详解
  6. Word文档标题自动增加序号
  7. 74HC595使用方法
  8. linux java 自动安装_Centos7 linux 卸载自带安装的jdk 并yum自动安装jdk1.8
  9. 卡迪夫大数据专业排名_大数据分析:英国哪个大学在国内知名度最高
  10. 浅谈智慧校园建设中存在的问题及解决方案