本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/54962205
1、视频编码标准两大系统是什么?
视频编码标准有两大系统:MPEG和ITU-T,如下
视频编码标准
MPEG标准由MPEG制定
MPEG-1 | MPEG-2 | (MPEG-3) | MPEG-4 | MPEG-7 | MPEG-21
ITU-T标准由VCEG制定
H.261 | (H.262) | H.263 | H.263v2 | H.264
2、什么是音视频编码格式?什么是音视频封装格式?
常见的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等文件其实只能算是一种封装标准。
一个完整的视频文件是由音频和视频2部分组成的。H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。
例如:将一个Xvid视频编码文件和一个MP3视频编码文件按AVI封装标准封装以后,就得到一个AVI后缀的视频文件,这个就是我们常见的AVI视频文件了。
由于很多种视频编码文件、音频编码文件都符合AVI封装要求,则意味着即使是AVI后缀,也可能里面的具体编码格式不同。因此出现在一些设备上,同是AVI后缀文件,一些能正常播放,还有一些就无法播放。
同样的情况也存在于其他容器格式。即使RMVB、WMV等也不例外,事实上,很多封装容器对音频编码和视频编码的组合方式放的很开,如AVI还可以使用H.264+AAC组合,可以在具体使用中自己体会。尤其是MKV封装容器,基本无论什么样的组合都可以!但一般MKV用的最多的就是H.264+AAC组合,此组合文件体积最小,清晰度最高。因此网上很多MKV视频都是高清晰度的。
因此,视频转换需要设置的本质就是:A设置需要的视频编码、B设置需要的音频编码、C选择需要的容器封装。一个完整的视频转换设置都至少包括了上面3个步骤。
3、平时说的软解和硬解,具体是什么?
硬解就是硬件解码,指利用GPU来部分代替CPU进行解码,软解就是软件解码,指利用软件让CPU来进行解码。两者的具体区别如下所示:
硬解码:是将原来全部交由CPU来处理的视频数据的一部分交由GPU来做,而GPU的并行运算能力要远远高于CPU,这样可以大大的降低对CPU的负载,CPU的占用率较低了之后就可以同时运行一些其他的程序了,当然,对于较好的处理器来说,比如i5 2320,或者AMD 任何一款四核心处理器来说,硬解和软件的区别只是个人偏好问题了吧。
软解码:即通过软件让CPU来对视频进行解码处理;而硬解码:指不借助于CPU,而通过专用的子卡设备来独立完成视频解码任务。曾经的VCD/DVD解压卡、视频压缩卡等都隶属于硬解码这个范畴。而现如今,要完成高清解码已经不再需要额外的子卡,因为硬解码的模块已经被整合到显卡GPU的内部,所以目前的主流显卡(集显)都能够支持硬解码技术。
4、何为直播?何为点播?
直播:是一个三方交互(主播、服务器、观众),这个交互式实时的!尽管会根据选择的协议不同而有一些延迟,但我们仍认为它直播是实时的!--->主播在本地发送音视频给服务器(推流),观众从服务器实时解码(拉流)收看收听主播发送给服务器的音视频(直播内容)。直播是不能快进的
点播:首先一定要明确的一点,点播不存在推流这一过程,你本身你的流已经早就推给服务器了,或者这么说也不对,应该是你的音视频早就上传到了服务器,观众只需要在线收看即可,由于你的音视频上传到了服务器,观众则可以通过快进,快退,调整进度条等方式进行收看!
5、简述推流、拉流的工作流程?
推流:在直播中,一方向服务器发送请求,向服务器推送自己正在实时直播的数据,而这些内容在推送到服务器的这一过程中是以 “流” 的形式传递的,这就是“推流”,把音视频数据以流的方式推送(或上传)到服务器的过程就是“推流”!推流方的音视频往往会很大,在推流的过程中首先按照 aac音频-编码 和 h264视【公众平台不能出现视频这两个字,真是坑,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/54962205】频-编码的标准把推过来的音视频压缩 ,然后合并成 MP4或者 FLV格式,然后根据直播的封装协议,最后传给服务器完成推流过程。
拉流:与推流正好相反,拉流是用户从服务器获取推流方给服务器的音视频的过程,这就是“拉流”!拉流首先aac音频-解码 和 h.264视【公众平台不能出现视频这两个字,真是坑,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/54962205】 频-解码的内部把推过来的音视频解压缩,然后合成 MP4或者 FLV 格式,再解封装,最后到我们的客户端与观众进行交互。
6、常见的直播协议有哪些?之间有什么区别?
常见的直播协议有三种 RTMP、HLS、FLV...
-
1、RTMP:real time messaging protocol~实时传输协议,RTMP协议比较全能,既可以用来推送又可以用来直播,其核心理念是将大块的视频帧和音频帧“剁碎”,然后以小数据包的形式在互联网上进行传输,而且支持加密,因此隐私性相对比较理想,但拆包组包的过程比较复杂,所以在海量并发时也容易出现一些不可预期的稳定性问题。
-
2、FLV:FLV协议由Adobe公司主推,格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,由于这种极致的简洁,在延迟表现和大规模并发方面都很成熟。唯一的不足就是在手机浏览器上的支持非常有限,但是用作手机端APP直播协议却异常合适。
-
3、HLS:苹果原生:HTTP Live Streaming,遵循的是 HTTP 超文本传输协议,端口号8080,将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10-30s左右)。
7、点播中常见的数据传输协议主要有哪些?
常见的点播协议:HLS,HTTP
8、何为Nginx?有什么特点?
Nginx 是一个遵循 HTTP 协议的服务器!内存占用少,并发能力强! 还有等等的优点,可自行google
9、何为homebrew?你用它安装过什么?常用命令有哪些?
homebrew是一个 Mac系统下所独有的套件管理器,我要做直播,需要 rtmp 和 nginx ,单独安装很复杂,只要在终端里输入简单的安装相应的套件命令即可完成安装,复杂的过程都靠 homebrew 规避掉了!
我用它安装过很多东西,比如nginx 搭建流媒体服务器等。
常用命令:brew install 、brew uninstall、brew search、brew list、brew update、brew help 等~
10、FFmpeg是什么?
FFmpeg是一套用来记录和转换数字音视频,并能将其转化为流的开源计算机程序。拉流和推流离不开 FFmpeg 的帮助!
11、RTMP、HLS协议各自的默认端口号是?
RTMP端口号:1935
HLS端口号 :8080
12、m3u8构成是?直播中m3u8、ts如何实时更新?
是一个索引地址/播放列表,通过FFmpeg将本地的xxx.mp4进行切片处理,生成m3u8播放列表(索引文件)和N多个 .ts文件,并将其(m3u8、N个ts)放置在本地搭建好的webServer服务器的指定目录下,我就可以得到一个可以实时播放的网址,我们把这个m3u8地址复制到 VLC 上就可以实时观看!
在 HLS 流下,本地视频被分割成一个一个的小切片,一般10秒一个,这些个小切片被 m3u8管理,并且随着终端的FFmpeg 向本地拉流的命令而实时更新,影片进度随着拉流的进度而更新,播放过的片段不在本地保存,自动删除,直到该文件播放完毕或停止,ts 切片会相应的被删除,流停止,影片不会立即停止,影片播放会滞后于拉流一段时间。本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/54962205
13、简述如何在Mac上搭建本地直播服务器?
见我的文章:
http://blog.csdn.NET/hejjunlin/article/details/54425531
PS: FFmpeg推流至Nginx:可以推两种流:RTMP流,推流至rtmplive;HLS流,推流至hls;其中,HLS流表现较明显,在nginx的临时目录下,直观的可看到m3u8索引文件和N多个.ts文件。m3u8列表会实时更新,且会动态更改当前播放索引切片(.ts)。这种实时更新的机制,不会使得.ts文件长时间存在于Nginx服务器上,且当推流结束之后,该目录下的内容会被全部清除,这样无形中减缓了nginx服务器的压力。另外,也阐释了HLS这种流媒体播放相较RTMP延时较高的原因。
14、说说你平时在播放过程中做的优化工作
预加载,弱网优化,播放出错重试机制,运营商劫持引起的起播慢,mediaserver的cpu占有率很高,引起播放卡顿。起播时,只保留播放进程,kill 其他进程 。