FFmpeg 的实时性太糟糕了

1 天前
 FH0

在用 FFmpeg RTP 传输 H.264 ,本来想着发一个帧就能收到一个帧,但测试老是反馈延迟高,我就自己测试了一下。

结果发现要接收 n 个帧,必须发送 n + 2 个帧,难顶。下面的例子之所以能收到两个是因为第二个超时了,我也不懂为什么超时就能收到第二个包。

看来得参考 RTP 自己造轮子了。

10-20 16:27:34.582 I sdp: v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 239.0.0.1
t=0 0
a=tool:libavformat 61.1.100
m=video 16384 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqzZQKAv+XARAAADAAEAAAMAMg8WLZY=,aOvjyyLA; profile-level-id=64001E

10-20 16:27:34.583 I send packet, pts: 0
10-20 16:27:34.600 I send packet, pts: 16666
10-20 16:27:34.617 I send packet, pts: 33332
10-20 16:27:34.617 I pkt pts: -9223372036854775808
10-20 16:27:44.629 I pkt pts: 1500
2000 次点击
所在节点    FFmpeg
11 条回复
ZeroW
1 天前
x264 preset 换成 zerolatency 试试
ZeroW
1 天前
@ZeroW preset->tune
wy315700
1 天前
是不是因为有 B 帧
dosmlp
17 小时 53 分钟前
编码是有延迟的,想要实时性需要针对性调参数,比如 zerolatency
FH0
15 小时 51 分钟前
@ZeroW @dosmlp 这个过程没有编码,我是先用命令行生成一个 H.264 文件,然后用这个文件进行推流。
FH0
15 小时 47 分钟前
@wy315700 没有,应该是全 I 帧,因为我只用到了一个 H.264 文件。
wy315700
15 小时 44 分钟前
@FH0 #6
H.264 文件也有 IBP 帧的。
I.
ffprobe 使用 show_frames 看看 IBP 帧情况吧,
dosmlp
15 小时 34 分钟前
媒体服务可以看看 ZLMediaKit 和 srs
FH0
15 小时 10 分钟前
@wy315700 是 I 帧,刚刚用 ffprobe 看了。
FH0
15 小时 9 分钟前
@dosmlp 这倒是提醒我了,之前都是把 ZLMediaKit 当做一个独立的程序使用。回头试试!
rev1si0n
14 小时 25 分钟前
延迟高是不太可能的,只能是你的设置有问题,x264 有配置编码速度和延迟、比特率的选项,还有一般情况下不建议全分辨率或者全比特率编码,在合适的情况下先做一下缩放裁切再编码。做过 websocket 投屏,网络合适的情况下,从设备端到网页端渲染出图的延迟几乎不可见。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1167069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX