W przypadku przeglądarki Google Chrome w systemie Linux, gdzie jest plik flv, jeśli nie w / tmp?

37

Lubię zatrzymywać filmy, ponieważ

  1. Lubię je buforować, a następnie odtwarzać je jeden za drugim w moim odtwarzaczu multimedialnym,
  2. Chcę mieć możliwość zatrzymania / ponownego uruchomienia przeglądarki bez utraty całego buforowanego wideo oraz
  3. Flash często ulega awarii i daje mi szare pola .

W przypadku wielu witryn z wideo Flash (w tym Youtube) mogę znaleźć plik flv /tmp, zwykle o nazwie FlashXX.... Ale niektórym stronom udaje się zapobiec wyświetlaniu tego pliku, np . Http://blip.tv/file/3627639 . Możliwe, że w ogóle nie jest to buforowane na dysk, ale byłoby to zaskakujące, ponieważ cały godzinny film można buforować bez zauważalnego wpływu na moją pamięć RAM.

W przeglądarce Firefox mogę znaleźć plik flv w jego katalogu pamięci podręcznej. Ale jestem ciekawy, jak to zrobić w Chrome. Próbowałem zajrzeć pod ~ / .cache / google-chrome /, ale nie znalazłem niczego, co wyglądałoby dobrze. Na przykład:

$ 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)

Próbowałem spojrzeć na otwarte pliki dla procesu Flash, ale nie widziałem żadnych usuniętych plików Flash, które powinny znaleźć kilka odpowiedzi poniżej:

$ 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

Próbowałem przetestować stracewszystkie procesy chrome dla wszystkiego, co wyglądało na zapisywanie pliku:

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

ale spojrzenie na wywołania write/ writev/ selectwskazało mi tylko kilka FD, które /proc/_/fd/okazały się być rurami / gniazdami (przypuszczalnie po to, by procesy mogły ze sobą rozmawiać). Próbowałem również tego samego w npviewer.binprocesie.

Próbowałem także po prostu sprawdzić wszystkie pliki wskazane w /proc/*/fd/( dowolne procesy), które zostały niedawno zmodyfikowane, ale nie znalazłem niczego, co wyglądałoby, jakby zawierało plik flv. Próbowałem również tego samego sprawdzenia ostatnio zmodyfikowanych plików w obszarze ~/.cache/google-chrome/.

Jeśli robi to różnicę, korzystam z wersji dla deweloperów przeglądarki Chrome, która, jak sądzę (zawsze?), Korzysta z własnej bezpiecznej implementacji Flash. W tej chwili korzystam z Chrome 10.0.648.45 dev. Według http://www.adobe.com/software/flash/about/ korzystam z 10.2.152.27. Próbowałem już na kilku urządzeniach Ubuntu. Próbowałem też na kilku Ubuntu teraz, z tymi samymi wynikami.

Czy ktoś jeszcze chce w tym zadać cios?

Yang
źródło
Może to pomóc, jeśli podasz link do strony, z którą masz problemy.
Sophie Alpert,
@Ben: Ups, chciałem to zrobić. Dodany!
Yang,

Odpowiedzi:

31

Zauważyłem, że najnowsze wtyczki Flash przechowują pliki w / tmp, ale używają sztuczki polegającej na ich usunięciu i pozostawieniu otwartego uchwytu pliku, aby utrzymać je przy życiu. Oznacza to, że nadal są przechowywane na dysku (o ile uchwyt pliku jest otwierany przez wtyczkę flash), ale nie są widoczne na liście katalogów (ponieważ plik został usunięty).

O tym kiedyś pisałem: pobieranie filmów flash z prawie usuniętych plików

Ale wszystko zależy od wersji wtyczki Flash. Kiedyś przechowywał filmy w / tmp lub w pamięci podręcznej przeglądarki.

liori
źródło
Twój bardzo interesujący post na blogu opisuje, jak to zrobić w przeglądarce Firefox, ale zastanawiam się, jak to zrobić w przeglądarce Chrome. Przeglądałem lsof i / proc, ale nie znalazłem żadnych oznak niepowiązanych plików. Czy osiągnąłeś sukces z przykładowym filmem?
Yang
1
@Yang: Dokładnie ten sam sposób działa z chromem, przynajmniej na moim notebooku - właśnie przetestowałem. Myślę, że to zależy bardziej od Flash Playera niż od przeglądarki. Jaką masz wersję wtyczki Flash?
liori
Według adobe.com/software/flash/about korzystam z wersji 10.2.152.27, która, jak sądzę, jest wbudowaną Flashem w Chrome (używając Chrome 10.0.648.45 dev). Próbowałem już na kilku urządzeniach Ubuntu.
Yang
2
Uwaga: wydaje się, że chociaż działał ze wszystkimi odtwarzaczami filmów flash, już tak nie jest. Wygląda na to, że działa z niektórymi mniej znanymi stronami, ale nie z Youtube. Mogę tylko zgadywać, że Youtube znalazł sposób, aby utrzymać plik poza systemem plików…
liori
1
nadal działa dla mnie z wersją Chromium 33.0.1750.152-1 (Debian Jessie) i wersją Flashplayer 11, 22, 202, 346 (według adobe.com/software/flash/about )
jopasserat
24

Sprawdzanie / proc // fd / zrobiło dla mnie lewę:

$ 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]
...

Plik 11 , ten oznaczony jako „(usunięty)”, nadal wskazuje na plik pierwotnie utworzony w / tmp /, więc nie został całkowicie usunięty:

$ file -L 11 
11: Macromedia Flash Video

robić:

$ mplayer 11

odtworzy plik FLV.


Oto całkiem przydatna linia poleceń dostosowana do powyższej procedury. Może to wymagać drobnych zmian w dystrybucji / instalacji i typowych procesach.

Można wymienić flashz npviewerwymienić vlcz mplayer:

FLASHPID=\`pgrep -f flash\`; vlc /proc/$FLASHPID/fd/\`ls -l /proc/$FLASHPID/fd | grep tmp | cut -d" " -f9\`
omab
źródło
To nie działa dla mnie - zaktualizowałem odpowiedź szczegółowymi informacjami o tym, co widzę. Czy wiesz, dlaczego to może dla mnie nie działać? Wypróbowałem teraz kilka maszyn.
Yang
BTW, możesz zapisać flv za pomocąmplayer 11 -dumpstream -dumpfile outputname
liewl
8
Możesz go po prostu skopiować cp 11 / ... / ...
omab
10

Strumienie Flash przez większość czasu są prostymi plikami otrzymywanymi na żądanie HTTP.

Do twojego filmu na http://blip.tv/file/3627639

W przeglądarce Google Chrome możesz sprawdzić żądania sieciowe ( ctrl + shift + i), aby znaleźć najdłuższy termin zakończenia w twoim przypadku:

Fosslc-..
/file/get

kliknij go i skopiuj / wklej adres URL z pola „Poproś o adres URL”, do nowej karty

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

Doud
źródło
Fantastyczny! Kusi mnie, aby zaakceptować twoją odpowiedź, ponieważ faktycznie dla mnie zadziałała, ale poczekam trochę dłużej, aby zobaczyć, czy jakieś inne odpowiedzi faktycznie dotyczą lokalizacji pobranego pliku flv.
Yang
nie akceptuj tego, ponieważ to tylko podstęp dla twojej sprawy. Naprawdę chcę wiedzieć, gdzie do diabła przechowują tymczasowe pliki wideo.
Doud,
Hej, w porządku. Ja też chcę wiedzieć. Mam przeczucie, że jest on przechowywany gdzieś w plikach data_ *, które prawdopodobnie są stosami specyficznymi dla przeglądarki. Nie mogłem znaleźć żadnego narzędzia do ich przeszukiwania, poza nurkowaniem w bazie kodu Chrome.
Yang
9

Yang,

Tak, jest w ~ / .cache / google-chrome / Cache (cóż, mam zainstalowany Chromium, więc znalazłem go w ~ / .cache / chromium / Cache).

Jeśli oglądasz wideo i sortujesz według znacznika czasu:

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

Następnie, jeśli uruchomisz polecenie file, zobaczysz, które z nich to 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, zainstalowałem Google Chrome, aby to sprawdzić.

Wygląda na to, że katalog dla Google Chrome różni się nieco od Chromium.

Stosując te same techniki (tutaj określając identyfikator procesu przeglądarki, dane wyjściowe usunęły niektóre kolumny dla przejrzystości):

$ 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
źródło
To intrygujące, ponieważ dla mnie to nie działa. Zaktualizowałem odpowiedź wklejając to, co widzę. Czy to działa dla Ciebie z przykładowym adresem URL blip.tv, który podałem? Może to z powodu innej wersji Chrome - której używasz?
Yang,
Tak, użyłem twojego dokładnego adresu URL. Czy odtwarzałeś plik podczas uruchamiania poleceń? Spróbuj wyczyścić pamięć podręczną, odtworzyć plik, a następnie uruchom polecenia. To działało dla mnie i mogłem odtworzyć plik w Mplayerze, więc zadziałało dla mnie!
jyap
Niestety, wyczyszczenie pamięci podręcznej nie pomogło. Tak, plik był odtwarzany podczas uruchamiania tych poleceń. Zaktualizowałem moją odpowiedź o więcej informacji. Niektórzy odpowiadający twierdzą, że powinienem patrzeć na proces Flash, inni twierdzą, że powinienem spojrzeć na jeden z procesów przeglądarki, ale próbowałem obu, nawet na wszystkich procesach. Wszelkie pomysły na to, dlaczego dla mnie jest zepsute? Próbowałem już na kilku maszynach.
Yang
Zredagowałem moją odpowiedź powyżej, aby określić identyfikator procesu Google Chrome i uruchomić polecenie lsof. Wypróbuj to.
jyap
5

używając chromu 11.0.666.0 i wtyczki flash 10.2.152

grepping dla npviewer nie wytworzył dla mnie żadnego procesu flashowania, ale grepping dla flasha:

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

w zasadzie to samo, co sugerowane powyżej przez jyap

lsof | grep Flash

i możesz następnie postępować jak wyżej ...

dino
źródło
To nie działa dla mnie - zaktualizowałem odpowiedź szczegółowymi informacjami o tym, co widzę. Czy wiesz, dlaczego to może dla mnie nie działać? Wypróbowałem teraz kilka maszyn.
Yang,
3

Spróbuj wymienić otwarte pliki.

lsof | grep Flash
jyap
źródło
Czy to zadziałało dla ciebie? Dla mnie nic nie pojawia się - nie sądzę też, że tak, biorąc pod uwagę, że typowe pliki Flash * nie są wyświetlane w ich zwykłej lokalizacji.
Yang,
3

Niektórzy z nowszych graczy buforują w pamięci, aby uniemożliwić ludziom korzystanie z tych sztuczek. W takim przypadku nie będziesz w stanie nic uzyskać.

geekozaur
źródło
Chociaż jest to pomocna informacja i mając na uwadze, że nie wiem, jak sondować pamięć RAM (tylko, że jest to możliwe), nie zgadzam się z tym, że „nie będziesz w stanie nic uzyskać”. Tam, gdzie jest wola, znajdzie się sposób.
user66001
3

Naprawiłem ten problem. Oto kroki

  1. Idź do zainstalowanych wtyczek o: wtyczki w chrome / mozilla
  2. Kliknij Szczegóły, aby wyświetlić więcej informacji. Wyłącz wtyczkę Flash. Lokalizacja wtyczki to „/usr/lib/adobe-flashplugin/libflashplayer.so”
  3. Pobierz wersję tar.gz Flash Playera tutaj http://get.adobe.com/flashplayer/
  4. Wyodrębnij ten plik i skopiuj plik libflashplayer.so do / usr / lib / chromium-browser / plugins. Następnie włącz tę stronę wtyczek.
  5. Jeśli obejrzysz dowolny film, będzie on pobrany w /home//.cache/chromium/Default/Cache ten folder

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

Arul
źródło
2

W przypadku najnowszej przeglądarki Chrome w systemie Linux:

  1. Zidentyfikuj pid wtyczki Flash używanej przez Chrome:

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

    od teraz wtyczka jest nazywana libgcflashplayer.

  2. Zidentyfikuj plik Flash otwarty przez ten proces wtyczki Flash:

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

    lub

    lsof -p Flash_plugin_pid | grep -i deleted
    

    Poszukaj usuniętych plików.

  3. Skopiuj plik z /proc/[pid]/fd/[fileno]dorecovered_file.flv

HKVC
źródło
2

Używam chrome 11.06 na Ubuntu 10.04. Znalazłem moje pliki flv w ~ / .cache / google-chrome / Default / Cache. Wypróbuj

file * | grep Flash\ Video
użytkownik733032
źródło
2

Mała wskazówka ode mnie. Działa to w 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

Teraz możesz zaplanować ten skrypt za pomocą crontab. Można go zoptymalizować, aby nie było duplikatów plików FLV.

burkass
źródło
2

Korzystanie z przeglądarki Firefox w 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
źródło
0

Mam inny sposób, aby to zrobić w oparciu o deskryptor pliku założony w / proc (używam nowoczesnego basha w kilku wierszach)

#!/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
źródło