当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx-rtmp延迟的原因

    栏目:nginx问题汇总 时间:2018-12-05 11:24

    一、何为延迟
      例如,在12分采集的视频画面到13分才显示。这就是1分钟的延迟
    二、出现延迟的原因
      1.数据滞后
      由于网络等原因,上行推送或者下行转发出现了网络拥塞,音视频数据堆积在socket 缓冲区中。这种延迟只能通过优化网络质量来解决
      2.时间戳错误
      推送端推送的时候,在采集到音视频数据之后,还做了一些类似转码等操作之后,才打时间戳,并推送数据。多线程可以解决此类问题。一个线程进行数据采集,另一个线程进行转码推送操作。这样能够将延迟保持在一定范围内。
      3.推送端cpu负载过高,导致的时间戳打的不准。解决办法,降低编码码率,一般cpu负载到70%以上,gettimeofday统计的时间就会出现一定的误差了。
    三、case案例分析
      一 从服务端分析,排查是否有数据堆积。(一般局域网环境,出现数据堆积的可能性比较小)
      在服务端加日志,看是否有数据堆积。
      参见代码:
      ngx_rtmp_send()函数中,发送rtmp数据的地方可以加上这个日志,以确认,应发与实际发送的数据量是否相等。
      活着可以通过抓包,观察下行发送数据对端的窗口大小是否有不断减小,甚至0窗口。
      也可检查一下这个链表的长度是否为0,来确认是否有数据发送堆积。