Skip to content

Instantly share code, notes, and snippets.

@davel
Created January 6, 2012 18:10
Show Gist options
  • Save davel/1571713 to your computer and use it in GitHub Desktop.
Save davel/1571713 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use strict;
use warnings;
open(my $fh, "<", $ARGV[0]) or die $!;
parse_mp4($fh, -s $fh);
exit 0;
sub parse_mp4 {
my ($fh, $len, $line) = @_;
$line = "$line ";
my $so_far = 0;
while ($so_far < $len) {
my $offset = sysseek($fh, 0, 1);
sysread($fh, my $size, 4)==4 or die $!;
sysread($fh, my $type, 4)==4 or die $!;
$size = unpack("N", $size);
print "$line Type: $type, size = $size, offset=$offset, offset mod 8=".($offset % 8)."\n";
if ($type =~ /^(?:moov|udta|trak|mdia|minf|stbl)$/) {
parse_mp4($fh, $size-8, $line);
}
else {
seek($fh, $size-8, 1) or die $!;
}
$so_far+=$size;
}
die "flown off eof" unless $so_far == $len;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment