static html page has no header.. every time you make a http request headers are sent before the content
a static html page on your local harddrive does not test how http works
Anyway, this works for me
#!/usr/bin/perl --
use CGI::Carp qw/ fatalsToBrowser /;
use strict;
use warnings;
use IO::Handle;
use CGI;
use autodie qw/ open /;
Main( @ARGV );
exit( 0 );
sub Main {
STDOUT->autoflush;
my $cgi = CGI->new;
PrintHeadersAndContent ( $cgi );
}
sub PrintHeadersAndContent {
use autodie qw/ open /;
my( $cgi ) = @_;
my $filename = q{/harcoded/path/to/one/file};
open my($fh),'<:raw', $filename; ## or die by autodie
my $attachment = 'Juice.mp4';
my $size = -s $filename;
my $begin = 0;
my $end = $size;
if( my $httprange = $cgi->http('range') ){
if( $httprange =~ /bytes=(\d+)(?:-(\d*))?/i ){
my $from = $1;
my $to = $2;
$from and $begin = $from;
$to and $end = $to;
}
}
my $range = "$begin-$size/$size";
print $cgi->header(
-nph => 1,
-type => "application/x-vlc-plugin",
-attachment => $attachment,
-Accept_Ranges => 'bytes',
-Content_Length => $size,
-Content_Range => $range,
-Content_Transfer_Encoding => 'binary',
);
my $numbytes = 1024*16;;
seek $fh, $begin, 0;
my $curr = $begin;
while(not eof $fh) {
my $readed = read $fh, my($data) , $numbytes;
print STDOUT $data;
$readed == $numbytes
or warn "Only read($readed) but wanted($numbytes): $! ## $
+^E ";
$curr += $numbytes;
if( $curr + $numbytes > $size ){
$numbytes = $size - $curr;
}
}
close $fh;
}
__END__
|