use strict;
use warnings;
use HTTP::Proxy;
use HTTP::Proxy::BodyFilter::save;
use Digest::MD5 qw( md5_hex);
use POSIX qw( strftime );
my $proxy = HTTP::Proxy->new(@ARGV);
my $flv_filter = HTTP::Proxy::BodyFilter::save->new(
filename => sub {
my ($message) = @_;
my $uri = $message->request->uri;
my ($id) = ( $uri->query || '' ) =~ /id=([^&;]+)/i;
$id = md5_hex($uri) unless $id;
my ($host) = $uri->host =~ /([^.]+\.[^.]+)$/;
my $file = strftime "flv/%Y-%m-%d/${host}_$id.flv", localtime;
return if -e $file && -s $file == $message->content_length;
return $file;
},
);
for my $mime (qw( video/flv video/x-flv )) {
$proxy->push_filter(
mime => $mime,
response => $flv_filter,
);
}
$proxy->start;