Como faço para salvar o vídeo flash em buffer (no Linux)?

5

Costumava haver um método para extrair vídeo em flash em buffer em qualquer navegador (como firefox, chrome, etc.), que faz uso do comando ps e espiona o fd que está apontando para um in-memory Arquivo temporário. Infelizmente, esse método não funciona mais. Por exemplo, todo fd usado pelo cromo é:

chrome    19412  ymf   69u   REG   0,14   470364     0  270129 /dev/shm/.org.chromium.Chromium.1fzPuo (deleted)
chrome    19412  ymf   77u   REG   0,14   131060     0  270141 /dev/shm/.org.chromium.Chromium.94K6Di (deleted)
chrome    19412  ymf  103u   REG    8,5     2052     0 4230990 /var/tmp/etilqs_01QDHFotJcLOpBS (deleted)
chrome    19412  ymf  112u   REG    8,5    24600     0 4232788 /var/tmp/etilqs_tFao7GamL5cslaZ (deleted)
chrome    19412  ymf  188u   REG    8,6    16384     0 1310851 /home/ymf/.config/chromium/Default/History Index 2013-07-journal (deleted)
chrome    19412  ymf  189u   REG    8,5    16400     0 4232787 /var/tmp/etilqs_D5p3BT7rtTSWLsy (deleted)

Nenhum deles contém conteúdo de mídia.

E eu acredito firmemente que de alguma forma nós podemos agarrar o vídeo que está sendo reproduzido (no Linux), já que o vídeo é transmitido do servidor sempre que o tocamos (sem a ajuda de plugins específicos do navegador).

    
por Determinant 22.07.2013 / 11:02

3 respostas

1

Você diz que "todos os fd usados pelo cromo são: ... Nenhum deles contém conteúdo de mídia". mas você lista muito poucos arquivos abertos que parecem pertencentes a um único processo. Não como normalmente é executado o cromo. Como você conseguiu essa informação?

Na minha máquina (Linux Mint e Chrome 28.0.1500.95) eu pude recuperar um arquivo flash transmitido diretamente no lugar que você estava procurando. Eu suspeito que você está perdendo alguma coisa no processo.

Primeiro, você precisa identificar o processo que está processando pimenta e encontrar o id do descritor de arquivo correspondente ao seu arquivo.

Isso é possível graças ao /proc e ao diretório fd do processo

Com o vídeo aberto em uma janela do navegador, execute este comando:

for ID in $( pgrep chrome ) ; do ( sudo ls -l /proc/$ID/fd|grep Pepper ) && echo /proc/$ID/fd; done

A saída será semelhante a:

lrwx------ 1 root root 64 ago  2 12:52 29 -> /home/me/.chromecache/Default/Pepper Data/Shockwave Flash/.com.google.Chrome.ulDLo0 (deleted)
/proc/1196/fd

Ignore o caminho para o qual o link está apontando: foi excluído. Você precisa acessar o arquivo via /proc/$PROCID/fd/$FDID

No exemplo acima, você executaria:

sudo cat /proc/1196/fd/29 > my_video.flv

[EDITAR]

Para fazer o mesmo com o cromo, altere o nome do processo de google-chrome para chro e a sequência a procurar no nome do arquivo para /tmp/Flash da seguinte forma:

for ID in $( pgrep chro ) ; do ( sudo ls -l /proc/$ID/fd|grep /tmp/Flash ) && echo /proc/$ID/fd; done

[EDIT] (novamente)

Este one-liner deve funcionar com cromo e cromo (pelo menos na minha máquina):

for ID in $( pgrep -f chro ) ; do ( sudo ls -l /proc/$ID/fd|egrep "(/tmp/Flash|Pepper)" ) && echo /proc/$ID/fd; done
    
por 02.08.2013 / 13:25
1

Você também pode usar o método @ silviot em um script:

#!/bin/bash
#
# Show all chrome cached video files!
#
for ID in $( pgrep chrom ) ; do 
    sudo ls -l /proc/$ID/fd|grep Pepper|cut -d' ' -f9|sed "s/\(.*\)/\/proc\/$ID\//g"
done | grep -v '^$'

Eu não testei isso com mais de um vídeo em execução, mas deve funcionar.

    
por 18.04.2015 / 01:20
-2

Eu tentei todas as extensões que não são permitidas e você precisa atualizar o tempo todo. Então tropeçou nisso: Use o bookmarklet KeepVid.com. Basta arrastar o botão da página da web para a barra de favoritos. Basta clicar no link enquanto assiste a um vídeo

    
por 27.07.2013 / 10:33