如何实时将多个 ffserver 流组合成网格?

如何实时将多个 ffserver 流组合成网格?

我正在尝试使用 ffmpeg/ffserver/zoneminder 设置 CCTV 系统,并希望有一个美观的 4x4 网格,上面没有 Java 小程序边框和窗口加密狗,只有一个全屏 4x4 网格。我已经让 ffserver 为浏览器传输 webm,让 mpg 为 zoneminder 传输,但当我构建一个嵌入了 16 个 webm 视频的页面时,它在一次加载大约 5 个后就会停止。我正在寻找一种方法来获取 16 个直播流并将它们合并为一个宽度和高度为网格排列的四倍的单个直播流。

我尝试使用 ffmpeg 来处理这个问题,并在 /etc/ffserver.conf 中使用以下命令进行适当的设置:

/usr/local/bin/ffmpeg -i http://localhost:8090/0.webm -i http://localhost:8090/1.webm -i http://localhost:8090/2.webm -i http://localhost:8090/3.webm -i http://localhost:8090/4.webm -i http://localhost:8090/5.webm -i http://localhost:8090/6.webm -i http://localhost:8090/7.webm -i http://localhost:8090/8.webm -i http://localhost:8090/9.webm -i http://localhost:8090/10.webm -i http://localhost:8090/11.webm -i http://localhost:8090/12.webm -i http://localhost:8090/13.webm -i http://localhost:8090/14.webm -i http://localhost:8090/15.webm -filter_complex "
nullsrc=size=1280x960 [bg];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [v0];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [v1];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [v2];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [v3];
[4:v] setpts=PTS-STARTPTS, scale=320x240 [v4];
[5:v] setpts=PTS-STARTPTS, scale=320x240 [v5];
[6:v] setpts=PTS-STARTPTS, scale=320x240 [v6];
[7:v] setpts=PTS-STARTPTS, scale=320x240 [v7];
[8:v] setpts=PTS-STARTPTS, scale=320x240 [v8];
[9:v] setpts=PTS-STARTPTS, scale=320x240 [v9];
[10:v] setpts=PTS-STARTPTS, scale=320x240 [v10];
[11:v] setpts=PTS-STARTPTS, scale=320x240 [v11];
[12:v] setpts=PTS-STARTPTS, scale=320x240 [v12];
[13:v] setpts=PTS-STARTPTS, scale=320x240 [v13];
[14:v] setpts=PTS-STARTPTS, scale=320x240 [v14];
[15:v] setpts=PTS-STARTPTS, scale=320x240 [v15];
[bg][v0] overlay=shortest=1 [bg];
[bg][v1] overlay=shortest=1:x=320 [bg];
[bg][v2] overlay=shortest=1:x=640 [bg];
[bg][v3] overlay=shortest=1:x=960 [bg];
[bg][v4] overlay=shortest=1:y=240 [bg];
[bg][v5] overlay=shortest=1:x=320:y=240 [bg];
[bg][v6] overlay=shortest=1:x=640:y=240 [bg];
[bg][v7] overlay=shortest=1:x=960:y=240 [bg];
[bg][v8] overlay=shortest=1:y=480 [bg];
[bg][v9] overlay=shortest=1:x=320:y=480 [bg];
[bg][v10] overlay=shortest=1:x=640:y=480 [bg];
[bg][v11] overlay=shortest=1:x=960:y=480 [bg];
[bg][v12] overlay=shortest=1:y=720 [bg];
[bg][v13] overlay=shortest=1:x=320:y=720 [bg];
[bg][v14] overlay=shortest=1:x=640:y=720 [bg];
[bg][v15] overlay=shortest=1:x=960:y=720" http://localhost:8090/all_webm.ffm

但它的速度仅有几 FPS,不适合直播。

有人知道如何用 ffmpeg 做到这一点,或者是否有一个可以插入 ffserver 的程序可以做到这一点?

答案1

您正在处理 16 个流,因此您的 CPU 很难进行转换。您确实需要足够的 CPU 能力来处理所有这些数据。

我还看到你正在缩放每个视频。缩放在 CPU 中是一个非常耗时的过程。也许你可以设置你的摄像头流来提供缩放后的视频,这样你的 CPU 只需要将它们放在一起。

您还可以寻找其他编码/解码选项,因为有些编码器比其他编码器快 10 倍。

相关内容