#!/usr/bin/env perl # (C) 2009 Andrej Stepanchuk my $version = 1.09; use Env qw[@PATH]; use Fcntl; use File::Copy; use File::Path; use File::stat; use Getopt::Long; use HTML::Entities; use HTTP::Cookies; use HTTP::Headers; use IO::Seekable; use IO::Socket; use LWP::ConnCache; #use LWP::Debug qw(+); use LWP::UserAgent; use POSIX qw(mkfifo); use strict; #use warnings; use Time::Local; use URI; use XML::Simple; use Data::Dumper; use Crypt::Rijndael; use Digest::MD5 qw(md5 md5_hex md5_base64); use Digest::HMAC_MD5 qw(hmac_md5 hmac_md5_hex); use MIME::Base64; my ($rtmpurl, $output, $help, $host, $port, $protocol, $playpath, $swfurl, $tcurl, $pageurl, $app, $swfhash, $swfsize, $auth, $flashVer, $live, $timeout, $buffertime, $streamer, $sport); usage() if (!GetOptions( 'help|h' => \$help, 'rtmp|r=s', => \$rtmpurl, 'host|n=s' => \$host, 'port|c=i' => \$port, 'protocol|l=i' => \$protocol, 'playpath|y=s' => \$playpath, 'swfUrl|s=s' => \$swfurl, 'tcUrl|t=s' => \$tcurl, 'pageUrl|p=s' => \$pageurl, 'app|a=s' => \$app, 'swfhash|w=s' => \$swfhash, 'swfsize|x=i' => \$swfsize, 'auth|u=s' => \$auth, 'flashVer|f=s' => \$flashVer, 'live|v' => \$live, 'timeout|m=i' => \$timeout, 'buffer|b=i' => \$buffertime, 'output|o=s' => \$output, 'streamer=s' => \$streamer, 'sport=i' => \$sport ) or defined $help ); unless(defined($streamer)) { print "You must specify the stream server!\n"; exit 1; } if(!defined($rtmpurl) && !defined($playpath)) { print "You must specify playpath ot rtmpurl!"; exit 1; } my $firstParam=1; my $url = "http://$streamer"; if(defined($sport)) { $url = "$url:$sport"; } $url = "$url/"; if(defined($rtmpurl)) { if($firstParam == 1) { $firstParam=0; $url = "$url?r=".urlencode($rtmpurl); } else { $url = "$url&r=".urlencode($rtmpurl); } } if(defined($playpath)) { if($firstParam == 1) { $firstParam=0; $url = "$url?y=".urlencode($playpath); } else { $url = "$url&y=".urlencode($playpath); } } if(defined($host)) { $url = "$url&n=".urlencode($host); } if(defined($port)) { $url = "$url&c=$port"; } if(defined($protocol)) { $url = "$url&l=$protocol"; } if(defined($swfurl)) { $url = "$url&s=".urlencode($swfurl); } if(defined($tcurl)) { $url = "$url&t=".urlencode($tcurl); } if(defined($pageurl)) { $url = "$url&p=".urlencode($pageurl); } if(defined($app)) { $url = "$url&a=".urlencode($app); } if(defined($swfhash)) { $url = "$url&w=".urlencode($swfhash); } if(defined($swfsize)) { $url = "$url&x=$swfsize"; } if(defined($auth)) { $url = "$url&u=".urlencode($auth); } if(defined($flashVer)) { $url = "$url&f=".urlencode($flashVer); } if(defined($live)) { $url = "$url&v="; } if(defined($timeout)) { $url = "$url&m=$timeout"; } if(defined($buffertime)) { $url = "$url&b=$buffertime"; } print "final url: $url\n"; my $cmd = "wget \"$url\" -O \"$output\""; system($cmd); exit 0; sub urlencode { my $str = shift; $str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; return $str; } sub usage { print "Unknown option: @_\n" if ( @_ ); system("./streams_x86 --help"); exit 0; } #my $cmd = "wine rtmpdump_win32.exe --playpath \"$playpath\" --protocol 3 -r \"$rtmpurl\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --host \"$ip\" --port 1935 --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" --swfUrl \"http://www.hulu.com/player.swf\" --tcUrl \"$tcurl\" --app \"$app\" -o test.flv"; #my $cmd = "./rtmpdump --protocol 3 --resume -r \"$rtmpurl\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --host \"$ip\" --port 1935 --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" --swfUrl \"http://www.hulu.com/player.swf\" --tcUrl \"$tcurl\" --app \"$app\" -o test.flv"; #my $swfurl = "http://www.hulu.com/player.swf"; #$rtmpurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; #$progurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; #$tcurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; #$app =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; #$swfurl =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; #my $cmd = "wget \"http://$ip:$port/?r=$rtmpurl&l=3&w=$playerhash&x=$playersize&n=$host&c=1935&p=$progurl&s=$swfurl&t=$tcurl&a=$app\" -O test.flv"; #$rtmpurl =~ s/rtmp:\/\//rtmpe:\/\//; #my $cmd = "./rtmpdump --rtmp \"$rtmpurl\" --swfUrl \"http://www.hulu.com/player.swf\" --swfhash \"$huluplayerhash\" --swfsize \"$huluplayersize\" --pageUrl \"$progurl\" --flashVer \"LNX 9,0,124,0\" -o test.flv"; #print "\nCOMMAND1: $cmd\n"; #system($cmd);