nginx-rtmp延迟分析

一 何为延迟

      例如,在12分采集的视频画面到13分才显示。这就是1分钟的延迟

二 出现延迟的原因

     1 数据滞后

             由于网络等原因,上行推送或者下行转发出现了网络拥塞,音视频数据堆积在socket 缓冲区中。这种延迟只能通过优化网络质量来解决

     2 时间戳错误

             推送端推送的时候,在采集到音视频数据之后,还做了一些类似转码等操作之后,才打时间戳,并推送数据。多线程可以解决此类问题。一个线程进行数据采集,另一个线程进行转码推送操作。这样能够将延迟保持在一定范围内。

     3 推送端cpu负载过高,导致的时间戳打的不准。解决办法,降低编码码率,一般cpu负载到70%以上,gettimeofday统计的时间就会出现一定的误差了。

三 case案例分析

    一 从服务端分析,排查是否有数据堆积。(一般局域网环境,出现数据堆积的可能性比较小)

    在服务端加日志,看是否有数据堆积。

参见代码:

ngx_rtmp_send()函数中,发送rtmp数据的地方可以加上这个日志,以确认,应发与实际发送的数据量是否相等。

活着可以通过抓包,观察下行发送数据对端的窗口大小是否有不断减小,甚至0窗口。


也可检查一下这个链表的长度是否为0,来确认是否有数据发送堆积。







阅读更多

没有更多推荐了,返回首页