[转载]下载rtmpe协议的视频文件
第一次是面对acfun变态的超码率+摧毁文件头,播放器根本不能播放,最终手工修复文件头解决(教程有时间再写吧,资料目前还不足);第二次,也就是这次,真的很郁闷。
什么是rtmpe协议:
实时消息 协议(RTMP)是Adobe公司开发的专利协议,是为 了flash播放器和服务器之间通过因特网交换流化的音频,视频及其他数据的交换。
使用rtmpe协议通信,所以的数据均不在本地存储。
这也就是意味着,视频没有缓冲,只能在线播放。而播放完成后,不论是/tmp还是cache,甚至是内存中你都不能找到任何相关文件。如果replay,只能再次获取。
因为这个特性,受到很多视频网站青睐(版权问题得以解决),例如brightcove.com,hulu,但是访问者将不能再像以前那样下载到视频文件。如何解决这个问题呢?
-
解决方案
(以mit的这个项目视频为例 <-最初也就是它让我头痛欲裂的)
必须工具:rtmpdump
arch:
yaourt -S rtmpdump
-
嗅探+rtmpdump法:
打开大杀器wireshark,选择当前网卡(如果已经开启vpn,请选择vpn的虚拟网卡。监听物理网卡将无法获得有效数据)
协议rtmp
然后打开视频网页,加载视频。当视频开始播放后,停止嗅探,对数据进行分析(需要耐心,恒心和信心~)。
不愧是大杀器(如上图)。
然后很简单了,使用rtmpdump进行下载。
rtmpdump -r rtmpe://{URL} -o {FILENAME}.flv
-
使用get_flash_videos下载:
get_flash_videos是一款由perl写的跨平台flv下载工具,可以用来下载youtube,vimeo,brightcove(同样需要安装rtmpdump)等网站的视频。强大而易用。(项目主页)
安装比较困难(的确非常困难),因为一些依赖难以搞定。
以arch为例:
yaourt -S get_flash_vides
但是此方法安装好的文件不能运行!(28-05-2010),所以您需要使用如下方法进行安装:(官方-安装手册)
-
yaourt -S get_flash_videos
(是的,您需要使用这个命令以安装相关依赖)
-
sudo wget http://get-flash-videos.googlecode.com/files/get_flash_videos-1.21 -O /usr/local/bin/get_flash_videos
//下载最新版程序并覆盖已安装程序
-
sudo chmod a+x /usr/local/bin/get_flash_videos
//赋予执行权限
(debian请安装 libwww-mechanize-perl libxml-simple-perl;您亦可选择combined version,此版本可能无需下载Data::AMF::Packet)
- 设置cpan
sudo cpan
此步骤是对cpan进行设置,基本上一路enter即可,最后需要设置源列表,您可以在这里找到源。
- 安装安装 Data::AMF::Packet
cpan -i Data::AMF::Packet
(此步骤可能需要对编译进行一些设置,基本上一路yes即可。安装编译过程可能需要占用很多cpu资源,请注意)
至此,get_flash_videos安装完毕。例如,您可以通过如下方式使用它进行下载:
get_flash_videos http://web.mit.edu/newsoffice/2010/gesture-computing-0520.html
执行结果如下:
delectate@delectate:~$ get_flash_videos http://web.mit.edu/newsoffice/2010/gesture-computing-0520.html
Downloading http://web.mit.edu/newsoffice/2010/gesture-computing-0520.html
Using method 'brightcove' for http://c.brightcove.com/services/viewer/federated_f9/36804639001?isVid=1
RTMPDump v2.2d
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO: duration 54.86
INFO: lasttimestamp 54.86
INFO: datasize 1344999.00
INFO: metadatacreator FlixEngineLinux_8.0.15.3 (www.on2.com)
INFO: canSeekToEnd FALSE
INFO: videocodecid 4.00
INFO: width 480.00
INFO: height 320.00
INFO: videodatarate 160.66
INFO: framerate 30.00
INFO: videosize 1125570.00
INFO: audiocodecid 2.00
INFO: audiodatarate 31.25
INFO: audiosize 219429.00
MIT_-_motion-sensing.flv: 100% (1388.94 / 1388.94 KiB)
Done. Saved 1422275 bytes to MIT_-_motion-sensing.flv
delectate@delectate:~$
可以看到,它完美的解析了网页的嵌入式播放器并获得rtmp源,然后调用rtmpdump进行下载。