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 сейчас, с теми же результатами.

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

13 ответов13

31

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

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

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

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\`
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

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
5

используя Chromium 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

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

  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

3

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

lsof | grep Flash
3

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

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

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

file * | grep Flash\ Video
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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .