Como você combina vários fluxos ffserver em uma grade em tempo real?

3

Estou tentando configurar um sistema de CFTV com ffmpeg / ffserver / zoneminder e quero uma boa grade 4x4 sem todas as bordas de applets Java e dongles de janela, apenas uma grade de tela inteira 4x4. Eu obtive o ffserver para stream webm para navegadores e mpg para zoneminder, mas quando eu construo uma página com 16 vídeos webm embutidos, ele bloqueia depois de carregar cerca de 5 de uma só vez. Estou procurando uma maneira de levar 16 transmissões ao vivo e combiná-las em uma única transmissão ao vivo com quatro vezes a largura e a altura organizadas em uma grade.

Eu tentei usar o ffmpeg para lidar com isso com as configurações apropriadas em /etc/ffserver.conf usando o seguinte:

/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

Mas ele vem com apenas alguns FPS e não é adequado para transmissão ao vivo.

Alguém sabe como fazer isso com o ffmpeg, ou se existe um programa que pode ser conectado ao ffserver?

    
por CoryG 18.03.2013 / 06:06

1 resposta

1

Você está lidando com 16 fluxos, então sua CPU tem um trabalho difícil para converter. Você precisa seriamente de poder de CPU suficiente para lidar com todos esses dados.

Também vejo que você está dimensionando cada vídeo. O escalonamento é um processo muito demorado em uma CPU. Talvez você possa configurar seus fluxos de câmera para fornecer um vídeo em escala já, portanto, sua CPU só precisa colocá-los juntos.

Você também pode procurar outras opções de codificação / decodificação, porque alguns codificadores são 10 vezes mais rápidos que os outros.

    
por 18.03.2013 / 08:52