ffmpeg - HTTP 流式桌面到浏览器的巨大延迟
问题描述
我正在尝试为浏览器解决方案组合一个可靠、相当低(<2s)延迟的桌面窗口共享。目前我有:
使用 FFMPEG 的客户端发送方:
ffmpeg -f gdigrab -i "title=notepad.exe" -r 10 -framerate 10 -c:v libx264 -g 50 -preset fast -tune zerolatency -f rtp rtp://192.168.1.85:1234
服务器使用 VLC 重新流式传输到 HTTP:
vlc -vv test.sdp --sout=#transcode{vcodec=theo,vb=1600,scale=1,channels=1,acodec=none}:http{dst=:8080/webcam.ogg} :no-sout-rtp-sap :no-sout-standard-sap :sout-keep
其中 sdp 文件是从 ffmpeg 命令的输出生成的
客户端浏览器:
<video id="video" autoplay loop muted preload="auto">
<source src="http://192.168.1.85:8080/webcam.ogg" type="video/ogg"/>
</video>
这有效并提供了良好的质量。但是延迟很糟糕(大约 10 秒),我不知道如何调整它。我知道延迟存在于 VLC 转码/重新流式传输中 - 在服务器上显示来自客户端的 RTP 流只有大约 1 秒的延迟。
我想有两个问题 - 这种方法可以合理调整,还是方法一开始就错了?
解决方案
通过 http 的 Sub 2 秒几乎是不可能的。可以减少延迟,但您可能需要更换 http 源软件,将交付切换为分块传输,优化编码管道并管理播放器缓冲区。即使那样,我也怀疑你会达到 2 秒。
推荐阅读
- python-3.x - 用于从 CHARM 导入数据并将其存储在数据库中并用于日常报告和分析的 API 创建
- flask-sqlalchemy - 在 db.model 中添加更多 __bind_key__
- c - c++ - 在多播和使用IPv6时,如何在c++中读取windows下UDP以太网通信的第二层?
- laravel - 代理传递并保留原始域(Nginx,Laravel)
- jquery-select2-4 - 使用 AJAX 时如何设置 Select2(v4) 的初始值?
- sass - 为什么我不能通过 sass 变量来倍增 css 变量?
- java - 读取Tomcat的server.xml中配置的多个Resource
- r - 在数据框中查找另一列 R 中值差异最大的行
- reactjs - React 的 Material UI DataGrid - Firebase 更新
- sonarqube - 引起:java.nio.file.AccessDeniedException:/opt/some_user/sonarqube-7.9.1/temp/conf/es/elasticsearch.yml