w32codec_dl.pl
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· PL 代码 · 共 170 行
PL
170 行
#!/usr/bin/perl## usage: w32codec_dl.pl (codec.conf location)# this script will use MS's codec dl interface as used by MS Media Player# to attempt to locate the codecs listed in codecs.conf. It will download# them to a directory "codecs/" below the current dir.# you will need the libwww-perl stuff and the utility "cabextract"# which may be found at http://www.kyz.uklinux.net/cabextract.php3# By Tom Lees, 2002. I hereby place this script into the public domain.#use LWP::Debug qw(+);use LWP::UserAgent;$ua = LWP::UserAgent->new;$ua->agent ("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");# Parse the etc/codecs.conf filemy $cconf = $ARGV[0];open CCONF, "<$cconf";my $codec = "(none)";my $mscodec = 0;my $cc, @ccl;mkdir "codecs";chdir "codecs";CC: while (<CCONF>){ next CC if (m/^[ \t]*\;/); s/\;.*//g; s/#.*//g; if (m/^videocodec (.*)/) { $codec = $1; } elsif (m/^[ \t]+driver (.*)/) { if ($1 eq "dshow" || $1 eq "vfw") { $mscodec = 1; } else { $mscodec = 0; } } elsif (m/^[ \t]+fourcc (.*)/ && $mscodec == 1) { $cclist = $1; chomp $cclist; #@ccl = (); do { if ($cclist =~ m/\"(....)\"[, ]*(.*)/) { $cc = $1; $cclist = $2; } elsif ($cclist =~ m/[, ]*(....)[, ]*(.*)/) { $cc = $1; $cclist = $2; } else { $cc = $cclist; $cclist = ""; } if (!($cc =~ m/^[ \t]+/)) { push @ccl, ($cc); } } while (length ($cclist) > 0); }}close CCONF;# Find the codecsopen CODEC_CABS, ">codecs.locations.info";%fcc_try = ();while ($#ccl > 0){ $cc = pop (@ccl); if (!$fcc_try{"$cc"}) { $fcc_try{"$cc"} = 1; if (!find_codec ($cc)) { print "$cc found\n"; } else { print "MS didn't find $cc\n"; } }}close CODEC_CABS;%got_codecs = ();sub find_codec{ my ($fourcc) = @_; my $guid = sprintf ("%08X", unpack ("V", $fourcc))."-0000-0010-8000-00AA00389B71"; my $req = HTTP::Request->new (POST => "http://activex.microsoft.com/objects/ocget.dll"); $req->header ('Accept', '*/*'); $req->content_type ('application/x-www-form-urlencoded'); $req->content ("CLSID=%7B${guid}%7D\n"); #$req->content ('CLSID={'.${guid}.'}'); my $res = $ua->request ($req); if ($res->is_success) { print "Lookup returned success... weird!\n"; return 1; } else { # Codec location if ($res->code == 302) { my $loc = $res->headers->header ("Location"); if (!$got_codecs{"$loc"}) { print CODEC_CABS "$loc\n"; $got_codecs{"$loc"} = 1; get_codec ($loc); }# else# {# print "Already have $loc\n";# } return 0; } else {# print "Lookup failed (Microsoft probably doesn't know this codec)\n"; return 1; } }}sub get_codec{ my ($url) = @_; my $req = HTTP::Request->new (GET => $url); $req->header ("Accept", "*/*"); my $res = $ua->request ($req); if ($res->is_success) { open TMP, ">tmp.cab" or die "Unable to open tmp.cab"; print TMP $res->content; close TMP; system "cabextract tmp.cab"; unlink "tmp.cab"; } else { print "No such file!\n"; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?