首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实时直播- RPI FFmpeg和H5播放器

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

Stack Overflow用户
提问于 2022-04-23 11:17:15
回答 1查看 384关注 0票数 1

我在一家远程医疗公司工作,为了向医生提供这些设备的实时信息,我们正在使用联网医疗设备,这些设备由一位训练有素的卫生专业人员使用。

这些设备与视频和音频一起工作。现在,我们使用的是对等连接(所以是对等连接),但我们试图摆脱这种情况,拥有一个RPI,他唯一的工作是传输数据(比如流媒体音频和视频)。

由于设备应该与医生的指示一起使用,所以我们需要医生实时接收数据。

但是我们也需要受过训练的健康专家来看看他在做什么(所以我们需要从设备中得到当地的饲料)。

我们如何捕捉音频和视频?

我们使用ffmpeg与一个go客户端,它负责管理ffmpeg客户端并将它们流到SRS服务器。这是可行的,但我们有2-3秒的延迟时,流数据。(前端来自ffmpeg和flv的rtmp)

ffmpeg设置:

代码语言:javascript
运行
复制
("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秒)(护士和医生)?
  • 这是我想要达到的好方法吗?有更好的方法吗?

流模式

数据交换和用例流:

注意:护士和医生使用HTTP-FLV来播放实时流,以降低延迟。

EN

回答 1

Stack Overflow用户

发布于 2022-04-24 00:02:43

在您的场景中,延迟由两个部分介绍:

  1. FFmpeg in RPI的音频/视频编码。
  2. 玩家消耗并摄入活流。

RPI中的FFmpeg

我注意到您已经设置了一些arg,您可以看到ffmpeg --help full为检查这些参数提供了充分的帮助。

keyint等于-g,所以请删除keyint,并设置fps(-r)。请设置将gop设置为1s或15 gop的-r 15 -g 15

代码语言:javascript
运行
复制
-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 options presettune对于低延迟非常有用,但也需要设置另一个profile来关闭bframe。为了降低延迟,请设置为-profile baseline -preset ultrafast -tune zerolatency

代码语言:javascript
运行
复制
-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作为编码器:

代码语言:javascript
运行
复制
-fflags <flags> (default autobsf)
  flush_packets E.......... reduce the latency by flushing out packets immediately
  nobuffer .D......... reduce the latency introduced by optional buffering

请注意,E表示编码器,而D表示解码器/播放机。

FFmpeg的cli,请隐蔽到您的params:

代码语言:javascript
运行
复制
-vcodec libx264 \
-r 15 -g 15 \
-profile baseline -preset ultrafast -tune zerolatency \
-fflags flush_packets

但是,我认为这些设置只在您更改播放机设置时才有效,因为瓶颈现在在播放机中(延迟1~3s)。

播放器

对于HTTP,请对SRS服务器使用conf/realtime.conf,并使用ffplay测试延迟:

代码语言:javascript
运行
复制
ffplay -fflags nobuffer -flags low_delay -i "http://your_server/live/stream.flv"

我认为延迟应该是<1s,好于H5播放器,后者使用MSE。你可以比较它们的潜伏期。

但是,您不能让用户使用ffplay,它只是用于开发的测试。所以我们必须使用一个低延迟的H5播放器,即WebRTC。

请用conf/rtmp2rtc.conf配置SRS,它允许您在低延迟时间内通过RTMP发布FFmpeg,并按WebRTC播放流。

启动SRS时,有一个WebRTC播放器,例如:player.html,请阅读更多关于这里的WebRTC信息。

网址非常类似:

  • RTMP:rtmp://ip/live/livestream
  • FLV:http://ip/live/livestream.flv
  • HLS:http://ip/live/livestream.m3u8
  • WebRTC:webrtc://ip/live/livestream

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71979139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档