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 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.]
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 "
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.
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.
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?