http://qs1969.pair.com?node_id=1151407


in reply to Re^3: awanti Perl not playing video with vlc plugin
in thread Perl not playing video with vlc plugin

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__