V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Orciorc
V2EX  ›  问与答

树莓派使用 ffmpeg+rtmp 推流直播,延迟严重

  •  
  •   Orciorc · 2021-01-15 00:52:52 +08:00 · 1130 次点击
    这是一个创建于 1433 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 设备:树莓派 4B 4GB 版本
    • 系统:RaspberryPi OS ( Linux Kernel 5.4.83-v71 )
    • 摄像头:海康威视 USB 1080P
    • 网络环境:千兆局域网

    具体描述:树莓派安装SRS,ffmpeg,使用 ffmpeg 作为客户端推流到树莓派本地 nginx 服务器,使用 iPad 上的 VLC 播放器拉 RTMP 流,在 Windows 上使用 Potplayer 拉 RTMP 流,延迟在 5 ~ 7s,反复调试均无改善。

    使用过的命令行:

    • ffmpeg -i /dev/video0 -r 25 -video_size 1920x1080 -vcodec h264_omx -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live
    • ffmpeg -i /dev/video0 -r 25 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live
    • ffmpeg -i /dev/video0 -r 15 -s 1280x720 -preset:v ultrafast -vcodec h264_omx -f flv rtmp://127.0.0.1:1935/live/livestream
    • ffmpeg -re -threads 1 -max_delay 500000 -i /dev/video0 -c:v libx264 -b:v 350k -level 3.0 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -preset ultrafast -tune zerolatency -vcodec h264 -f flv -an rtmp://127.0.0.1/live/192168322

    延迟均较大( 5 ~ 10s ),反复调试无效,请教 v 友!

    11 条回复    2021-01-15 15:43:55 +08:00
    nanfour
        1
    nanfour  
       2021-01-15 01:04:32 +08:00 via Android
    换 monibuca,感觉效果好一些。
    Orciorc
        2
    Orciorc  
    OP
       2021-01-15 01:07:12 +08:00
    @nanfour #1 感谢,近期测试一下
    ReZer0
        3
    ReZer0  
       2021-01-15 08:49:24 +08:00
    如果你对于你的网络环境有自信的话,可以找找这两个参数。
    hls_fragment ;
    hls_playlist_length;
    把数字设置得越小延迟越小,但依赖于网络稳定性。
    cpstar
        4
    cpstar  
       2021-01-15 09:12:43 +08:00
    我朋友用的方案是 webrtc
    Orciorc
        5
    Orciorc  
    OP
       2021-01-15 11:06:22 +08:00 via Android
    @ReZer0 尝试调过第一个,无改善
    ReZer0
        6
    ReZer0  
       2021-01-15 11:54:56 +08:00
    @Orciorc 如果你是本地内网测试,这两个参数可以设置成 1 、2 试试。
    Lax
        7
    Lax  
       2021-01-15 13:38:14 +08:00
    SRS 和 Nginx 功能重合了吧,这里分别是做什么功能的?如果推流和播放都是 RTMP 协议,楼上提到的 HLS 参数应该是无关的
    tms
        8
    tms  
       2021-01-15 14:09:11 +08:00 via Android
    正常 rtmp 无专门调优的情况下就是在 5-10s,需要更小延迟可以考虑其他协议。
    Orciorc
        9
    Orciorc  
    OP
       2021-01-15 14:31:26 +08:00 via Android
    @Lax 是的,SRS 所集成的 rtmp 也是基于 nginx 的,我两个都进行测试(即使用 srs 自带的 nginx,以及自己安装 nginx+rtmp 模块),但都是延迟很大。
    Orciorc
        10
    Orciorc  
    OP
       2021-01-15 14:31:52 +08:00 via Android
    @tms 有哪些比较容易实现的吗?请赐教
    tms
        11
    tms  
       2021-01-15 15:43:55 +08:00
    @Orciorc
    如果用 rtmp 协议的话可以优化到 1-3 秒,需要推流端参数和播放端共同优化,推流端也就是 gop 和 preset 还有 tune 基本你都试过了,播放端得把播放器的首屏延迟和 buffer 调教的比较好,rtmp 可以优化到 1-3 秒。
    其他的话开源的像 webrtc 和 srt 协议也可以试试,还有一些私有的 udp 协议等,都可以做到一秒以内。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:14 · PVG 19:14 · LAX 03:14 · JFK 06:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.