#!/usr/bin/perl use warnings; use strict; use File::Temp qw(tempfile); use File::Spec; use Test::More tests => 1 + 2 * 5; # general tests + number of samples * test per sample BEGIN { use_ok('FLV::Info'); } my @samples = ( { file => File::Spec->catfile('t', 'samples', 'flash6.flv'), expect => { }, }, { file => File::Spec->catfile('t', 'samples', 'flash8.flv'), expect => { }, }, ); my @cleanup; END { # Delete temp files unlink $_ for @cleanup; } for my $sample (@samples) { # Read an FLV file and check selected metadata against expectations my $flv = FLV::File->new(); $flv->parse($sample->{file}); $flv->populate_meta(); # Write the FLV back out as a temp file my ($fh, $tempfilename) = tempfile(); die if (! -f $tempfilename); push @cleanup, $tempfilename; ok($flv->serialize($fh), 'serialize'); close $fh; # Read the temp file back and compare it to the original -- should # be identical except for hash key ordering my $newflv = FLV::File->new(); $newflv->parse($tempfilename, { record_positions => 1 }); my @keyframes = $newflv->get_body->get_video_keyframes; is($newflv->get_meta('filesize'), -s $tempfilename, 'meta filesize'); is_deeply($newflv->get_meta('keyframes')->{filepositions}, [map {$_->_pos()} @keyframes], 'meta keyframe positions'); is_deeply([map {sprintf '%.03f', $_} @{$newflv->get_meta('keyframes')->{times}}], [map {sprintf '%.03f', 0.001*$_->{start}} @keyframes], 'meta keyframe times'); my $reader = FLV::Info->new(); $reader->parse($tempfilename); like($reader->report(), qr/>>>/, 'keyframe metadata is in report'); }