zoukankan      html  css  js  c++  java
  • srt知识梳理

    • 在这里插入图片描述
    • rtmp 自己有三次握手,tcp有三次握手
    • 一个建立连接完成,要9 次会话的来回,才能完成建连接
    • 移动互联网,用手机比较难
    • rtmp 完全依赖于 tcp
    • 不能提供带宽自适应算法
    • quic vs srt 都可以

    在这里插入图片描述

    • 有ack
    • 有ack的ack
    • 有nack
      • 基于时间报文发送和接收
    • rtt
    • inflight 就是报文发出去,但是还没收到ack
      • 在 应用层,就是编码层做带宽自适应的算法

    编码器厂商发明的在这里插入图片描述

    • encoer 加大 send buffer 以及 internet 和 decoder 部分都叫做通道
    • 其编码出来的是什么样的曲线,保证其在接收过程也是什么曲线,这样使得internet部分变得透明
    • 怎么实现?
    • 堆sender ,按照编码器编码出来的时间顺序 做发送
    • receiver buffer ,解码出来平滑

    一般的传输:

    • 建立连接,快速连接
    • 基于连接,怎么做丢包重传
    • 丢包重传基础做拥塞控制

    在这里插入图片描述

    • srt 交互过程只有2次,大幅度提升建连过程
    • 1 建连 2. 传输 3. 结束

    报文

    • 数据报文和控制报文

    • UDP + UDT + data

    • sequence 31bit ,2的31次方,有生之间不会翻转

    • FF 报文位置

    • KK 加密

    • O 有序

    • Dest Socket ID 这个是srt自己定义的socket id ,不是系统的

    • 结构很简单
      在这里插入图片描述

    控制报文

    • ACK ACKACK 是丢包重传报文

    在这里插入图片描述

    常规的SRT发送图

    • 编码器 把报文放send buffer
    • send buffer 按照编码器输出的时间顺序,严格发送出去
    • 接收端
      • 延迟window,严格按照时间戳返回给 app


    • -在这里插入图片描述

    丢包重传

    • ack 机制,常用
    • 收到5个报文,发一个ack 回去
    • 发送者收到ack,移除这五个报文

    在这里插入图片描述

    • 第一个图:
    • 接收者发送给发送者 ack
    • 发送者收到ack,通过计算,发送ackack 给接收者
    • 通过rtt 获取 网络质量情况
    • rtt 越高,证明延迟越大
    • rtt是个实时变化的值
    • -在这里插入图片描述

    ack 控制报文

      • 每10 毫秒发送一个rtt,频率高
      • 发送端拿到rtt后就知道网络质量
      • rtt的变化情况
      • 可用buffer,传文件需要
      • 现在接收包的收包数目,与直播有关
    • bps ,收包的比特率

    • 在这里插入图片描述

    • 以上三个数据直观反映 网络状况

    • rec buffer 接收端 缓存情况

    • recv bitrate 当前时刻接收的码率情况

    • -在这里插入图片描述

    • -quic 只有ack 方式

      • webrtc的rtp rtcp 只用 nack
    • -srt 支持 ack nack ,目的是 强势抢占带宽

      • ack 代表包收到了,也可能ack包会丢失
        – nack 周期发送,可能会造成发送者多发报文
    • 在这里插入图片描述

    • srt 在丢包时,重传比其他协议更多,抢占带宽

    按照时间发送

    • 编码器按照时间发送 == 按照编码器的编码速度发送

    srt 可配置

    -在这里插入图片描述

    • srt 发送策略
    • 在这里插入图片描述
      • 编码器的输入带宽
      • 编码器的最大带宽
    • =- 编码器过载率加粗样式**
    • smpinpbw 实际测试出的编码bitrate

    -在这里插入图片描述

    -如果配置,按照配置来,

    • 如果没配置,按照实际的编码的比特率来。
    • 如果不配置,如互联网,一般是不配置。所以常规是中间算法:
    • 在这里插入图片描述
    • 实际的 * 1.25 bps
      -如果实际是1k,那么就是1250 bps

    拥塞控制

    拥塞避免


    • 比如带宽变化,接收端 1000k 变 900,少了10%,带宽变窄了,导致丢包
      • 如果现在发送量是1.1M, 带宽变的更差,
    • -1.1M -900 , 少了200k,导致网络崩溃在这里插入图片描述

    — 仅仅使用丢包重传,无法解决网络拥塞
    – 怎么办?

    • 限号。治堵。

    • SRT 的用拥塞控制代码简单:

    • 接收方的缓存大小,接收方是否够收

    • 1秒内发送来的数据 / (rtt + 10 ) ,因为检测周期是10

    • 1个rtt 已经发出的东西,一个rtt时间段内,已经发出去的数据是多少。

    • 直播中不会出现接收方缓冲不够用的情况

    • 传文件才会存在

    • 在这里插入图片描述

    • 只要大,就发

    • 在这里插入图片描述

    • 大佬说,拥塞控制太简单,有bw,rtt 完全可以用bbr。

     

    • 2个包,握手和capbility
      -在这里插入图片描述
    • ack ackack 很好
    • 提供的信息很丰富
    • 在这里插入图片描述
    • 带宽占用大 ,随着丢包率高,占用更大
    • 按照编码器编码出来的实际的bitrate 来发送。
      -

    srs4

    • 自适应srt 编码方案,针对拥塞控制的提升
    • 在这里插入图片描述

    -在这里插入图片描述

    -在这里插入图片描述

    • 编码器到 边缘节点这段。
    • 提高源流质量,
    • 对 编码器和解码器 最后一公里推流很适合。
    • SRT 不是自适应的。
    • SRT 要求先知道 RTT --》 延迟 , 出口带宽 BW

    互联网 不容忍预先测量

    • 推流节点到边缘节点
    • 配置参数,rtt 有限带宽 ,然后根据算法计算 latency ,sendbuffer和 出口带宽。
    • 并非所有问题都在传输层解决
      -在这里插入图片描述

    -在这里插入图片描述

    • 简单推流配置
      -在这里插入图片描述
    • vhost 虚拟主机

    -在这里插入图片描述

    -在这里插入图片描述

    -在这里插入图片描述

    -在这里插入图片描述

    • 拥塞控制 拥塞避免算法,
    • 丢包率20% 带宽变为12M了!!

    -在这里插入图片描述

    • 预测 带宽
    • 调整编码比特率
    • 从而拥塞避免
    • 动态自适应
    • GCC
      -在这里插入图片描述

    -在这里插入图片描述

    • DELAY是导数,看变化率
    • 在这里插入图片描述
    • 卡门滤波,预估下一次网络带宽
    • -在这里插入图片描述
      • 把这个变为bbr的预测算法,而不需要在接收端实现
    • -在这里插入图片描述
    • -在这里插入图片描述
      • 1 s 内找到一个rtt 最小值
      • 1s 内找一个 最大的发送的bitrate
    • inflight 发出了报文但是没有收到ack的报文的字节数目,报文还在漂在网络中
      • 1个 rtt内 最大的发送字节数
    • -在这里插入图片描述
    • 在这里插入图片描述

    -传输层,bbr 会不发:

    • 在这里插入图片描述
    • 1.2 和 0.8 是buffer ,0.8到1.2之间是保持不变 。
    • 用bbr 应该是不发:
      -在这里插入图片描述
    • 这里为啥是减少btrate?
    • bbr是放缓存,不发
    • 不发 用塞避免了
    • 但是编码器 buffer 满了,不发就是丢包。
    • 长时间丢包照样会花瓶。
    • 编码率大于了网络带宽的有效值
    • 通用编码器
    • 在这里插入图片描述

    -降低bitrate,会降低画面质量,但不会改变分辨率

    -在这里插入图片描述

    • 只降低编码器推流带宽 最后一公里的带宽
    • 美国节点,推流到杭州
      -在这里插入图片描述
    • 1M 带宽

    -在这里插入图片描述

    • 没有上面的问题。大佬说。

    -FEC 是丢包回复,不是拥塞控制的

    QUIC

    -在这里插入图片描述

    -在这里插入图片描述

    -在这里插入图片描述

    • QUIC 不包括udp ip 头,有50个字节,加上udp ip 有七八十个,一个包才1366个字节。很亏?
    • -QUIC 非常适合长距离传输
    • 视频会议适合webrtc
    • srt适合直播
    • SRT的参数有可以调节的,有不变的

    -在这里插入图片描述

    • 视频卡顿与 接收方的缓存有关
      • QUIC 是面向连接的,没有ack会断开。
        -在这里插入图片描述
    • webrtc 视频回宜
    • 动态编码 自适应编码
    • 低延迟
    • 端上音视频同步
      • 端上带宽预估
      • OBS已经支持SRT
    • SRT 传TS,比较整齐,非常有利于做基于时间的发送。

    -推流用SRT,播放用RTMP

  • 相关阅读:
    java中Objenesis库简单使用
    java魔法类之ReflectionFactory介绍
    求与一个数最接近的2的N次幂
    java魔法类之Unsafe介绍
    java中如何通过程序检测线程死锁
    jQuery.fullpage自定义高度(demo详解)
    angular diretive中 compile controller link的区分及编译顺序
    div水平垂直居中的几种方法(面试问题)
    angular 双ng-repeat显示隐藏
    快速应用rem
  • 原文地址:https://www.cnblogs.com/lidabo/p/14807413.html
Copyright © 2011-2022 走看看