当前位置: 首页 > news >正文

RTMP、RTSP直播播放器的低延迟设计探讨

技术背景

没有多少开发者会相信RTMP或RTSP播放器,延迟会做到150-300ms内,除非测试过大牛直播SDK的,以Android平台启动轻量级RTSP服务和推送RTMP,然后Windows分别播放RTSP和RTMP为例,整体延迟如下:

大牛直播 SDK在保证超低延迟方面采取了多项技术措施。首先,其自有框架易于扩展,采用自适应算法,使得延迟更低、解码绘制效率更高。以 Windows 平台为例,海康摄像头 2560*1440 分辨率、8M 码率的 RTSP 流,SmartPlayer 延迟 200 毫秒左右,可满足平衡操控等低延迟场景。低延迟模式下,硬件性能无瓶颈的前提下,延迟可稳定在 150-300ms。

此外,大牛直播 SDK 的 RTSP 播放器支持 TCP 和 UDP 模式的自动切换,提高了播放的兼容性和灵活性,能够更好地适应不同的网络环境,减少延迟。同时,支持设置缓冲时间,以应对网络抖动等不稳定情况,确保播放的流畅性,在保证流畅性的同时也有助于控制延迟。

在技术实现上,底层原生模块把 RTSP|RTMP 流拉过来,做解析解码回调 YUV 或 RGB 数据到上层,在每个环节都做到极致,总体延迟可以达到 200 - 400ms。并且支持多实例播放,适用于需要同时监控多个视频源的场景,满足不同用户需求的同时也保证了低延迟性能。

如何设计低延迟的直播播放器

大牛直播 SDK 通过自有框架、自适应算法、协议自动切换、缓冲时间设置以及优化的技术实现等多方面措施,保证了超低延迟的播放效果。

自有框架如何降低延迟

大牛直播SDK的自有框架在降低延迟方面表现出色。它易于扩展,能够根据不同的应用场景进行灵活调整。这种自有框架在设计之初就以降低延迟为重要目标,通过优化各个模块之间的协作,提高数据处理效率。例如,在 RTMP 或 RTSP 直播播放器的设计中,从数据解析、解码、音视频数据同步到绘制等环节,自有框架能够确保数据传输的高效性,减少不必要的等待时间。同时,自有框架还能自适应不同的网络环境和硬件条件,自动调整参数以达到最佳的延迟效果。比如在网络状况不佳时,能够自动降低码率以保证流畅播放,同时尽量减少延迟的增加。此外,自有框架还通过优化内部算法,提高数据处理速度,进一步降低延迟。例如在解码过程中,采用高效的解码算法,充分利用硬件加速功能,如 GPU 加速,以快速处理大量的音视频数据。

自适应算法如何实现

大牛直播SDK的自适应算法是实现超低延迟的关键之一。该算法能够根据网络状况动态调整码率,确保直播服务的流畅性。例如,当网络带宽充足时,自适应算法会提高码率,以提供更高质量的视频画面;而当网络带宽受限或出现波动时,算法会自动降低码率,以减少数据传输量,保证视频的流畅播放,同时降低延迟。此外,自适应算法还能根据不同的硬件性能进行调整。如果硬件性能强大,算法会充分利用硬件资源,提高数据处理速度,进一步降低延迟;如果硬件性能有限,算法会自动优化参数,以确保在不影响播放质量的前提下,尽量降低延迟。在实际应用中,自适应算法会不断监测网络状况和硬件性能,并实时调整参数,以实现最佳的延迟效果。

RTSP播放器协议自动切换作用

大牛直播SDK的RTSP播放器支持 TCP 和 UDP 模式的自动切换,这在控制延迟方面起到了重要作用。不同的服务器可能支持不同的传输协议,自动切换功能可以提高播放的兼容性和灵活性。例如,在某些网络环境下,UDP 协议可能具有更低的延迟,但稳定性相对较差;而 TCP 协议则更加稳定,但延迟可能会稍高一些。通过自动切换功能,播放器可以根据实际情况选择最合适的传输协议,以达到平衡延迟和稳定性的目的。当网络状况良好时,播放器可以自动切换到 UDP 模式,以降低延迟;当网络出现抖动或不稳定时,播放器会自动切换到 TCP 模式,以保证播放的稳定性。这种自动切换功能使得播放器能够在不同的网络环境下都能保持较好的性能,为用户提供低延迟的播放体验。

缓冲时间设置如何控制延迟

大牛直播SDK支持设置缓冲时间,这是控制延迟的一个重要手段。缓冲时间的设置可以应对网络抖动等不稳定情况,确保播放的流畅性。如果缓冲时间设置得过长,虽然可以更好地应对网络波动,但会增加延迟;如果设置得过短,可能会导致播放卡顿。因此,合理设置缓冲时间是关键。例如,在网络状况较为稳定的情况下,可以适当缩短缓冲时间,以降低延迟;而在网络状况较差或不稳定时,可以适当增加缓冲时间,以保证播放的流畅性。同时,大牛直播 sdk 还会根据网络状况自动调整缓冲时间,以实现最佳的延迟和流畅性平衡。例如,当网络出现抖动时,自动增加缓冲时间,以避免播放卡顿;当网络恢复稳定时,逐渐减少缓冲时间,以降低延迟。

底层原生模块如何优化延迟

底层原生模块在优化延迟方面发挥了重要作用。以 Android 平台为例,原生模块拿到 RTSP 或 RTSP 流后,解码获取到原始的 YUV 或 RGB 数据,然后投递给上层应用。在这个过程中,为了降低延迟,原生模块会尽可能高效率地进行数据交互,减少数据的投递和拷贝。例如,采用优化的数据传输算法,确保数据能够快速、准确地传递到上层应用。同时,底层原生模块还会与上层应用进行紧密配合,根据不同的应用场景和需求进行优化。例如,在 VR 头显播放场景下,为了实现毫秒级延迟的播放,底层原生模块会与 Unity 进行高效的数据交互,确保数据能够快速绘制,减少延迟。此外,底层原生模块还会不断进行优化和改进,以适应不断变化的硬件和网络环境,为用户提供更低延迟的播放体验。

总结

做RTMP、RTSP播放器容易,做个好的播放器,真的要投入几十倍的精力,大牛直播SDK始于2015年,通过自有框架、自适应算法、RTSP 播放器协议自动切换、缓冲时间设置以及底层原生模块等多方面的优化,共同保证了超低延迟的播放体验。在实际应用中,这些技术手段相互配合,根据不同的网络环境和硬件条件进行自动调整,为用户提供了高质量、低延迟的直播服务。

相关文章:

  • 搬砖6、Python函数和模块的使用
  • python股票因子,交易所服务器宕机,量化交易程序怎么应对
  • 【分布式微服务云原生】8分钟掌握微服务通信的艺术:Dubbo与OpenFeign全面解析
  • 56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
  • 内部类基础
  • 08-Registry搭建docker私仓
  • Eureka注册中心如何实现集群
  • Python/大数据/机器识别毕业设计选题题目推荐
  • Java研学-BootStrapTable插件
  • 监控和日志管理:深入了解Nagios、Zabbix和Prometheus
  • 【CSS】盒子模型
  • Vue 之组件插槽Slot用法(组件间通信一种方式)
  • 基于NXP LS1046+FPGA的轨道交通3U CPCI多网口解决方案,支持QNX/VXWOKRS/LINUX
  • ERP系统委外工单管理
  • Hive ROW_NUMBER() 简介
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CODING 缺陷管理功能正式开始公测
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java到底能干嘛?
  • Linux各目录及每个目录的详细介绍
  • oldjun 检测网站的经验
  • Spring Boot快速入门(一):Hello Spring Boot
  • 编写高质量JavaScript代码之并发
  • 给新手的新浪微博 SDK 集成教程【一】
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何进阶一名有竞争力的程序员?
  • 回归生活:清理微信公众号
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Java基础复习笔记 第16章:网络编程
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (11)iptables-仅开放指定ip访问指定端口
  • (11)MSP430F5529 定时器B
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (BFS)hdoj2377-Bus Pass
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (五)Python 垃圾回收机制
  • (已解决)什么是vue导航守卫
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)winform之ListView
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 使用 XPath 来读写 XML 文件
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net插件开发开源框架
  • .NET运行机制
  • .NET周刊【7月第4期 2024-07-28】
  • .stream().map与.stream().flatMap的使用