直播基础知识分享--入门篇

什么是视频直播?

直播就是将每一帧数据(Vide/Audio/Data Frame),打上时序标签(Timestamp)后进行流式传输的过。发送端源源不断地采集音视频数据,经过编码、封包、推流,在经过中继分发网络(CDN)进行扩散传播,播放端再源源不断地下载数据并按时序进行解码播放。如此就实现了“边生成、边传输、边消费”的直播过程。

延迟:数据从信息源发送到目的地所需时间(低延迟)

RTMP/HLS是基于TCP之上的应用层协议,TCP三次握手,四次挥手,慢启动过程中每一次往返来回,都会加上一次往返耗时(RTT),这些交互过程都会增加延迟;其次TCP丢包重传特性,网络抖动可能导致丢包重传,也会间接导致延迟加大。

一个完整的直播过程包括但不限于以下环节:

采集、处理、编码、封包、推流、传输、转码、分发、拉流、解码、播放。

从推流到播放,再经过中间转发环节,延迟越低,用户体验越好。

卡顿:视频播放过程中出现画面滞帧;单位时间内播放卡顿次数统计称之为卡顿率(高清流畅)

造成卡顿的因素有可能是推流端发送数据中断,可能是公网传输拥塞或网络抖动异常,可能是终端设备的解码性能太差。卡顿次数越少或没有,用户体验越好。

首屏耗时:第一次点击播放后,肉眼看到画面所等待的时间。技术上指播放器解码第一帧渲染显示画面所花的耗时(极速秒开)

通常说的秒开是指点击播放后,一秒内即可看到播放画面。首屏打开越开,用户体验越好。

不同芯片平台编码差异:

iOS平台上无论硬编还是软编都是Apple一家公司出厂,几乎不存在因为芯片平台不同而导致的编码差异

Android平台上,Android Framework SDK提供的MdeiaCodec编码器,在不同的芯片平台上,表现差异很大,不同的厂家使用不同的芯片,不同的芯片平台上Android MediaCodec表现略有差异,通常实现全平台兼容的成本不低;Android MediaCodec硬编层面的H.264编码画质参数是固定的baseline,画质通常也一般,在Android平台下推荐用软编,好处是画质可调控,兼容性更好。

低端设备高性能采集和编码:

Camera采集输出的可能是图片,一张图的体积并不会小,如果采集的频次很高,编码的帧率很高,每张图都经过编码器,编码器有可能会出现过载。这个时候可以考虑在编码前,不影响画质的前提下,进行选择性丢帧,以此降低编码环节的功耗开销。

弱网下保障高级流畅推流:

移动网络下,通常容易遇到网络不稳定,连接被重置,断线重连,一方面频繁重连,建立连接需要开销。另一方面尤其是发生GPRS/2G/3G/4G切换时,带宽可能出现瓶颈。当带宽不够,帧率较高/码率较高的内容较难发送出去,这个时候就需要可变码率支持。即推流端,可检测网络状况和简单测速,动态来切换码率,以保障网络切换时的推流流畅。其次,编码、封包、推流这一部分的逻辑也可以做微调,可以尝试选择性丢帧,比如优先丢视频参考帧(不丢音频帧和I帧),这样也可以减少要传输的数据内容,但同时又达到了不影响画质和视频流畅的目的。

实现“秒开”考虑方向:

1、改写播放器逻辑,让播放器拿到第一个关键帧后就给予渲染。GOP的第一帧通常都是I帧,由于加载的数据较少,可以达到首帧秒开。如果直播服务器支持GOP缓存,意味着播放器在和服务器建立连接后可立即拿到数据,从而省却跨地区和跨运营商的回源传输时间。

GOP体现关键帧的周期,也就是两个关键帧之间的距离,即一个帧组的最大帧数。假设一个视频的恒定帧率是24fps(1秒24帧图像),关键帧周期为2s,那么一个GOP就是48张图片。一般而已,每一秒视频至少需要使用一个关键帧。

如果不能更改播放器行为逻辑为首帧秒开,直播服务器也可以做一些取巧处理,比如缓存GOP改成缓存双关键帧(减少图片数量),这样可以极大程度地减少播放器加载GOP要传输的内容体积。

2、APP业务逻辑层面方面优化,提前做好DNS解析(省却几十毫秒),提前做好测速选线(择取最优路线)。经过这样的预处理后,在点击播放按钮时,将极大提高下载性能。

一方面可以围绕传输层面做性能优化,另一方面可以围绕客户播放行为做业务逻辑优化。两者可以有效的互为补充,作为秒开的优化空间。

直播流媒体服务端架构也可以降低延迟,收流服务器主动推送GOP至边缘节点,边缘节点缓存GOP,播放器则可以快速加载,减少回源延迟,贴近终端就近处理和分发。

保障直播持续播放流程不卡顿:

直播毕竟不是一个HTTP一样的一次性请求,而是一个Socket层面的长连接维持,直到主播主动终止推流。

不考虑终端设备性能差异的情况下,针对网络传输层面的原因,保障一个持续的直播不卡顿。

其实是一个直播过程中传输网络不可靠时的容错问题:播放端临时断网了,但又快速恢复了,针对这种场景,播放段如果不做容错处理,很难不出现黑屏或重新加载播放现象。

为了容忍这种网络错误,并达到让终端用户无感知,客户端播放器可以考虑构建一个FIFO(先进先出)的缓冲队列,解码器从播放缓存对了读取数据,缓存队列从直播服务器源源不断的下载数据。通常,缓存队列的容量是以时间为单位(3s),在播放端网络不可靠时,客户端缓存区可以起到断网无感的过度作用。

如果直播服务器边缘节点出现故障,而此时客户端播放器又是长连接,在无法收到对端的连接断开信号,客户端的缓冲区容量再大也不管用了,这个时候需要结合客户端业务逻辑来做调度。重要的是客户端结合服务端,可以做精准调度。在初始化直播推流之前,例如基于IP地理位置和运营商的精准调度,分配路线质量最优的边缘接入节点。在直播推流过程中,可以实时监测帧率反馈等质量数据,基于直播流的质量动态调整路线。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容