在Linux上的Google Chrome中,如果不在/ tmp中,那么flv在哪里?


37

我喜欢保留视频,因为

  1. 我喜欢缓冲它们,然后在媒体播放器中连续播放它们,
  2. 我希望能够停止/重新启动浏览器而不会丢失所有缓冲的视频,并且
  3. Flash经常崩溃并给我灰色框

对于很多带有Flash视频的网站(包括Youtube),我可以在中找到flv文件/tmp,通常名为FlashXX...。但是某些站点设法阻止该文件显示,例如http://blip.tv/file/3627639。可能根本没有将其后台处理到磁盘,但这令人惊讶,因为可以对整个一小时的视频进行缓冲,而不会显着影响我的RAM。

在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调用只会使我指向一些/proc/_/fd/显示为管道/套接字的FD(大概是进程之间相互通信的)。还尝试了相同的npviewer.bin过程。

我还尝试检查所有最近修改的/proc/*/fd/任何进程)中指向的所有文件,但没有找到任何看起来包含flv的文件。我还尝试了对最近修改的文件下的相同检查~/.cache/google-chrome/

如果有什么不同,我使用的是Chrome的dev通道版本,我相信(总是?)使用自己的安全Flash实施。在进行此更新时,我正在使用Chrome 10.0.648.45开发人员。根据http://www.adobe.com/software/flash/about/,我正在运行10.2.152.27。我已经尝试了几个Ubuntu盒子。我现在还尝试了几个Ubuntu盒子,结果相同。

还有其他人想对此采取行动吗?


如果您提供了遇到问题的页面的链接,则可能会有所帮助。
索菲·阿尔珀特

@Ben:糟糕,我打算这样做。添加!

Answers:


31

我观察到最近的Flash插件确实将文件存储在/ tmp中,但是它们使用了一种技巧来删除它们并保持文件句柄保持打开状态,以使它们保持活动状态。这意味着它们仍然保留在驱动器上(只要通过Flash插件打开了文件句柄),但是它们在目录列表中不可见(因为文件已被删除)。

我写了一段关于这个时代的文章:从几乎已删除的文件中获取Flash视频

但这完全取决于Flash插件的版本。它曾经用于将电影存储在/ tmp或浏览器的缓存中。


您的博客文章非常有趣,描述了如何使用Firefox执行此操作,但我想知道如何使用Chrome浏览器执行此操作。我一直在查看lsof和/ proc,但是没有发现任何未链接文件的迹象。示例视频成功了吗?

1
@Yang:至少在我的笔记本电脑上,经过测试的铬使用相同的确切方法。我认为它更多地取决于Flash Player而不是Web浏览器。您有什么版本的Flash插件?
liori 2011年

根据adobe.com/software/flash/about的介绍,我正在运行10.2.152.27,我认为这是Chrome内置的Flash(使用Chrome 10.0.648.45开发人员)。我已经尝试了几个Ubuntu盒子。

2
值得注意的是,虽然它过去可以与所有Flash电影播放器​​一起使用,但现在不再如此了。它似乎可以与一些鲜为人知的网站一起使用,但不适用于Youtube。我只能猜测,Youtube找到了一种使文件脱离文件系统的方法……
liori 2012年

1
它仍然为我的作品与铬版33.0.1750.152-1(Debian的杰西)和FlashPlayer的版本11,2,202,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文件。


这是根据上述过程改编而成的非常方便的命令行。您可能需要对发行/安装以及通常运行的进程进行少量调整。

您可以替换flashnpviewer,替换vlcmplayer

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

这对我不起作用-我用看到的详细信息更新了答案。您知道为什么它可能对我不起作用吗?我现在尝试了几台机器。

顺便说一句,您可以使用mplayer 11 -dumpstream -dumpfile outputname
liewl

8
您可以复制cp 11 / ... / ...
–omab 2011年

10

大多数时候,Flash流是通过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的问题。

请不要接受它,因为这只是您的情况的一个把戏。我真的很想知道地狱Flash在哪里存储临时视频文件。
Doud

嘿,好吧。我也想知道。我的直觉是将其存储在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略有不同。

使用相同的技术(此处指定浏览器的进程ID,为清楚起见,输出删除了一些列):

$ 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

这很有趣,因为它对我不起作用。我用粘贴的内容更新了答案。我提供的示例blip.tv URL对您有用吗?也许是因为Chrome版本不同-您使用的是哪个?

是的,我使用了您的确切网址。您在运行命令时正在播放文件吗?尝试清除缓存,播放文件,然后运行命令。它对我有用,我可以在Mplayer中播放文件,所以对我有用!
jyap 2011年

las,清除缓存没有帮助。是的,我正在运行这些命令时正在播放文件。使用更多信息更新了我的答案。一些回答者说我应该查看Flash进程,其他回答者则应该查看浏览器进程之一,但是我尝试了两者,甚至查看了所有进程。有什么想法对我来说坏了吗?我已经尝试了几台机器。

我在上面编辑了答案,以指定Google Chrome的进程ID并运行lsof命令。试试看。
jyap 2011年

5

使用Chrome 11.0.666.0和Flash插件10.2.152

grepping for npviewer不会为我生成任何刷新过程,但是grepping for 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

一些较新的播放器在内存中缓冲,以试图使人们无法使用这些技巧。在这种情况下,您将无法获得任何东西。


尽管这是有用的信息,并且牢记我不知道如何探查RAM(只是有可能),但我不同意您“将无法获得任何东西”。有志者,事竟成。
2013年

3

我解决了这个问题。这里的步骤是

  1. Goto安装的插件about:Chrome / mozilla中的插件
  2. 单击详细信息以查看更多信息。禁用Flash插件。插件的位置为“ /usr/lib/adobe-flashplugin/libflashplayer.so”
  3. 从此处http://get.adobe.com/flashplayer/下载tar.gz版本的Flash Player。
  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

对于Linux上的最新Chrome:

  1. 确定Chrome使用的Flash插件的pid:

    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

我在Ubuntu 10.04上使用Chrome 11.06。我在〜/ .cache / google-chrome / Default / Cache中找到了我的flv文件。尝试一个

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

在Kubuntu上使用Firefox:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.