No Google Chrome no Linux, onde está o flv, se não estiver em / tmp?

37

Eu gosto de manter vídeos porque

  1. Gosto de armazená-los e reproduzi-los consecutivamente no meu media player,
  2. Quero poder parar / reiniciar meu navegador sem perder todo o vídeo em buffer e
  3. O Flash trava com frequência e me dá as caixas cinza .

Em muitos sites com vídeo em Flash (incluindo o Youtube), posso encontrar o arquivo flv /tmp, geralmente chamado FlashXX.... Mas alguns sites conseguem impedir que esse arquivo seja exibido, por exemplo, http://blip.tv/file/3627639 . É possível que isso não seja colocado em spool no disco, mas isso seria surpreendente, pois todo o vídeo de uma hora pode ser armazenado em buffer sem que minha RAM seja visivelmente afetada.

No Firefox, posso encontrar o flv dentro do diretório de cache. Mas estou curioso para fazer isso no Chrome. Tentei procurar em ~ / .cache / google-chrome / mas não encontrei nada que parecesse certo. Por exemplo:

$ ls -lt .cache/google-chrome/Cache/ | head
total 261492
-rw------- 1 yang yang 16621568 2010-12-05 03:41 data_1
-rw------- 1 yang yang   966656 2010-12-05 03:40 data_0
-rw------- 1 yang yang 23076864 2010-12-05 03:40 data_2
-rw------- 1 yang yang   262512 2010-12-05 03:40 index
-rw------- 1 yang yang   108412 2010-12-05 03:35 f_005603
-rw------- 1 yang yang    62607 2010-12-05 03:32 f_005602
-rw------- 1 yang yang    54998 2010-12-05 03:32 f_005601
-rw------- 1 yang yang    31127 2010-12-05 03:32 f_005600
-rw------- 1 yang yang   799389 2010-12-05 03:32 f_0055ff

$ ls -1t ~/.cache/google-chrome/Cache/* | head | xargs file
/home/yang/.cache/google-chrome/Cache/data_1:   data
/home/yang/.cache/google-chrome/Cache/data_0:   data
/home/yang/.cache/google-chrome/Cache/data_2:   data
/home/yang/.cache/google-chrome/Cache/index:    data
/home/yang/.cache/google-chrome/Cache/f_005603: GIF image data, version 89a, 600 x 471
/home/yang/.cache/google-chrome/Cache/f_005602: PNG image, 600 x 746, 8-bit colormap, non-interlaced
/home/yang/.cache/google-chrome/Cache/f_005601: PNG image, 140 x 342, 8-bit/color RGB, non-interlaced
/home/yang/.cache/google-chrome/Cache/f_005600: JPEG image data, JFIF standard 1.02
/home/yang/.cache/google-chrome/Cache/f_0055ff: JPEG image data, JFIF standard 1.02
/home/yang/.cache/google-chrome/Cache/f_0055fe: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT)

Tentei examinar os arquivos abertos para o processo Flash, mas não vi nenhum arquivo Flash excluído, que muitas das respostas abaixo dizem que deveria existir:

$ ps x | grep npviewer
27148 ?        Rl     0:24 /usr/lib/nspluginwrapper/i386/linux/npviewer.bin --plugin /usr/lib/flashplugin-installer/libflashplayer.so --connection /org/wrapper/NSPlugins/libflashplayer.so/27135-2
27504 pts/2    S+     0:00 grep --color=auto npviewer

$ ls -l /proc/27148/fd/
total 0
lr-x------ 1 yang yang 64 2011-02-16 13:48 0 -> /dev/null
lrwx------ 1 yang yang 64 2011-02-16 13:48 1 -> /home/yang/.xsession-errors
l-wx------ 1 yang yang 64 2011-02-16 13:48 10 -> /home/yang/.mozilla/firefox/8wy5j0z2.default/key3.db
lrwx------ 1 yang yang 64 2011-02-16 13:48 11 -> pipe:[5500575]
lrwx------ 1 yang yang 64 2011-02-16 13:48 12 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:48 13 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lr-x------ 1 yang yang 64 2011-02-16 13:48 14 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
l-wx------ 1 yang yang 64 2011-02-16 13:48 15 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:48 16 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:48 17 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lr-x------ 1 yang yang 64 2011-02-16 13:48 18 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
l-wx------ 1 yang yang 64 2011-02-16 13:48 19 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:48 2 -> /home/yang/.xsession-errors
lrwx------ 1 yang yang 64 2011-02-16 13:48 20 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lr-x------ 1 yang yang 64 2011-02-16 13:48 21 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 22 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 23 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 24 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 25 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 26 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 27 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 28 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 29 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:48 3 -> socket:[5496032]
lrwx------ 1 yang yang 64 2011-02-16 13:51 30 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 31 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 32 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 33 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 34 -> /home/yang/.adobe/Flash_Player/cert8.db (deleted)
lrwx------ 1 yang yang 64 2011-02-16 13:51 35 -> /home/yang/.adobe/Flash_Player/key3.db (deleted)
l-wx------ 1 yang yang 64 2011-02-16 13:53 36 -> pipe:[5500575]
lr-x------ 1 yang yang 64 2011-02-16 13:53 37 -> pipe:[5500576]
l-wx------ 1 yang yang 64 2011-02-16 13:53 38 -> pipe:[5500576]
lrwx------ 1 yang yang 64 2011-02-16 13:53 39 -> socket:[5500580]
lrwx------ 1 yang yang 64 2011-02-16 13:48 4 -> socket:[5496131]
lr-x------ 1 yang yang 64 2011-02-16 13:48 5 -> pipe:[5496139]
l-wx------ 1 yang yang 64 2011-02-16 13:48 6 -> pipe:[5496139]
lr-x------ 1 yang yang 64 2011-02-16 13:48 7 -> socket:[5496140]
l-wx------ 1 yang yang 64 2011-02-16 13:48 8 -> socket:[5496141]
lr-x------ 1 yang yang 64 2011-02-16 13:48 9 -> /home/yang/.mozilla/firefox/8wy5j0z2.default/cert8.db

Tentei stracetodos os processos do chrome para qualquer coisa que parecesse estar gravando um arquivo:

strace -p (pgrep chrome|xargs -I_ echo -p _)

mas olhar para as chamadas write/ writev/ selectapenas me indicou alguns FDs que pareciam /proc/_/fd/ser tubos / soquetes (presumivelmente para os processos conversarem entre si). Também tentei a mesma coisa no npviewer.binprocesso.

Também tentei inspecionar todos os arquivos apontados em /proc/*/fd/( quaisquer processos) que foram modificados recentemente, mas não encontrei nada que parecesse conter um flv. Eu também tentei a mesma verificação nos arquivos recentemente modificados em ~/.cache/google-chrome/.

Se isso faz diferença, estou usando o lançamento do canal dev do Chrome, que acredito (sempre?) Usa sua própria implementação segura do Flash. No momento desta atualização, estou usando o Chrome 10.0.648.45 dev. De acordo com http://www.adobe.com/software/flash/about/ , estou executando 10.2.152.27. Eu tentei em várias caixas do Ubuntu agora. Eu também tentei em várias caixas do Ubuntu agora, com os mesmos resultados.

Alguém quer dar uma facada nisso?

Yang
fonte
Pode ser útil se você tiver fornecido o link para uma página com problemas.
Sophie Alpert
@ Ben: Opa, eu pretendia fazer isso. Adicionado!
Yang

Respostas:

31

Observei que os plug-ins recentes do Flash armazenam arquivos em / tmp, mas eles usam um truque para removê-los e manter um manipulador de arquivos aberto para mantê-los vivos. Isso significa que eles ainda são mantidos na unidade (desde que o identificador de arquivo seja aberto pelo plug-in flash), mas não são visíveis na listagem de diretórios (porque o arquivo foi excluído).

Escrevi sobre isso há algum tempo: obter vídeos em flash de arquivos quase excluídos

Mas tudo depende da versão do plugin Flash. Ele costumava armazenar filmes em / tmp ou também no cache do navegador.

liori
fonte
Seu post muito interessante descreve como fazer isso com o Firefox, mas estou pensando em como fazer isso usando o Chrome. Eu estive olhando lsof e / proc, mas não encontrei nenhum sinal de arquivos desvinculados. Você teve sucesso com o exemplo de vídeo?
Yang
11
@ Yang: A mesma maneira exata funciona com o chrome, pelo menos no meu notebook - apenas testado. Eu acho que depende mais do flash player do que do navegador da web. Qual versão do plugin Flash você possui?
liori
De acordo com adobe.com/software/flash/about eu estou correndo 10.2.152.27, que eu acho que é o Flash embutido no Chrome (usando Chrome 10.0.648.45 dev). Eu tentei em várias caixas do Ubuntu agora.
217 Yang
2
Como uma observação, parece que, embora costumava funcionar com todos os reprodutores de filmes em flash, não é mais o caso. Parece funcionar com alguns sites menos conhecidos, mas não no Youtube. Eu posso apenas imaginar que o Youtube encontrou uma maneira de manter o arquivo fora do sistema de arquivos ...
Liori
11
ele ainda funciona para mim com Chromium versão 33.0.1750.152-1 (Debian Jessie) e flashplayer versão 11,2,202,346 (de acordo com adobe.com/software/flash/about )
jopasserat
24

Verificar / proc // fd / fez o truque para mim:

$ ps x | grep npviewer
24657 ?        Sl    12:33 /usr/lib/nspluginwrapper/i386/linux/npviewer.bin ...
$ cd /proc/24657/fd
$ ls -l
total 0
lr-x------ 1 omab omab 64 2011-02-11 02:13 0 -> /dev/null
lrwx------ 1 omab omab 64 2011-02-11 02:13 1 -> /home/omab/.xsession-errors
lr-x------ 1 omab omab 64 2011-02-11 02:13 10 -> /home/omab/.mozilla/firefox/og3emjry.default/key3.db
lrwx------ 1 omab omab 64 2011-02-11 02:13 11 -> /tmp/FlashXX0WG0J5 (deleted)
lr-x------ 1 omab omab 64 2011-02-11 02:13 12 -> pipe:[9004372]
...

O arquivo 11 , marcado como "(excluído)", ainda aponta para o arquivo criado originalmente em / tmp /, portanto não é completamente excluído:

$ file -L 11 
11: Macromedia Flash Video

fazendo um:

$ mplayer 11

irá reproduzir o arquivo FLV.


Aqui está uma linha de comando bastante útil, adaptada do procedimento acima. Pode exigir pequenos ajustes para sua distribuição / instalação e quais processos você está executando normalmente.

Você pode substituir flashpor npviewer, substituir vlcpor mplayer:

FLASHPID=\`pgrep -f flash\`; vlc /proc/$FLASHPID/fd/\`ls -l /proc/$FLASHPID/fd | grep tmp | cut -d" " -f9\`
omab
fonte
Isso não funciona para mim - atualizei minha resposta com detalhes do que vejo. Você sabe por que pode não estar funcionando para mim? Eu tentei em várias máquinas agora.
Yang
BTW, você pode salvar o flv commplayer 11 -dumpstream -dumpfile outputname
liewl 4/11
8
Você pode simplesmente copiá-lo cp 11 / ... / ...
omab 29/03
10

Os fluxos de Flash na maioria das vezes são arquivos simples obtidos por uma solicitação http.

Para o seu vídeo em http://blip.tv/file/3627639

No Google Chrome, você pode inspecionar as solicitações de rede ( ctrl + shift + i) e procurar por mais tempo no seu caso:

Fosslc-..
/file/get

clique nele e copie / cole o URL do campo "Solicitar URL" para uma nova guia

http://blip.tv/file/get/Fosslc-2...to823.flv?showplayer=20110401114509&source=1

Doud
fonte
Fantástico! Estou tentado a aceitar sua resposta, uma vez que ela realmente funcionou para mim, mas vou esperar um pouco mais para ver se há outras respostas para localizar o flv baixado.
Yang
não aceite, pois é apenas um truque para o seu caso. Eu realmente quero saber onde diabos o flash armazena arquivos de vídeo temporários.
Doud
Heh, tudo bem. Eu quero saber também. Meu palpite é que ele está sendo armazenado em algum lugar nos arquivos data_ *, que provavelmente são pilhas específicas do navegador. Não consegui encontrar nenhuma ferramenta para vasculhá-los, a não ser mergulhar na base de código do Chrome.
Yang
9

Yang,

Sim, está em ~ / .cache / google-chrome / Cache (bem, eu tenho o Chromium instalado, então encontrei-o em ~ / .cache / chromium / Cache).

Se você assistir ao vídeo e classificar por data e hora:

$ ls -rt | tail
f_00003a
f_00003b
f_00003c
f_00003d
data_2
data_3
index
data_1
f_000040
data_0

Então, se você executar o comando file, verá quais são os Flash:

$ file $(ls -rt | tail)
f_00003a: Macromedia Flash data (compressed), version 9
f_00003b: Macromedia Flash data (compressed), version 9
f_00003c: Macromedia Flash data (compressed), version 10
f_00003d: PNG image data, 1024 x 768, 8-bit/color RGBA, non-interlaced
data_2:   data
data_3:   data
index:    data
data_1:   data
f_000040: Macromedia Flash Video
data_0:   data

OK, instalei o Google Chrome para conferir.

Parece que o diretório do Google Chrome é um pouco diferente do Chromium.

Usando as mesmas técnicas (aqui, especificando o ID do processo do navegador, a saída removeu algumas colunas para maior clareza):

$ lsof -p 27922 | grep Cache
chrome  27922 mem     ~/.cache/google-chrome/Default/Cache/index
chrome  27922 mem     ~/.cache/google-chrome/Default/Cache/data_3
chrome  27922 mem     ~/.cache/google-chrome/Default/Cache/data_2
chrome  27922 mem     ~/.cache/google-chrome/Default/Cache/data_1
chrome  27922 mem     ~/.cache/google-chrome/Default/Cache/data_0
chrome  27922  71u    ~/.cache/google-chrome/Default/Cache/index
chrome  27922  72u    ~/.cache/google-chrome/Default/Cache/data_0
chrome  27922  73u    ~/.cache/google-chrome/Default/Cache/data_1
chrome  27922  74u    ~/.cache/google-chrome/Default/Cache/data_2
chrome  27922  75u    ~/.cache/google-chrome/Default/Cache/data_3
chrome  27922 111u    ~/.cache/google-chrome/Default/Cache/f_00001a
jyap
fonte
Isso é intrigante, porque não funciona para mim. Atualizei minha resposta com uma pasta do que vejo. Isso funciona para você com o URL blip.tv de exemplo que eu dei? Talvez seja por causa de uma versão diferente do Chrome - qual você está usando?
219 Yang
Sim, eu usei o seu URL exato. Você estava reproduzindo o arquivo enquanto executava os comandos? Tente limpar o cache, reproduzir o arquivo e, em seguida, execute os comandos. Funcionou para mim e eu pude reproduzir o arquivo no Mplayer, então funcionou para mim!
jyap
Infelizmente, limpar o cache não ajudou. Sim, o arquivo estava sendo reproduzido enquanto eu executava esses comandos. Atualizei minha resposta com mais informações. Alguns respondentes dizem que eu deveria estar olhando para o processo do Flash, outros dizem que eu deveria olhar para um dos processos do navegador, mas eu tentei os dois, mesmo olhando para todos os processos. Alguma idéia de por que está quebrado para mim? Eu tentei em várias máquinas agora.
Yang
Editei minha resposta acima para especificar o ID do processo do Google Chrome e executar o comando lsof. Experimente isso.
jyap
5

usando o cromo 11.0.666.0 e o plug-in flash 10.2.152

O grepping for npviewer não produziu nenhum processo de flash para mim, mas o grepping for flash:

$ ps x | grep flash
11005 ?        Rl     2:30 /usr/lib/chromium-browser/chromium-browser ... 

basicamente a mesma coisa que jyap acima sugerida com

lsof | grep Flash

e você pode prosseguir como acima ...

dino
fonte
Isso não funciona para mim - atualizei minha resposta com detalhes do que vejo. Você sabe por que pode não estar funcionando para mim? Eu tentei em várias máquinas agora.
Yang
3

Tente listar os arquivos abertos.

lsof | grep Flash
jyap
fonte
Isso funcionou para você? Não aparece nada para mim - eu também não acho, porque os arquivos Flash * típicos não estão aparecendo em seu local habitual.
217 Yang
3

Alguns dos players mais recentes armazenam buffer na memória para tentar impossibilitar as pessoas de usar esses truques. Você não conseguirá nada nesse caso.

geekosaur
fonte
Embora seja uma informação útil, e tendo em mente que eu não sei como investigar a RAM (apenas que é possível), não concordo que você "não será capaz de obter nada". Onde há uma vontade, há um caminho.
user66001
3

Corrigi esse problema. Aqui estão os passos

  1. Ir para plugins instalados sobre: ​​plugins no chrome / mozilla
  2. Clique em Detalhes para ver com mais informações. Desative o plug-in do Flash. O local do plug-in seria "/usr/lib/adobe-flashplugin/libflashplayer.so"
  3. Faça o download da versão tar.gz do flash player aqui http://get.adobe.com/flashplayer/
  4. Extraia esse arquivo e copie o libflashplayer.so para / usr / lib / chromium-browser / plugins. Em seguida, ative isso na página do plugin.
  5. Se você visualizar qualquer vídeo, ele será baixado em /home//.cache/chromium/Default/Cache nesta pasta

veja http://www.arulraj.net/2011/03/google-chrome-download-video.html

Arul
fonte
2

Para o Chrome mais recente no Linux:

  1. Identifique o pid do plug-in Flash usado pelo Chrome:

    ps ax | grep -i chrome | grep -i flash 
    

    a partir de agora o plugin é chamado libgcflashplayer.

  2. Identifique o arquivo Flash aberto por este processo de plug-in do Flash:

    file /proc/Flash_Plugin_PID/fd/* | grep -i deleted
    

    ou

    lsof -p Flash_plugin_pid | grep -i deleted
    

    Procure por arquivos excluídos.

  3. Copie o arquivo de /proc/[pid]/fd/[fileno]pararecovered_file.flv

HKVC
fonte
2

Estou usando o chrome 11.06 no Ubuntu 10.04. Encontrei meus arquivos flv em ~ / .cache / google-chrome / Default / Cache. Experimente um

file * | grep Flash\ Video
user733032
fonte
2

Uma pequena dica minha. Isso funciona no Ubuntu 10.04.

#!/bin/bash
viewer=`ps x|grep npviewer|grep -v grep |awk '{print $1}'`
echo $viewer
cd /proc/${viewer}/fd
jef=(`ls -l|awk '{print $8 " " $10}'|grep Flash|awk '{print $1}'`)
echo $jef
jef1=${#jef}
ext=`date +'%d_%m_%k_%M_%S'`
i=0
while [ "$i" -lt "$jef1" ]
do 
cp ${jef[${i}]} /fun/${jef[${i}]}"(${ext})".flv
i=`expr $i + 1`
done

Agora você pode agendar esse script com o crontab. Pode ser otimizado para que não haja arquivos FLV duplicados.

burkass
fonte
2

Usando o Firefox no Kubuntu:

export COUNT=0
export FILENAME=$1
export FILENAME=${FILENAME:=test}

PID=`ps ax | grep -i flashplugi[n] | awk '{print $1}'`
FLASH=`ls -l /proc/$PID/fd| grep Flash | awk '{print $8}'`

for N in $FLASH ; do
  COUNT=$(($COUNT+1))
  cp /proc/$PID/fd/$N ${FILENAME}_${COUNT}.flv
done
verzonnen
fonte
0

Eu tenho outra maneira de fazê-lo com base no descritor de arquivo fundado em / proc (eu uso o bash moderno em poucas linhas)

#!/bin/bash

process="flash"
filename="flash"

readlink -f /proc/$$/exe | fgrep -q bash || {
    echo >&2 "Hey dude ! You must call $0 with bash !"
    exit 2
}

. ~/.bashrc || . /etc/profile

count=1
for pid in $(pgrep -f $process); do
    fds=$(file /proc/$pid/fd/[0-9]* | fgrep Flash | cut -d: -f1)
    for fd in $fds; do
        cp -v $fd ${filename}_${count}.flv
        ((count++))
    done
done

# vim:ts=4:sw=4
Gilles Quenot
fonte