最后一公里:从直播拉流读懂直播链路_首包和首帧-程序员宅基地

技术标签: 实时音视频  音视频  视频  视频编解码  

前言


直播是一个庞大而复杂的业务形态,一个优秀的直播系统涉及众多团队的共同协作,有非常完整的直播链路。

那么,直播链路中都有哪些角色?这些角色要解决的是哪些问题?要优化某个环节时需要哪些角色的配合?这些角色优化链路的手段有哪些?……

想要厘清这些问题,对直播全链路接触比较少的同学无疑要花费大量的时间才能完成。本文将从直播拉流切入,力求帮助有兴趣的同学简单明了而全面地理解整个直播链路。

为什么直播拉流是“最后一公里”


从整个直播链路来看,直播拉流作为直播内容触达观众的最后一个环节,从客观现实上来说,就是直播链路的“最后一公里”。

直播拉流作为整个直播链路的“最后一公里”,链路上任何一个前置环节出现问题,都会在拉流过程中体现出来。通过分析、理解拉流过程中产生的各类问题,会是理解直播链路最有效的方式之一。

作为直播内容消费的关键环节,如何优化这“最后一公里”上的各类体验,是每个直播从业人员不断探索的问题,从直播拉流理解怎么做好直播无疑是一个好的选择。

从直播业务理解直播链路


在这里插入图片描述

上图所示是从业务层面看到的一次直播观播过程,也是对直播拉流的一个高度简化。麻雀虽小,但五脏俱全,图中显式或隐式地涵盖了整个直播链路几乎所有关键角色和流程。

直播链路上的关键角色

客户端

客户端中囊括了直播链路中多个 SDK,包括直播中台 SDK、直播推流 SDK,以及直播拉流 SDK。

  • 直播中台 SDK
    • 直播中台 SDK 封装直播间内的所有业务逻辑,能够串联流调度与推拉流 SDK,给推拉流 SDK 提供日志上报、配置下发能力。
  • 直播推流 SDK
    • 直播推流 SDK 作为提供给中台 SDK 的封装层,提供采集、编码、推流、连麦等能力,响应流调度下发的各种配置,例如推流分辨率、码率、编码方式等端上能力,完成推流过程中各类日志信息的采集并上报至中台 SDK。
  • 直播拉流 SDK
    • 直播拉流 SDK 作为提供给中台 SDK 的封装层,提供直播拉流相关能力,同时封装了超分、音量均衡等功能,响应流调度、settings 下发的配置,例如是否开启硬解等端上能力,并完成拉流过程中各类日志信息的采集并上报至中台 SDK。

CDN

CDN 全称是 Content Delivery Network,即内容分发网络。CDN 的核心任务是使内容传输的更快、更稳定。

整个直播系统中,源站提供了鉴权、转码、回调、禁播等能力。CDN 通过边缘节点,在客户端和源站之间增加一层缓存,请求过的数据会在边缘节点缓存一段时间。

动态请求内容会直接回源拉取,CDN 优化整个传输链路,解决跨网访问、传输拥塞等问题。

流调度

流调度主要处理与直播流管理相关的任务,内部封装了多家 CDN 供应商,屏蔽了不同 CDN 的细节区别。满足大规模的直播内容分发需求,同时保证了服务的高可用性。提供完整的解决方案,方便业务方快速接入直播业务。

关键流程

直播数据流

直播内容从生产到消费主要涉及到推流端CDN (源站、边缘节点) 以及拉流端,如图中实箭头所示即为直播数据流方向,其中:

  • 在推流端,推流 SDK 完成了主播的音视频采集,添加美颜、滤镜后,需要经过编码、封装,最终按照指定地址,向 CDN 边缘节点推流;
  • 收流边缘节点在被动收到用户的推流请求后,这个节点会主动地将这个流转推(中继)到上层节点,上层节点经过同样的过程,最终将源流转推到源站;
  • 源站内部会进一步地将源流转推至其他集群完成转码、录制等任务;
  • 在拉流端,拉流 SDK 会根据流地址向 CDN 边缘节点拉流,此时根据这路流在该节点上的缓存命中情况,出现两种结果:
    • 如果命中缓存,则边缘节点将直接返回缓存数据;
    • 如果未命中缓存,边缘节点将逐级进行回源,最终将流数据返回边缘节点,最终返回播放器。

词语释义:

  • 源流:推流端推出的那路流。
  • 转码</
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhaoxinyao9/article/details/126467506

智能推荐

Linux 有vs,Linux VS Windows-程序员宅基地

文章浏览阅读284次。从程序员的角度看linux和windows的对比:一 系统架构的对比1 内核(1) 内核的弹性内核内核的弹性linux的内核表现出了高度的可配置性和独立性,主要是完成:io驱动设备管理,tcp/ip,以及任务调度.linux的标准内核发布版本有40~50mb,而我现在在一些评估板上试验的嵌入式linux系统(使用arm或m68k系列的cpu)只用到了2mb,同样实现了网络功能和完整的任务调度,这使..._linux和vs的区别

【Python】np.expand_dims()理解及实践-程序员宅基地

文章浏览阅读5k次,点赞12次,收藏34次。详细记录用法,清晰明了!np.expand_dims(a, axis = 0 )np.expand_dims(a, axis = 1 )np.expand_dims(a, axis = 2 )np.expand_dims(a, axis = 3 )np.expand_dims(a, axis = -1 )_np.expand

洛谷p1070道路游戏-程序员宅基地

文章浏览阅读62次。看到题目描述立马蒙了,怎么废话怎么多??不愧是普及组最后一题啊其实本题不难,理好思路就行了,dp【i】指到了第i个单位时间时最大收益,外层循环时间m,内层枚举起点,再枚举该机器人行走的时间dp[i]=max(dp[i],dp[i-k]+该时间内总获得的金钱-买机器人时的花费) 1 #include<bits/stdc++.h> 2 #define maxn 1010..._p1070 [noip2009 普及组] 道路游戏提交15.53k通过5.56k时间限制1.00s内存限制125.

什么是localhost(127.0.0.1)?-程序员宅基地

文章浏览阅读3.8w次,点赞20次,收藏67次。什么是本地主机?当您在计算机上 ping IP地址时,您尝试联系互联网上的另一台计算机,但是当你ping IP地址127.0.0.1时,ni正在与本地主机通信。localhost 始终是你自己的计算机。当你呼叫本地主机时,你的计算机正在通话。你的计算机并不总是直接识别本地主机。在你的个人网络中,localhost有一个单独的IP地址,如192.168.0.1。(大多数情况下),与你在互联网上使用..._localhost

kafka报错解决:Broker may not be avaliable-程序员宅基地

文章浏览阅读4.9k次。把所有需要修改的ip修改一致,如果用localhost都用localhost,如果用本地IP都用本地IP。关键修改的配置文件kafka/config/server.properties# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreemen..._kafka broker may not available

用Android Studio编写简易闹钟(一)_android studio 闹钟-程序员宅基地

文章浏览阅读1.7w次,点赞28次,收藏215次。一、闹钟功能的介绍以及界面的展示 该闹钟是根据我们手机闹钟设计的一个简单的闹钟APP,其中包含时钟、闹钟、秒表和计时器功能。用户可以对闹钟添加和删除,可以对秒表计时、暂停和重置,对计时器可以暂停、计时、继续和重置等功能。 下图为闹钟的时钟功能..._android studio 闹钟

随便推点

Flutter报错 - command not found: flutter-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏3次。1 、执行:【open ~/.zshrc 】open ~/.zshrc2 、如果 提示文件不存在,则执行:【vim ~/.zshrc 】新建一个新文件。vim ~/.zshrc3 、再执行【open ~/.bash_profile 】open ~/.bash_profile4 、把 bash_profile 中的内容copy到 zshrc 文件中,保存:【:wq回车】。export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER__command not found: flutter

Python + selenium 实现UI自动--记事本1-程序员宅基地

文章浏览阅读160次。第一次写博客,自己其实是一知半懂,写下来便于记录自己学习的过程,便于以后回顾温习,有许多不完善的地方,也遇到了许多的问题,希望大神们多多指教 1.环境: Python3 +Selenium2+Pyunit+Chrome 2.主要实现 1.登入,2异常截图,3生成报表,4发送邮件 ..._python用ui按钮打开记事本

【闭包】什么是闭包-程序员宅基地

文章浏览阅读4.7k次,点赞4次,收藏22次。JavaScript闭包的介绍_什么是闭包

获利能力分析COPA_sap message ki 249-程序员宅基地

文章浏览阅读668次。1、针对MIGO类的,移动类型不为为221的。 DATA: LT_COPADATA LIKE COPADATA OCCURS 0 WITH HEADER LINE, LS_COBL_TMP LIKE COBL. REFRESH LT_COPADATA. LT_COPADATA-FNAM = 'PRCTR'. APPEND LT_COPADATA. CLEAR LT_COPADATA. LT_COPADATA-FNAM = 'GSBER'. APPEND_sap message ki 249

Brian W.Kernighan-程序员宅基地

文章浏览阅读93次。贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,包括《The Elements of Programming Style》、《The Practice of Programming》、《The UNIX Programming Environment》、《The AWK L..._朝阳水野所有作品中文

web前端开发技术储久良第四版实验3答案整理_web前端开发技术实验与实践第四版答案-程序员宅基地

文章浏览阅读1.8k次,点赞7次,收藏19次。【代码】web前端开发技术储久良第四版实验答案整理。_web前端开发技术实验与实践第四版答案

推荐文章

热门文章

相关标签