视频直播首帧速度优化

直播在2016年是一个非常火热的领域,我也有幸在今年参与了新浪微博直播客户端的开发,在此分享一下关于直播开发的一些经验。

1.视频直播的基本原理

视频直播的过程大概由这么几个部分构成:

  • 推流端
  • 源服务器
  • CDN边缘节点
  • 播放端

直播架构.jpg

整个直播流转的过程是:推流端将视频流推向源服务器,源服务器对视频流进行编码或者转存,CDN负责负载均衡与缓存,CDN节点从源服务器获取视频流,播放端再从CDN上把视频流拉下来。

2.不同的直播协议

  • HLS
    HLS全称是Http live stream,是苹果公司主导的一种直播协议,完全符合http协议标准,Html对其原生进行支持,所以这种协议的优势就在于无论是在web端,还是iOS端都可以方便快捷的播放HLS的视频流。HLS协议不仅支持直播还支持点播,广泛的应用于H5产品当中。
    HLS本身请求的是一个m3u8格式的文件:

    #EXTM3U                     m3u文件头,必须放在第一行
    #EXT-X-MEDIA-SEQUENCE       第一个TS分片的序列号
    #EXT-X-TARGETDURATION       每个分片TS的最大的时长
    #EXT-X-ALLOW-CACHE          是否允许cache
    #EXT-X-ENDLIST              m3u8文件结束符
    #EXTINF                     extra info,分片TS的信息,如时长,带宽等

    里面保存了一个一个.ts格式的视频分片文件路径

    m3u8.jpg

    直播流会首先下载当前生成好的m3u8文件,再去一个一个下载里面的分片视频,所以对于源服务器来讲,生成好了一个m3u8文件之后,客户端才可能会拉到这个视频流,这也造成了HLS协议高延迟的问题。倘若一个m3u8文件里面所有的分片长度为10s,那么客户端拉到这个视频流的延迟至少为10s。

  • rtmp
    rtmp全称Real Time Messaging Protocol,是一种基于TCP的数据通信协议,广泛的被应用于流媒体的传输中来,此协议是实时传输数据流,所以延迟比HLS要低,由于具备TCP协议的拥塞控制,对数据的完整性有一定保证。与此同时,Adoube对rtmp协议的支持也做的很好,Flash可以完美的支持rtmp协议的视频流播放,大多数推流端都使用rtmp协议进行推流。
  • http-flv
    http-flv是通过http协议传输flv的视频流,HTTP协议中有个content-length字段,规定了请求http的body部分的长度,如果请求的时候不加content-length字段,那么客户端会一直受到数据。基于传输包的http-flv协议可以将数据包做的比rtmp做的更小,在流量上有比较大的优势,而延迟几乎和rtmp相同。

  • UDP
    在过去传统的视频通话广泛的基于UDP协议,由于不像以上几种协议都基于TCP这种带拥塞控制的协议,UDP可以做到1s以内的超低延迟,在直播中UDP没有广泛采用的原因是需要对服务端的架构进行改造,所以对于之前做过视频通话的厂商来讲,他们拥有着得天独厚的优势,目前很多互联网教育厂商由于对超低延迟的需求,基本都采用了UDP协议

3.直播延迟问题

随着视频直播领域变得越来越火,直播的延迟问题也日趋收到开发者的关注,根据不同也业务需求,厂商对延迟的要求也有所不同,美女秀场直播2~5s之间可以忍受,对于在线教育来讲1s左右才能保证正常的教学需求。总体来看,目前影响直播延迟基本有这么几种原因:

    • 网络速度
      在整个视频直播流转的过程中,无论是推流端到源服务器之间的网速,还是播放端从CDN拉流的速度都影响着整个视频直播过程的体验。所以网速往往是直播延迟最至关重要的原因。
    • 传输协议
      在上一节中讲到了不同的传输协议对延迟的影响,这里不再赘述。
    • 编解码速度
      对于视频直播来讲编解码的速度,好的编解码策略也对直播卡顿延迟问题有的很大的影响,下一节我们来从了解H.264编码的原理上思考如何做一个好的编解码策略。

      4.H.264编码

      H264logo.jpg

      我们知道视频本身是由一张一张的图片构成,快速播放起来欺骗我们的眼睛,让我们觉得图片里面的场景是动态的。但是如果一个1080p的视频,以60帧的帧率来播放,在视频完全不压缩的情况下,将是一个庞然大物,单单其中的一帧图片就要好几M。所以大家发明了很多视频编码的来将视频进行压缩。压缩的基本思路就是将视频中一张一张完整的图片,有变化的部分存下来,一样的部分就只存一张就好了,去除了冗余的部分视频就会小得多。
      我们让一部分帧保存了完整的图片,对于这种帧我们叫做I帧,如果I帧可以seek,我们将它叫做关键帧。两个I帧之间叫做一个GOP。
      只保存了变化部分的帧,我们叫做参考帧,其中又分为前向参考帧(P帧)和双向参考帧(B帧)。参考帧的意思就是根据I帧或者P帧进行参考,决定自己保留图片中的哪部分内容。参考帧越多,尤其是B帧越多,这个视频就越小,因为图片保留的部分就越少。

      H.264帧排布.jpg

      可以看到,B帧需要前后都要参考,虽然更多的B帧可以更好的压缩视频的体积,但是对于编解码也变得更加的困难,因为当我收到一个B帧之后,我必须等到后面有一个P帧或者I帧出现我才能进行解码,这对于直播的流畅性来讲是有影响的。

      5.对于直播首帧的优化

    • GOP缓存
      对于播放端的解码器而言,只有当遇到一个I帧的时候,视频才可以播放,假设播放端拉流的时候,刚好需要等2s才会遇到下一个I帧,这个播放器就可能会黑2s。所以为了能够秒开,快速的播放到第一帧视频,厂商往往会将最近的一个GOP缓存在CDN中,当播放端去拉流的时候,直接把上一个I帧传下来,保证播放器拉到流直接就可以播放。
    • CDN最近策略
      由于CDN负载均衡的策略,CDN会根据当前各个边缘节点的负载情况来指定客户端从哪个边缘节点来拉流,但这样有可能会导致播放端走了一个比较远的路由,从而增加延迟。有的厂商会在播放端密集的地区增加CDN的负载容纳量,并且指派就近原则,选取最近而不是根据负载来判断拉流的路径。
    • UDP策略
      将基于TCP的视频流协议换成无拥塞控制的UDP。
    • local DNS
      由于拉流时的请求地址往往是带域名的,请求过程中走DNS服务器有时会耗费一定的时间,可以选用local DNS,在客户端本地拿到缓存的ip地址直接请求服务器。
时间: 2024-12-06 08:41:35

视频直播首帧速度优化的相关文章

音视频直播服务平台总结

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 18.0px "PingFang SC Semibold"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px } p.p3 { margin: 0.0px 0.0px 0.0

视频直播秒开背后的技术与优化经验

在视频直播中,首屏打开速度直接关系到用户体验,而这背后蕴含着许多技术点与实践经验,其中Group of Picture(GoP)设置.缓存参数优化格外关键.本文根据迅达云SpeedyCloud工程副总裁李雨来在见云沙龙的分享整理而成. 使用常见的视频直播服务器,比如Nginx-RTMP做一个简单的Demo环境.我们用OBS往Nginx-RTMP上推流,随便找一个播放器播放.一般情况下,我们会看到一个黑屏,然后过一会之后,它才会出现图像.我们对比一下,如果我们看手机直播,像陌陌直播,映客,我们点一

视频直播技术(二):延迟优化

音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握.下面整理几个简单常用的调优技巧: 编码优化 1. 确保 Codec 开启了最低延迟的设置.Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显.很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧.对于第一帧的读取来说,这是一个

技术干货:实时视频直播首屏耗时400ms内的优化实践

本文由"逆流的鱼yuiop"原创分享于"何俊林"公众号,感谢作者的无私分享. 1.引言 直播行业的竞争越来越激烈,进过2018年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验.最近正好在做直播首开优化工作,实践中通过多种方案并行,已经能把首开降到500ms以下,借此机会分享出来,希望能对大家有所启发. 本文内容的技术前提: 1)基于FFmpeg的ijkplayer,最新版本0.88版本: 2)拉流协议基于http-flv. http-flv更稳定些,国内

网络视频直播系统需要执行的优化方案

什么样的视频直播系统才能算得上优秀呢?因人而异,喜好不同,对于网络视频直播系统的评判标准也各不相同.但是相信大家对于网络视频直播系统性能的判定标准会是一致的.即直播中的延迟.卡顿和首屏耗时,这三点是直接影响用户体验的. 针对于这三点来讲,通过怎样的优化方案可以使网络视频直播系统更加符合用户的直播需求呢?我们认为主要有以下三个方面. 1.服务端优化 在直播服器中,设置一个cache来存放GOP用于客户端播放.直播服务器缓存当前的GOP序列,当播放端请求相关数据时,CDN会从I帧返回到客户端,从而保

视频直播:libx264编码一帧图片+live555搭建RTSP流媒体服务器

最近又复习了一下live555的源代码,并在VS2013下编译了视频直播程序. 从视频读取一帧后x264编码,用live555的RTSP传输流媒体. 效果清晰流畅(640*480+40帧每秒),很满意. 附上主要的cpp代码 /* H264FramedLiveSource.cpp By Chain_Gank */ #include <highgui.h> #include <cv.h> #include <stdio.h> #include <string.h&g

Java截取视频首帧并旋转正向

package test; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.

视频直播技术-视频-编码-传输-秒开等&lt;转&gt;

转载地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=21#wechat_redirect 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集.美颜/滤镜/特效处理.编码.封包.推流.转码.分发.解码/渲染/播放等. 视频.直播等基础知识 什么是视频?

跟阿里云技术专家阙寒一起深度了解视频直播CDN技术

网络直播平台现下已经十分火热,很多常见的直播平台都采用了阿里云直播CDN来搭建自身业务.今天,我们请来了阿里云CDN团队技术专家阙寒,来介绍下视频的一些基础知识和视频直播的架构. 在进入正题之前,我们先来了解视频直播相关的名词含义是什么?扫个盲 通常我们所说的视频,是指连续的图象变化每秒超过24帧(Frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频. 而媒体转码是指将一段多媒体包括音频.视频或者其他的内容从一种编码格式转换成为