Estoy pasando un video procesado de openCV a ffmpeg a través de una tubería aquí está el código
./OpenCV & \ tail -n +0 -f out.avi | ffmpeg -i pipe:0 -hls_time 1 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8
Mi problema es que los archivos de salida .ts no tienen una duración uniforme, cambian de un archivo a otro.
Estos son en su mayoría largos, digamos 60 segundos. Esto significa que el cliente que se conecta tiene que esperar a que termine la primera transmisión antes de que se cree el archivo de la lista de reproducción (.m3u8). Por lo tanto, en este ejemplo, están aproximadamente 60 segundos por detrás del video en vivo y si el siguiente archivo .ts es más grande, la transmisión se detiene hasta que finaliza. Si el cliente intenta reproducir antes de que se cree el siguiente archivo .ts, se reproducirá el primer archivo .ts.
La velocidad de fotogramas de openCV es de 1 fotograma por segundo.
tail cambia el archivo de salida de openCV llamado (out.avi) a una salida estándar.
Cualquier ayuda sería genial.
Sé que estoy respondiendo mi propia pregunta, pero he cambiado el código a continuación.
./OpenCV & \ tail -n +0 -f out.avi | ffmpeg -i pipe:0 -hls_time 1 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8 `
para
./OpenCV & \ tail -n +0 -f out.avi | ffmpeg -i pipe:0 -f hls -g 2 -hls_time 2 -hls_list_size 0 -hls_wrap 10 -hls_segment_filename '%03d.ts' stream.m3u8 `
Parece haber hecho el truco.