一、直播的本质
实时推送/拉取音视频数据
二、视频直播流程
视频直播的流程可以分为如下几步:
(1)采集
(2)处理
(3)编码和封装
(4)推流到服务器
(5)服务器流分发
(6)播放器流播放
1、采集
视频的采集涉及两方面数据的采集:音频采集和图像采集,它们分别对应两种完全不同的输入源和数据格式。
(1)两个传感器:
CCD:图像传感器,用于图像采集和处理,把图像转换为电信号
拾音器:声音传感器,用于声音采集和处理,把声音转换为电信号
(2)格式:
视频采样数据 : 一般都是 YUV 或 RGB 格式
音频采样数据 :一般都是PCM格式
由于所采集的内容非常大,所以需要进行压缩。常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等。视频编码压缩成 H.264 等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。
2、处理
视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,例如:美颜及水印。各种美颜和视频添加特效的App都是基于GPUImage框架实现。
3、编码和封装
视频编码的意义:原始视频数据存储空间大。核心思想就是去除冗余信息。
常见的视频编码器:
(1)H.264/AVC
(2)HEVC/H.265
(3)VP8
(4)VP9
(5)FFmpeg :是一个跨平台的开源视频框架,能实现如视频编码,解码,转码,串流,播放等丰富的功能。其支持的视频格式以及播放协议非常丰富,几乎包含了所有音视频编解码、封装格式以及播放协议。
封装:是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。
常见的封装格式:
(1)AVI 格式(后缀为 .avi)
(2)DV-AVI 格式(后缀为 .avi)
(3)QuickTime File Format 格式(后缀为 .mov)
(4)MPEG 格式(文件后缀可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)
(5)WMV 格式(后缀为.wmv .asf)
(6)Real Video 格式(后缀为 .rm .rmvb)
(7)Flash Video 格式(后缀为 .flv)
(8)Matroska 格式(后缀为 .mkv)
(9)MPEG2-TS 格式 (后缀为 .ts)
4、推流
传输协议:
RTMP :实时消息传输协议,Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,因为是开放协议所以都可以使用了。 RTMP协议用于对象、视频、音频的传输。
HLS(HTTP Live Streaming):是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议
RTSP(Real Time Streaming Protocol):实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由Real Networks和Netscape共同提出的
最后
最近也有重新整理了相关的音视频这一块的精华视频,感兴趣的可以关注关注。
最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题
等等,可以很好地帮助我们深刻理解Android相关知识点的原理以及面试相关知识。
这份资料把大厂面试中常被问到的技术点整理成了 PDF ,包知识脉络 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
这里也分享给广大面试同胞们,希望每位程序猿们都能面试成功~
以上内容均放在了开源项目:我的github 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...