gpt4 book ai didi

ffmpeg - 实时直播 - RPI FFmpeg 和 H5 播放器

转载 作者:行者123 更新时间:2023-12-04 23:01:14 24 4
gpt4 key购买 nike

我在一家远程医疗公司工作,我们正在使用连接的医疗设备,以便为医生提供来自这些设备的实时信息,这些设备由训练有素的健康专业人员使用。
这些设备可以处理视频和音频。现在,我们将它们与 peerjs 一起使用(所以点对点连接),但我们正试图摆脱这种情况,并拥有一个 RPI,他唯一的工作就是流式传输数据(所以流式传输音频和视频)。
因为这些设备应该在医生的指导下使用,所以我们需要医生实时接收数据。
但我们也需要训练有素的卫生专业人员来看看他在做什么(所以我们需要从设备获取本地信息)
我们如何捕捉音频和视频
我们将 ffmpeg 与一个 go 客户端一起使用,该客户端负责管理 ffmpeg 客户端并将它们流式传输到 SRS 服务器。
这可行,但我们在流式传输数据时有 2-3 秒的延迟。 (来自前端的ffmpeg和flv的rtmp)
ffmpeg 设置:

("ffmpeg", "-f", "v4l2", `-i`, "*/video0", "-f", "flv", "-vcodec", "libx264", "-x264opts", "keyint=15", "-preset", "ultrafast", "-tune", "zerolatency", "-fflags", "nobuffer", "-b:a", "160k", "-threads", "0", "-g", "0", "rtmp://srs-url")
我的问题
  • 有没有办法让这种设置实现低延迟(<1 秒)(对于护士和医生)?
  • 我想达到这个目的的方式好吗?有击球手的方法吗?

  • 流模式
    数据交换和用例流程:
    Data exchange and use case flow

    Note: The nurse and doctor use HTTP-FLV to play the live stream, for low latency.

    最佳答案

    在您的场景中,延迟由两部分引入:

  • FFmpeg in RPI的音视频编码.
  • 消费和摄取直播流的播放器。

  • RPI 中的 FFmpeg
    我注意到你已经设置了一些参数,你可以通过 ffmpeg --help full 看到完整的帮助检查这些参数。 keyint等于 -g , 所以请删除 keyint ,并设置 fps( -r)。请设置 -r 15 -g 15将 gop 设置为 1s 或 15fps:
    -g <int> set the group of picture (GOP) size (from INT_MIN to INT_MAX) (default 12)
    -r rate set frame rate (Hz value, fraction or abbreviation)
    x264 选项 presettune对低延迟有用,但还需要另外设置一个 profile关闭 bframe。请设置为 -profile baseline -preset ultrafast -tune zerolatency为了降低延迟:
    -preset <string> Set the encoding preset (cf. x264 --fullhelp) (default "medium")
    -tune <string> Tune the encoding params (cf. x264 --fullhelp)
    -profile <string> Set profile restrictions (cf. x264 --fullhelp)
    你设置错了 -fflags nobuffer这是解码器(播放器),而不是你应该使用 -fflags flush_packets对于编码器:
    -fflags <flags> (default autobsf)
    flush_packets E.......... reduce the latency by flushing out packets immediately
    nobuffer .D......... reduce the latency introduced by optional buffering

    Note that the E means encoder while D means decoder/player.


    FFmpeg 的 cli,请转换为您的参数:
    -vcodec libx264 \
    -r 15 -g 15 \
    -profile baseline -preset ultrafast -tune zerolatency \
    -fflags flush_packets
    但是,我认为这些设置仅在您更改播放器设置时才有效,因为瓶颈现在在播放器中(延迟 1~3s)。
    播放器
    对于 HTTP-FLV,请使用 conf/realtime.conf对于 SRS 服务器,请使用 ffplay测试延迟:
    ffplay -fflags nobuffer -flags low_delay -i "http://your_server/live/stream.flv"
    我认为延迟应该<1s,优于使用MSE的H5播放器。您可以比较它们的延迟。
    但是,您不能让您的用户使用 ffplay,它只是用于开发的测试。所以我们必须使用低延迟的H5播放器,即WebRTC。
    请使用 conf/rtmp2rtc.conf 配置 SRS它允许您通过 RTMP 以低延迟通过 FFmpeg 发布,并通过 WebRTC 播放流。
    当您的 SRS 启动时,会有一个 WebRTC 播放器,例如:http://localhost:8080/players/rtc_player.html,请阅读 here 中有关 WebRTC 的更多信息
    网址非常相似:
  • 即时通讯:rtmp://ip/live/livestream
  • FLV:http://ip/live/livestream.flv
  • HLS:http://ip/live/livestream.m3u8
  • WebRTC:webrtc://ip/live/livestream

  • 如果你使用 WebRTC 播放器,延迟应该是 ~500ms并且非常稳定。

    关于ffmpeg - 实时直播 - RPI FFmpeg 和 H5 播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71979139/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com