BigPig0 / RelayLive

视频服务中继,转换传输协议。将rtsp、gb28181转为html5可以直接播放的协议。
175 stars 76 forks source link

降低延时 #1

Closed 823639792 closed 5 years ago

823639792 commented 5 years ago

非常感谢作者分享代码。 经过一番尝试,程序终于在自己电脑上跑起来了。 测试了下,延时大约有3s。 不知道有没有办法降低延时呢? 我见到有闭源程序,httpflv实现几百毫秒的延时。 不知道延时是哪里引起的呢?

看到这篇文章 https://www.cnblogs.com/programmer-wfq/p/7281894.html#4247204 据说做到了几百毫秒的延时,没弄明白怎么做到的

BigPig0 commented 5 years ago
  1. flv.cpp里面有个CFlv::MakeVideo方法,里面有两处m_fCB的地方,其中一处是注释掉的。前一处是每收到一个关键帧,将之前缓存的数据上抛,这必然导致延时。后一处是每收到一帧数据立即把数据上抛,但这导致频繁调用socket发送。这两处只能打开一处。
  2. rtp接收解包有可以优化的地方,特别是丢帧时,暂时没精力处理 3.flv.js播放有延时,并且延时会逐渐增大,其他通过mse的方式播放也有这种问题。nodeplay能够播放最新图像,我和下级平台自己的客户端比较过,相差不到1s(1里面那个地方使用低延时方法)。
BigPig0 commented 5 years ago

非常感谢作者分享代码。 经过一番尝试,程序终于在自己电脑上跑起来了。 测试了下,延时大约有3s。 不知道有没有办法降低延时呢? 我见到有闭源程序,httpflv实现几百毫秒的延时。 不知道延时是哪里引起的呢?

看到这篇文章 https://www.cnblogs.com/programmer-wfq/p/7281894.html#4247204 据说做到了几百毫秒的延时,没弄明白怎么做到的

感谢你提供的资料,很有用处,特别是前端直接播放fmp4或者h264应该是更好的方式,如果你有自己实现mse的方法,希望能提供一下。wfs.js我没有成功用起来,也在找前端的小伙伴帮忙研究。

823639792 commented 5 years ago

实在抱歉,我最近才接触到GB28181和音视频流媒体,只是从宏观上对整个流程和各种技术有了一些了解,涉及到细节和具体实现就无能为力了- -! 。

823639792 commented 5 years ago

发现一个修改CFlv::MakeVideo函数的后遗症,就是同时打开一个视频源,第一个打开的没事,后边打开的首屏出现的速度非常慢,大概七八秒的样子,大概是什么原因呢?

BigPig0 commented 5 years ago

不需要转码时的延时已经解决