网络视频播放卡顿原因分析

一、问题描述

    某项目通过拉摄像机rtsp流转rtmp/http-flv/ws-flv的方案,使用户可以在网页中观看摄像机的视频画面。在 观看视频时偶发出现卡顿现象。

二、卡顿现象分析和解决

    此问题涉及的原因较多,所以得考虑各环节的问题可能性,并根据现场实际情况进行处理。整个项目的视频链路为摄像机(rtsp服务器) -> 推流端(将摄像机rtsp转rtmp) -> 流媒体服务器(转协议,将rtmp转为http-flv/ws-flv) ->  外网服务器(提供互联网访问连接的主机电脑,让用户可以在外网观看最终转出来的视频)。 
可以看到链路比较多,当出现卡顿问题时需要从摄像机排查到推流端、流媒体服务器......外网再到播放器。我们可以一步步通过ffplay/vlc等播放器播放摄像机rtsp,内网播放http-flv/ws-flv,再到外网播放转出来的流来一步步排查是哪个链路出现问题。

(一)推流端

1.推流端硬件条件限制

    使用推流工具(比如FFmpeg)推流(转码) 时,码率、帧率或编码档位设置得过高,但硬件条件存在限制(推流软件 所在电脑的 CPU 性能较差),导致编码速度变慢,无法达到流畅播放的帧率要求。 如果推流端所在电脑的整体 CPU 使用率超过80% ,那么视频的采集和编码都会受到影响,无法正常发挥作用;如果其 CPU 使用率达到 100%,那么推流端本身就已经很卡,观众端要有流畅的观看体验显然是不可能的。在Windows上可以使用任务管理器,Linux上使用top命令查看进程的CPU使用率。
解决方法:
    尝试降低码率、帧率的设置,检查卡顿现象是否有好转。如果发生好转,可以考虑升级推流端所在电脑的硬件配置;或者不转码仅仅进行转封装 进行推流。

2.系统资源占用

检查推流端 所在电脑后台是否运行了大量的程序,建议删除和停止正在运行的程序,空出资源。

3.推流帧率过低

    人眼识别为流畅的视频需要 FPS 每秒 15 帧以上。如果 FPS 低于 10 帧,画面就会出现较明显的卡顿。如无特殊情况,尽量将视频帧率设置在每秒15 帧之上,如果摄像机画面本身变化就很少,如静态画面或PPT 播放等场景,则不受该原因影响 。虽然视频的帧率越高画面流畅感越强,但是帧率超过每秒 30 帧 后,人眼就无法识别出画面的效果,帧率增加也会增加视频传输的带宽成本,建议合理设置该参数。
解决方法:
    在推流指令中更改推流的帧率;或者更改摄像机自带配置网页中的设置,在里面更改帧率。

(二)流媒体服务器端

1.GOP缓存功能

    为了保证视频的秒开以及降低视频的卡顿,一般的流媒体服务器默认会缓存数秒的数据,这一般叫 GOP缓存功能。比如缓存 180 秒的帧数据 , 任何终端播放的时候都是从 180 秒前进行播放 , 这样就至少保证 不会出现卡顿,但这样做延时会很大。部分流媒体服务器,比如开源的zlmediakit 并没有该功能。

2.自适应码率技术

自适应码率技术可以: 1. 让播放体验更加智能。例如,用户在一个不确定的网络环境下,不知道什么 清晰度最合适,选择高清晰度,卡了;选择低清晰度,画质体验又不好。自适应码率就是要解决这个选 择问题,智能匹配最合适的清晰度,避免用户自己反复去尝试;2. 避免播放卡顿。高清视频,在网络限 速或者更常见的4G 下,网络波动大,自适应码率可以实时地调节清晰度,在保证用户观看更高清晰度的 情况下,避免播放卡顿。
自适应码率技术原理:
第一步,原始的视频资源文件,它可能只有一个比较高的清晰度;
第二步,生产端对视频进行转码和切片,根据播放需要,转码成不同清晰度的码流。一般清晰度越高,
码率越高,文件越大。每个码流都切分成时间对齐的分片,一般是 10s
第三步,在转码和切片之后,经过 CDN 节点在网络上进行分发;
第四步,各自适应码率的算法(基于带宽速率、 基于播放器 Buffer BBA 算法 、 MPC 算法 、基于机器
学习)按策略选择需要的清晰度;
第五步:客户端下载这个清晰度的分片文件,进行播放。

3.抗丢包技术

    由于网络的不稳定,丢帧的情况时有发生,为了避免花屏,部分播放器会把丢失参考帧的视频丢掉, 其会无法渲染新的数据,这就会导致视频出现卡顿的问题。所以服务端一般会综合运用前向纠错、后向 补偿、丢包补偿技术使得在丢包率极高的环境下也能流畅直播。

(三)播放端

1.播放端硬件条件限制

使用播放器播放音视频时,电脑的cpu或者gpu占用达到100%,意味着电脑正在全力运转,处理器已经没有剩余资源来处理其他任务了。这就可能会导致视频卡顿、画面不流畅等问题。
解决方法:升级播放端电脑硬件,使用更高端的cpu和gpu;降低视频质量,降低视频的分辨率、码率、帧率等参数;关闭其它应用程序。

2.播放器缓冲区过小

一般的网络播放器都会有缓冲区抵抗网络抖动、抵抗解码抖动、避免被动丢帧导致花屏。缓冲区设置得过小,网络抖动时就可能会卡顿。但是缓冲器过大,则会导致内存占用高、播放延时大。
针对网络抖动:大部分播放器是接收缓存后才进行解码显示的,接收缓存的大小也会影响播放的流畅 度。所以可以通过调整接收缓存的大小,减少卡顿的影响。通过计算网络延迟来知道网络抖动的大小, 这样设置合适的缓冲区大小用来存储接收到的数据包。假设一开始网络抖动过大,这时播放器可以创建 一块buffer 用来接收数据,但不及时的送去给解码处理或者渲染处理,而是等待网络抖动大小设置的延 迟时间到了才把buffer 里的数据提供给解码或者渲染。这块 buffer 里含有多个视频帧数据,这样解码器 从buffer 里获得的数据就是时间连续的,这样就不会出现视频忽快忽慢的情况,而是看起来很平滑顺畅。但是使用jitter buffer,渲染的视频就会和源视频有较大的延迟,这是不可避免的。

3.部分播放器特性导致

部分开源播放器比如flv.js本身存在特性(bug),使用追帧策略时,跳帧会有明显卡顿,并且画面不连续。
解决方法:更换更好的播放器,不要用flv.js。

(四)带宽不足

1.上行带宽不足

上行是指从用户设备(如电脑、手机)发送数据到互联网或其他网络的过程。在宽带网络中,上行通常用于上传文件、发送电子邮件、进行视频通话等。 上行带宽 不足或网络发生抖动,导致数据发送速率下降,无法达到流畅播放的帧率要求。 推流端在推流 时会源源不断地产生音视频数据,如果推流端的上传网速太小,那么产生的音视频数据都会被堆积在推 流端所在的电脑里传不出去,上传阻塞导致全部观众(全部播放端)的观看体验都很卡顿 。特别是推流 端所在电脑连接了 wifi Wi-Fi 信号受建筑墙体的屏蔽干扰很严重,而一般的建筑很少在装修时考虑好 Wi-Fi 路由器和各个房间的信号衰减问题。可以使用网速测试工具 Speedtest 测试当前网络的上行带宽情 况。
例子:
如下图所示,用Speedtest测到流媒体服务器所在电脑的上传带宽是40.55Mbps
·
但是通过任务管理看到该电脑每秒发送62.2Mbps的数据到互联网上,62.2Mbps > 40.55Mbps,所以就会出现观看视频卡顿现象。
解决方法:
针对上行带宽不足: 向运营商申请更多的带宽; 降低推流码率; 用摄像机的次码流作为输入(相同 环境下,次码流占用的带宽小,具体可进入摄像机配置网页的中调节); 无人观看不取流处理,当没有对应客户端 / 前端播放视频时让推流端 停止对应的推流,从而节约带宽。

2.下行带宽不足

下行是指从互联网或其他网络接收数据到用户设备的过程。在宽带网络中,下行通常用于下载文件、浏览网页、观看视频等。 下行带宽不足,即观众的下载带宽跟不上或者网络波动较大,例如直播流的码率是2Mbps 的,也就是每秒钟有2M 比特的数据流要下载下来,但如果观众端的带宽不够,就会导致观众端播放体验非常卡顿。 下行不佳只会影响当前网络环境下的观众。解决方法与上行带宽不足的解决方法相同。

三、参考

《 【音视频技术】播放器缓冲区管理》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分:FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分:Nginx配置2.1 Nginx安装…

Docker容器化部署若依微服务ruoyi-cloud项目

系统环境 接下来的内容以 Ubuntu 22.04.1 操作系统为例。 下载安装Docker Ubuntu hihi-IdeaCentre-GeekPro-15ICK:~$ sudo su [sudo] hi 的密码: roothi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps 找不到命令 “docker”,但可以通过以下软件包安…

Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线(实例分析)

Visual Studio 使用MFC 单文档工程从创建到实现绘制单一颜色直线和绘制渐变颜色的直线 本文主要从零开始创建一个MFC单文档工程然后逐步实现添加按键(事件响应函数),最后实现单一颜色直线的绘制与渐变色直线的绘制o( ̄▽&#xffe…

【云原生】什么是 Kubernetes ?

什么是 Kubernetes ? Kubernetes 是一个开源容器编排平台,管理着一系列的 主机 或者 服务器,它们被称作是 节点(Node)。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…

2、Burp使用

文章目录 一、为Firefox浏览器安装数字证书二、利用Intruder模块进行暴力破解 一、为Firefox浏览器安装数字证书 &#xff08;1&#xff09;利用Firefox浏览器访问http://burp或127.0.0.1:<监听端口>&#xff0c;点击页面右上侧的“CA Certificate”处下载CA证书&#xf…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人&#xff1f; 当你无法准确的熟悉一个事物的本质时&#xff0c;你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事&#xff0c;那这个人就越可能是一个好人。 数学语言表达…

float和double(浮点型数据)在内存中的储存方法

作者&#xff1a;元清加油 主页&#xff1a;主页 编译环境&#xff1a;visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位&#xff0c;后面便是数值位 那么浮点数在内存中是怎么储存的呢&#xff1f;我们先来看一个例子&am…

Android WiFi的断开分析

1.wifi断开大体流程&#xff1a; 1.wifi断开 wlan-driver最先知道。 2.wlan-driver在与路由器连接的时候(未断开时), 会有周期性的beacon帧来维持连接&#xff0c;AP端一旦遇到突发事情&#xff0c;会立刻通过802.11协议的 deauth 帧/ reject 帧等 通知到 driver。 3. wlan-…

【Java程序员面试专栏 专业技能篇 】Java SE核心面试指引(四):Java新特性

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第四部分:Java新特性,子节点表示追问或同级提问 Java8新特性…

【部署运维】docker:入门到进阶

0 前言 部署运维博客系列一共有三篇&#xff1a; 拥抱开源&#xff0c;将工作中的经验分享出来&#xff0c;尽量避免新手踩坑。 【部署运维】docker&#xff1a;入门到进阶 【部署运维】kubernetes&#xff1a;容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…

快速、精确仿真高频电磁场的工具CST Studio Suite 2024版本下载与安装配置

目录 前言一、CST 2024 安装二、使用配置总结 前言 CST Studio Suite是一个集成的仿真工具套件&#xff0c;用于模拟和优化电子系统的性能。它包括多个工具和模块&#xff0c;如电磁仿真、结构仿真、热仿真、电路分析等&#xff0c;以支持从概念设计到生产部署的整个开发周期。…

Vue19 列表过滤

直接上代码 以下代码使用了两种实现方式&#xff0c;监视属性和计算属性 当能用计算属性实现时&#xff0c;推荐使用计算属性 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>列表过滤</title><script type&q…

阿里元境亮相第八届世界物联网大会,分享元计算对数字文旅的创新赋能

2023&#xff08;第八届&#xff09;世界物联网大会于11月20日在中国北京隆重开幕。联合国秘书长安东尼奥古特雷斯在开幕式发表书面致辞时特别提到&#xff1a;“在一个相互连接的世界&#xff0c;你们的主题‘新物联、新经济、新时代’是数字技术影响力的见证”。 11月21日上午…

Linux系统常用指令大全(图文详解)

目录 前言 一、UNIX的登录与退出 1、登录 &#xff08;1&#xff09;执行格式&#xff1a; &#xff08;2&#xff09;步骤 2、退出 二、UNIX命令格式 三、常用命令 1、目录操作 &#xff08;1&#xff09;显示目录文件 ls &#xff08;2&#xff09;建新目录 …

Android仿 美团 / 饿了么,店铺详情页功能

前言 UI有所不同&#xff0c;但功能差不多&#xff0c;商品添加购物车功能 正在写&#xff0c;写完会提交仓库。 页面主要由&#xff1a;MagicIndicator ViewPager2 Fragment CoordinatorLayout NestedScrollView RecyclerView实现。 效果图一&#xff1a;左右RecyclerV…

微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下 KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,…

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用&#xff0c;BigDecimal格式化&#xff0c;BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…

Linux网络——网络层

目录 一.IP协议&#xff08;IPv4&#xff09; 二.子网划分 三.特殊的IP地址 四.IP地址的数量限制 五.私有IP地址和公网IP地址 六.路由 七.分片 一.IP协议&#xff08;IPv4&#xff09; IP协议&#xff1a;提供一种能力使得数据从一个主机发送到另一个主机的能力。 TCP协…

深度学习第1天:深度学习入门-Keras与典型神经网络结构

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …

JDK、JRE、JVM的特点和关联

Java 的三个重要的概念是 JDK&#xff08;Java Development Kit&#xff09;、JRE&#xff08;Java Runtime Environment&#xff09;和 JVM&#xff08;Java Virtual Machine&#xff09;。它们之间有着密切的关联&#xff0c;同时又有不同的职责和特点。 JDK&#xff08;Java…