fluxo avconv para rtmp via nginx-rtmp-module - converta em html5 file / stream

1

apenas mantendo as coisas curtas no começo.

Eu faço stream via rtmp com avconv através de uma configuração nginx. Capturar esse fluxo em um site só é possível via flash, tanto quanto eu sei. Hoje em dia é uma coisa ruim para reproduzir arquivos flash através de um smartphone (iPhone / Android / qualquer). O que eu quero fazer é pegar esse fluxo (recebido como rtmp) e convertê-lo em um arquivo / fluxo HTML5. Eu sei sobre a possibilidade de traço; ou hls em; mas não está realmente funcionando perfeitamente. (Eu tenho que ligar o CORS, para colocar a maldita coisa para funcionar, mas ainda está gaguejando)

Aqui estão minhas configurações:

avconv:

avconv \
-f video4linux2 -input_format mjpeg -r 10 -s hd720 -i /dev/video0 \
-f video4linux2 -input_format mjpeg -r 10 -s 640x480 -i /dev/video1 \
-vf transpose=cclock -filter_complex  \
"[0:v]scale=1280:-1,setpts=PTS-STARTPTS[bg]; \
[1:v]scale=320:-1,transpose=cclock,setpts=PTS-STARTPTS[fg]; \
[bg][fg]overlay=W-w-10:10[out]" \
-map "[out]" -vprofile baseline -vcodec libx264 -preset fast \
-maxrate 3000k -bufsize 6000k -b 500k \
-f flv rtmp://STREAMURL

nginx.conf:

    rtmp {
    server {
            listen 1935;
            chunk_size 4096;

            application webcam {
                    live on;
                    record off;

                    allow publish a.b.c.d;
                    deny publish all;

                    allow play all;

                    #exec /usr/bin/avconv -loglevel verbose -i rtmp://STREAMURL -vcodec libx264 -vprofile baseline /tmp/out.mp4;
    } } }

essa linha comentada está produzindo um arquivo de saída, que cresce com o tempo. Isso pode ser ok em alguma configuração, mas em um fluxo contínuo 24/7, não é uma solução muito boa, eu acho.

Alguém tem uma ideia inteligente ou uma dica de como posso resolver meu problema:   - Recuperando o fluxo rtmp, converta-o em um arquivo HTML5 que só pode ser armazenado em cache e não está protegido para o disco rígido.

    
por Aim 22.08.2015 / 23:31

1 resposta

0

Eu pessoalmente usaria um servidor Icecast e o alimentaria da avconv. Mas, novamente, sou meio tendencioso como o mantenedor do Icecast.

Ele resolveria o problema de um arquivo crescente, pois o Icecast só mantém um buffer pequeno (configurável) na memória e, por padrão, não grava em nenhum arquivo. Observe também que você deve manter o intervalo do quadro-chave razoavelmente curto. Em seguida, os navegadores não devem ter problemas para bloquear o quadro-chave mais próximo nos dados iniciais.

Eu também usaria o WebM e não o h.264, mas essa é a minha preferência por codecs não proprietários. No caso do WebM, eu manteria a proporção de quadros-chave abaixo de 1: 10-1: 15.

Dito isto, HLS ou DASH podem ser alternativas a serem exploradas. O Avconv tem uma espécie de modo de saída HLS, mas provavelmente precisa de alguns scripts adicionais em torno dele para limpar partes desatualizadas.

    
por 23.08.2015 / 14:06