В Google Chrome на Linux где находится flv, если не в / tmp?


37

Мне нравится хранить видео, потому что

  1. Мне нравится буферизовать их, а затем воспроизводить их последовательно в моем медиаплеере,
  2. Я хочу иметь возможность остановить / перезапустить свой браузер без потери всего буферизованного видео, и
  3. Флэш часто вылетает и выдает мне серые коробки .

Для многих сайтов с Flash-видео (включая Youtube) я могу найти flv-файл /tmp, обычно называемый FlashXX.... Но некоторым сайтам удается предотвратить появление этого файла, например, http://blip.tv/file/3627639 . Возможно, это вообще не наматывается на диск, но это было бы удивительно, так как все часовое видео может быть помещено в буфер без заметного влияния на мою оперативную память.

В Firefox я могу найти flv внутри его директории кеша. Но мне любопытно, как это сделать в Chrome. Я пытался искать в ~ / .cache / google-chrome /, но не нашел ничего, что выглядело правильно. Например:

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

Я попытался просмотреть открытые файлы для процесса Flash, но не увидел ни одного удаленного Flash-файла, который, как утверждают некоторые из приведенных ниже ответов, должен существовать:

$ 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

Я попробовал straceвсе процессы chrome для всего, что выглядело так, как будто это запись файла:

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

но просмотр вызовов write/ writev/ selectтолько указал мне на несколько FD, которые /proc/_/fd/оказались трубами / сокетами (предположительно, для процессов, чтобы общаться друг с другом). Также попробовал то же самое в npviewer.binпроцессе.

Я также попытался просто проверить все файлы, указанные в /proc/*/fd/( любых процессах), которые были недавно изменены, но не нашел ничего, что выглядело бы как содержащее flv. Я также попробовал ту же самую проверку на недавно измененных файлах под ~/.cache/google-chrome/.

Если это имеет значение, я использую релиз канала Chrome для разработчиков, который, как я считаю (всегда?), Использует свою собственную безопасную реализацию Flash. На данный момент я использую Chrome 10.0.648.45 dev. Согласно http://www.adobe.com/software/flash/about/ я работаю 10.2.152.27. Я попробовал несколько коробок Ubuntu сейчас. Я также попробовал несколько коробок Ubuntu сейчас, с теми же результатами.

Любые другие хотят нанести удар в этом?


Это может помочь, если вы предоставили ссылку на страницу, с которой у вас возникли проблемы.
Софи Альперт

@ Бен: Ой, я хотел это сделать. Добавлено!
Ян

Ответы:


31

Я заметил, что последние плагины Flash хранят файлы в / tmp, но они используют способ их удаления и сохранения дескриптора файла, чтобы сохранить их живыми. Это означает, что они по-прежнему хранятся на диске (до тех пор, пока дескриптор файла открывается флэш-плагином), но они не отображаются в списке каталогов (поскольку файл был удален).

Я писал об этом когда-то: получать флеш-видео из почти удаленных файлов.

Но все зависит от версии плагина Flash. Он также используется для хранения фильмов в / tmp или в кеше браузера.


В вашем очень интересном сообщении в блоге описывается, как это делать с Firefox, но мне интересно, как это сделать с помощью Chrome. Я искал lsof и / proc, но не нашел никаких признаков несвязанных файлов. У вас был успех с примером видео?
Ян

1
@Yang: Точно так же работает с Chrome, по крайней мере, на моем ноутбуке - только что протестировал. Я думаю, что это зависит больше от флэш-плеера, чем от веб-браузера. Какая версия плагина Flash у вас есть?
Liori

В соответствии с adobe.com/software/flash/about я использую 10.2.152.27, который, я думаю, является встроенной в Chrome Flash (с использованием Chrome 10.0.648.45 dev). Я попробовал несколько коробок Ubuntu сейчас.
Ян

2
Как примечание, похоже, что раньше он работал со всеми проигрывателями флэш-фильмов, это уже не так. Похоже, работает с некоторыми менее известными сайтами, но не Youtube. Я могу только догадываться, что Youtube нашел способ сохранить файл вне файловой системы…
liori

1
он все еще работает для меня с версией Chromium 33.0.1750.152-1 (Debian Jessie) и версией флэш-плеера 11,220,346 (согласно adobe.com/software/flash/about )
jopasserat

24

Проверка / proc // fd / добилась цели для меня:

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

Файл 11 , помеченный как «(удаленный)», по-прежнему указывает на файл, изначально созданный в / tmp /, поэтому он не полностью удален:

$ file -L 11 
11: Macromedia Flash Video

делает:

$ mplayer 11

воспроизведет файл FLV.


Вот довольно удобная командная строка, адаптированная из описанной выше процедуры. Это может потребовать незначительных корректировок для вашего дистрибутива / установки и того, какие процессы вы обычно используете.

Вы можете заменить flashна npviewer, заменить vlcна mplayer:

FLASHPID=\`pgrep -f flash\`; vlc /proc/$FLASHPID/fd/\`ls -l /proc/$FLASHPID/fd | grep tmp | cut -d" " -f9\`

Это не работает для меня - я обновил свой ответ с деталями того, что я вижу. Вы знаете, почему это может не сработать для меня? Я попробовал на нескольких машинах сейчас.
Ян

Кстати, вы можете сохранить FLV сmplayer 11 -dumpstream -dumpfile outputname
Liewl

8
Вы можете просто скопировать его cp 11 / ... / ...
omab

10

Флэш-потоки в большинстве случаев являются простыми файлами, полученными по запросу http.

Для вашего видео на http://blip.tv/file/3627639

В Google Chrome вы можете проверять сетевые запросы ( ctrl + shift + i) искать самые длинные для завершения в вашем случае:

Fosslc-..
/file/get

щелкните по нему и скопируйте / вставьте URL из поля «Запросить URL» в новую вкладку

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


Фантастика! Я испытываю искушение принять ваш ответ, так как он действительно работает для меня, но я подожду немного дольше, чтобы увидеть, действительно ли какие-либо другие ответы относятся к поиску загруженного FLV.
Ян

пожалуйста, не принимайте это, так как это просто уловка для вашего случая. Я очень хочу знать, где, черт возьми, хранятся временные видео файлы.
Дуд

Хех, все в порядке. Я тоже хочу знать. Я догадываюсь, что он хранится где-то в файлах data_ *, которые, вероятно, относятся к куче браузера. Я не мог найти какой-либо инструмент, чтобы рыться в них, хотя, кроме погружения в базу кода Chrome.
Ян

9

Ян,

Да, он находится в ~ / .cache / google-chrome / Cache (ну, у меня установлен Chromium, поэтому я нашел его в ~ / .cache / chromium / Cache).

Если вы смотрите видео и сортируете по отметке времени:

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

Затем, если вы запустите команду file, вы увидите, какие из них являются 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

ОК, я установил Google Chrome, чтобы проверить это.

Похоже, каталог для Google Chrome немного отличается от Chromium.

Используя те же приемы (здесь указывается идентификатор процесса браузера, в выходных данных для ясности удалены некоторые столбцы):

$ 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

Это интригует, потому что это не работает для меня. Я обновил свой ответ с вставкой того, что я вижу. Это работает для вас с примером URL-адреса blip.tv, который я дал? Может быть, это из-за другой версии Chrome - которую вы используете?
Ян

Да, я использовал ваш точный URL. Вы проигрывали файл во время выполнения команд? Попробуйте очистить кеш, воспроизвести файл и затем запустить команды. Это сработало для меня, и я мог воспроизвести файл в Mplayer, чтобы он сработал для меня!
jyap

Увы, очистка кеша не помогла. Да, файл воспроизводился во время выполнения этих команд. Обновил мой ответ с дополнительной информацией. Некоторые респонденты говорят, что я должен смотреть на процесс Flash, другие говорят, что я должен смотреть на один из процессов браузера, но я пробовал оба, даже смотря на все процессы. Любые идеи о том, почему это сломано для меня? Я попробовал на нескольких машинах сейчас.
Ян

Я отредактировал свой ответ выше, чтобы указать идентификатор процесса Google Chrome и запустить команду lsof. Попробуйте это.
jyap

5

используя хром 11.0.666.0 и плагин flash 10.2.152

grepping для npviewer не произвел никакого процесса для меня, но grepping для flash:

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

в основном то же самое, что JYAP выше предложено с

lsof | grep Flash

и вы можете продолжить, как указано выше ...


Это не работает для меня - я обновил свой ответ с деталями того, что я вижу. Вы знаете, почему это может не сработать для меня? Я попробовал на нескольких машинах сейчас.
Ян

3

Попробуйте перечислить открытые файлы.

lsof | grep Flash

Это сработало для вас? Ничего не получается для меня - я бы не догадался, что так будет, учитывая, что типичные файлы Flash * не отображаются в их обычном расположении.
Ян

3

Некоторые из новых игроков буферизируются в памяти, чтобы люди не могли использовать эти приемы. Вы не сможете ничего получить в этом случае.


Хотя это полезная информация, и, учитывая, что я не знаю, как исследовать ОЗУ (просто это возможно), я не согласен с тем, что вы «не сможете ничего получить». Где есть воля, там есть путь.
user66001

3

Я исправил эту проблему. Здесь шаги

  1. Перейти к установленным плагинам о: плагины в Chrome / Mozilla
  2. Нажмите Детали, чтобы просмотреть дополнительную информацию. Отключить плагин Flash. Расположение плагина будет «/usr/lib/adobe-flashplugin/libflashplayer.so»
  3. Загрузите версию флеш-плеера tar.gz здесь http://get.adobe.com/flashplayer/
  4. Извлеките этот файл и скопируйте libflashplayer.so в / usr / lib / chromium-browser / plugins. Затем включите это на странице плагина.
  5. Если вы просматриваете любое видео, оно будет загружено в /home//.cache/chromium/Default/Cache этой папки.

посмотрите http://www.arulraj.net/2011/03/google-chrome-download-video.html


2

Для последней версии Chrome для Linux:

  1. Определите pid плагина Flash, используемого Chrome:

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

    на данный момент плагин называется libgcflashplayer.

  2. Определите файл Flash, открытый этим процессом плагина Flash:

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

    или же

    lsof -p Flash_plugin_pid | grep -i deleted
    

    Ищите удаленные файлы.

  3. Скопируйте файл из /proc/[pid]/fd/[fileno]вrecovered_file.flv


2

Я использую Chrome 11.06 на Ubuntu 10.04. Я нашел мои flv файлы в ~ / .cache / google-chrome / Default / Cache. Попробуйте

file * | grep Flash\ Video

2

Небольшой совет от меня. Это работает в 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

Теперь вы можете запланировать этот скрипт с помощью crontab. Это можно оптимизировать, чтобы не было дублированных файлов FLV.


2

Использование Firefox на 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

0

У меня есть другой способ сделать это на основе файлового дескриптора, основанного в / proc (я использую современный bash в несколько строк)

#!/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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.