Como conseguir que o mplayer toque stdin?

7

Por que isso não funciona?

cat /dev/video1 | mplayer -

Se eu pudesse fazer isso funcionar, eu poderia tocar & gravar vídeo ao mesmo tempo usando 'tee' para alimentar o mplayer e o mencoder.

Eu quero reproduzir vídeo ao vivo (de / dev / video1: input = 1: norm = NTSC) e gravá-lo ao mesmo tempo sem introduzir lag.

O mplayer reproduz bem o vídeo (sem atraso perceptível).

O mencoder grava tudo bem.

Mas eu não consigo descobrir como "tee" a saída de / dev / video para que eu possa alimentá-lo para ambos ao mesmo tempo. (Eu sei como codificá-lo e, em seguida, reproduzo imediatamente o vídeo codificado, mas isso introduz muito atraso).

Se o mplayer e o mencoder fossem ler a partir do stdin, eu poderia usar o 'tee' para resolver isso.

Como posso fazer isso?

[BTW, eu ficaria feliz com QUALQUER solução que reproduz & registra ao mesmo tempo, contanto que não adicione lag - não estou comprometido com o mplayer. Mas codificar primeiro e depois tocar adiciona lag.]

    
por nerdfever.com 22.10.2013 / 00:47

3 respostas

8

Você precisa dar um pouco de cache ao jogar stdin

cat /dev/video1 | mplayer -cache 1024 -

Sem essa opção de cache, você receberá o erro "Seek failed Não é possível buscar para trás em fluxos lineares "

    
por 29.08.2014 / 13:42
3

De acordo com a página man do mplayer, mplayer - deve ler stdin, mas você também precisa especificar -noconsolecontrols para evitar que o mplayer tente ler eventos de controle de teclado do stdin.

    
por 22.10.2013 / 01:17
2

Eu não acho que o que você queira fazer seja possível usando um único mplayer. Eu encontrei esta pergunta exata e aparentemente respondo assim:

trecho: [usuários do MPlayer] Exibir e gravar um fluxo de ip da câmera no mesmo tempo?

This work, but I really want to do it in the same mplayer process. Any idea how to write a stream in a file in slave mode ? I haven't find yet the right command in the documentation.

     

Eu acho que não pode ser feito. O MPlayer pode reproduzir ou descarregar um fluxo, não   ambos ao mesmo tempo.

     

Você pode, no entanto, despejar um fluxo com uma tarefa e reproduzir essa gravação   transmitir com outra tarefa. Pelo menos você não teria o dobro da rede   tráfego então.

A pergunta original foi a seguinte:

I need, at the same time, to display the stream, and the possibility to write it in a file (so, record it). My point is: I would like to do this is the same process.

Actually, I have a process for mplayer in slave mode:

    $ mplayer -slave -wid id_window  camera_address/

And each time I need to record, I start a new process, not in slave this time:

    $ mplayer -dumpvideo camera_address -dumpfile stream.mp4/

This work, but I really want to do it in the same mplayer process. Any idea how to write a stream in a file in slave mode ? I haven't find yet the right command in the documentation.

Usando o ffmpeg?

Apenas uma ideia, mas encontrei este post wiki no site ffmpeg que discute a criação de múltiplas saídas . Talvez você pudesse dividir /dev/video1 e depois usar os fluxos duplicados no mplayer?

    
por 22.10.2013 / 03:22