4

我目前正在使用流媒体插件如下 Fancy artchitecture here

OBS--------RTMP--------->NGINX-Server-----FFMPEG(输入RTMP输出RTP)--------->JANUS--- ------webrtc-------->客户端

当使用 ffmpeg 命令(如下)时,在 Janus 流接口上,我们只能看到与控制台中 ffmpeg 输出的比特率相对应的比特率,但我们看不到任何视频。

ffmpeg -i rtmp://localhost/live/test -an -c:v copy -flags global_header -bsf dump_extra -f rtp rtp://localhost:8004 

(使用“-c:v copy”以便不使用编码,从而减少延迟)

如果我使用“-c:v libx264”,视频显示良好,唯一的问题是它占用大量 CPU 并增加了延迟。

以前我曾尝试使用 RTSP 作为 FFMPEG 的输入,在这种情况下,即使我使用“-c:v copy”,视频也能正常显示,几乎没有延迟。

所以我真的不明白为什么对于 RTSP 副本工作正常,但对于 RTMP,我必须使用 libx264 编解码器。如果有人对此有任何想法,我会全神贯注:)

4

1 回答 1

1

我有类似的问题,我的问题是我使用的流/视频有很大的 GOP 大小。对于 WebRTC,延迟为亚秒级,因此输入源应具有短间隔 I 帧。最好删除 B 帧,因为它们也指向前后。

以下是可用于小 GOP 大小 (4) 并删除 B 帧的命令。

使用 RTMP 流 src:

ffmpeg rtmp://<your_src> -c:v libx264 -g 4 -bf 0 -f rtp -an rtp://<your_dst>

使用 mp4 文件:

ffmpeg -re -i test.mp4 -c:v libx264 -g 4 -bf 0 -f rtp -an rtp://<your_dst>

-c:v copy不会减少延迟。它只是告诉ffmpeg不要转码。

于 2021-04-14T10:51:36.303 回答