草庐IT

直播卡顿原因详解及优化

【零声教育】音视频开发进阶 2023-08-22 原文

随着视频直播的发展,很多直播团队可能会遇到视频直播卡顿,频繁出现缓冲标志或者直播画面一卡一卡等情况。究竟是哪些原因造成了视频直播观看的卡顿情况呢?

又拍直播云结合实践经验,从设备、视频流、网络这三方面进行解剖分析造成直播卡顿的问题及其解决方法。

1、视频直播卡顿原因

造成直播视频卡顿的原因主要有设备、视频流、网络这三方面的问题。

2、问题排查及解决方法

2.1 设备

高清视频往往会给硬件带来解码压力,由于解码造成的卡顿尤为明显。同时如果PC端Flash Player或移动端播放软件版本过低,可能也会造成解码问题导致播放卡顿情况。

如果是这个原因,解决方法有以下几点:

  • 升级硬件、软件设备,提高兼容性和容错率;

  • 使用硬编硬解方案,充分利用GPU 加速;

  • 降低视频码率,选择流畅或者标清画质进行视频播放;

  • 增大播放器缓冲区,缓解因网络或解码不稳定引起的卡顿。

2.2 视频流

2.2.1 音视频时间戳不同步

在直播中,当音视频时间戳不同时,会影响画面渲染,导致画面解析时出现问题,造成一卡一卡的现象,如下图所示,音视频时间戳非单调递增会导致播放器在解析画面时出现错乱的情况,前后画面衔接会出现不连续甚至花屏的现象。

△ 音画不同步

针对此类问题,我们需要对推流器的源码进行研究,把读取到的每一针音频、视频的时间戳进行查阅、分析,然后通过程序干涉推流器或者流媒体服务器,矫正逻辑值,从而使音画同步。

2.2.2 视频流参数配置问题

如果视频的帧率设置过低(帧率即每秒的画面张数),根据人眼的视觉暂留原理,每秒的画面张数必须达到一定的数值,人眼观看才是连续有效的。导致视频流的编码方式与传输服务器有不兼容的情况,部分音视频数据出现了解析错误甚至无法解析的情况,也会出现视频流播放卡顿的问题。

如果是这个原因,解决方法有:

  • 设置合理的码率,帧率,分辨率,关键帧间隔,音视频编码格式等参数;

  • 尽量遵循标准的视频编码方案,流媒体传输协议,对视频流进行采集,编码,解码,播放等操作。

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发 

【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

3、网络

直播网络目前存在三种情况:无线、有线、4G。

无线网络:WIFI 连接的直播受距离、环境等使用因素的影响,需要让设备尽量靠近 WIFI 信号源,避免穿墙或金属物遮挡,保持信号强度,带宽6M以上,同时避免其他设备接入 WIFI 信号源抢占信号;

有线网络:直播场地有专门的网口使用,最好是专线网络,上下行带宽不少于4M;

4G网络:手机网络受到周围的环境影响大,需要在手机信号良好的地方,并且防止网络波动,在直播时最好选择4G卡。

3.1 上传网络

当主播端网络较差时,会导致推流端上行不稳定,这个时候可以通过 speedtest 进行测速,判断主播端的网络速度。

△ speedtest测速示例

同时国内CDN厂商后台也多会提供推流端检测工具,这个时候就可以使用又拍云CDN后台进行推流端检测,查看是否是推流端网速问题。

△ 又拍云流管控后台

3.2 下行网络

观众播放端的网络也可能存在波动问题,需要定位是否是大面积的观众卡顿还是局部观众卡顿。

解决方法有:

  • 用户通过 speedtest 进行测速,判断终端的网络速度;

  • 用户 ping 播放域名,查看解析到的服务器节点,判断自身IP 到服务器之间是否有延迟过大或者丢包的情况出现;

  • 联系 CDN 厂商排查线路是否有不稳定的现象,也可以通过播放器打点上报,统计所有客户端的整体卡顿率情况,分地区做一些线路和资源的调整和优化。

△ ping 播放域名

3.3 服务器

一场直播需要保证音视频数据的实时传输,推拉流稳定,高并发人数下的系统稳定性,现在国内的直播平台多选择CDN厂商进行直播底层业务支撑,当直播观看人数并发较大时,常会给服务器负载造成压力,带宽数据量大,传输缓慢,导致卡顿。

目前,国内的CDN厂商基本都提供检测工具,可以在控制台查看CDN情况的使用情况以及各省份的服务器的下载速率和负载情况,如下图是又拍云的服务监控后台,图中可以看到整体的健康度以及各省份的服务器平均下载速率。

△ 又拍云的服务监控后台

△ 又拍云CDN检测工具

其次可以通过工单或者联系在线技术支持进行CDN线路排查,选择更适合的服务线路。

视频直播卡顿中会有多种问题存在,需要从各个方面去排查,性能优异的推流端、播放端与CDN服务可以减少很多不必要的麻烦,更加专注于直播内容的产出。

又拍直播云解决方案,支持RTML、HLS、HTTP FLV视频传输协议,首创HLS+技术,将HLS直播延迟减少至4秒。并且提供功能丰富的跨平台推流端、播放段SDK工具包降低开发成本、缩短上线周期。

4、推荐阅读

从Html5直播到互动直播,看直播协议的选择 WebSocket+MSE——HTML5 直播技术解析 让Chrome看不了WWDC直播的HLS技术详解

原文链接:https://www.cnblogs.com/upyun/p/7125837.html

有关直播卡顿原因详解及优化的更多相关文章

  1. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  2. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  3. ruby-on-rails - 出于某种原因,我无法在控制台中生成重音字符 [é、ü 等] - 2

    在MacOS更新之前,它一直运行良好。我重新安装了RVM、rails、ruby等等。到目前为止没有任何效果。在我的Mac终端中,我可以生成一个é,但是在控制台中,我可以生成字符,使用alt+character,然后当我键入字符分配给的字母,它会删除该字符。在我的~/.rvmrc中:exportruby_configure_flags="--with-readline-dir=/usr/local/Cellar/readline/6.2.4"有什么想法吗?到目前为止,我已经明确地让它工作了,包括readline-rb。我猜我的全局要求不工作。gem'rb-readline','~>0.4

  4. Ruby 缺少常量表达式优化? - 2

    我希望Ruby的解析器会进行这种微不足道的优化,但似乎并没有(谈到YARV实现,Ruby1.9.x、2.0.0):require'benchmark'deffib1a,b=0,1whileb由于这两种方法除了在第二种方法中使用预定义常量而不是常量表达式外是相同的,因此Ruby解释器似乎在每个循环中一次又一次地计算幂常数。是否有一些Material说明为什么Ruby根本不进行这种基本优化或只在某些特定情况下进行? 最佳答案 很抱歉给出了另一个答案,但我不想删除或编辑我之前的答案,因为它下面有有趣的讨论。正如JörgWMittag所说,

  5. ruby-on-rails - 优化读取数据库和写入csv文件 - 2

    我正在尝试从数据库中读取大量单元格(超过100.000个)并将它们写入VPSUbuntu服务器上的csv文件。碰巧服务器没有足够的内存。我正在考虑一次读取5000行并将它们写入文件,然后再读取5000行,等等。我应该如何重构我当前的代码以使内存不会被完全消耗?这是我的代码:defwrite_rows(emails)File.open(file_path,"w+")do|f|f该函数由sidekiqworker调用:write_rows(user.emails)感谢您的帮助! 最佳答案 这里的问题是,当您调用emails.each时,

  6. 软约束、硬约束、Minimum Snap的轨迹优化方法 - 2

    文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的

  7. ruby-on-rails - 负载测试期间 Unicorn CPU 使用率激增,优化方法 - 2

    我对为我的RubyonRails3.1.3应用优化我的Unicorn设置的方法很感兴趣。我目前正在高CPU超大实例上生成14个工作进程,因为我的应用程序在负载测试期间似乎受CPU限制。在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个内核都达到峰值,盒子负载飙升至7-8个。每个unicorn实例使用大约56-60%的CPU。我很好奇可以通过哪些方式对其进行优化?我希望能够每秒将更多请求汇集到这种大小的实例上。内存和所有其他I/O一样完全正常。在我的测试过程中,CPU越来越低。 最佳答案 如果您受CPU限制,您希望使用

  8. 美团外卖搜索基于Elasticsearch的优化实践 - 2

    美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-BasedService(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-LengthEncoding(RLE)设计了一款高效的倒排索引结构,使检索耗时(TP99)降低了84%。本文从问题分析、技术选型、优化方案等方面进行阐述,并给出最终灰度验证的结论。1.前言最近十年,Elasticsearch已经成为了最受欢迎的开源检索引擎,其作为离线数仓、近线检索、B端检索的经典基建,已沉淀了大量的实践案例及优化总结。然而在高并发、高可用、大数据量的C端场景,目前可参考的资料并不多。因此

  9. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  10. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

随机推荐