comparison mp4.t @ 1555:809d67d48d21

Tests: added mp4 test with chunk offset overflow.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 12 Mar 2020 15:56:11 +0300
parents 1220f0055135
children 3ff92feb99d1
comparison
equal deleted inserted replaced
1554:cae83c98654a 1555:809d67d48d21
63 . '-map 0:0 -map 1:0 -pix_fmt yuv420p -g 15 -c:v libx264 ' 63 . '-map 0:0 -map 1:0 -pix_fmt yuv420p -g 15 -c:v libx264 '
64 . '-movflags +faststart ' 64 . '-movflags +faststart '
65 . "${\($t->testdir())}/no_mdat.mp4") == 0 65 . "${\($t->testdir())}/no_mdat.mp4") == 0
66 or die "Can't create mp4 file: $!"; 66 or die "Can't create mp4 file: $!";
67 67
68 $t->run()->plan(26); 68 my $sbad = <<'EOF';
69 00000000: 00 00 00 1c 66 74 79 70 69 73 6f 6d 00 00 02 00 |....ftypisom....|
70 00000010: 69 73 6f 6d 69 73 6f 32 6d 70 34 31 00 00 00 09 |isomiso2mp41....|
71 00000020: 6d 64 61 74 00 00 00 00 94 6d 6f 6f 76 00 00 00 |mdat.....moov...|
72 00000030: 8c 74 72 61 6b 00 00 00 84 6d 64 69 61 00 00 00 |.trak....mdia...|
73 00000040: 7c 6d 69 6e 66 00 00 00 74 73 74 62 6c 00 00 00 ||minf...tstbl...|
74 00000050: 18 73 74 74 73 00 00 00 00 00 00 00 01 00 00 03 |.stts...........|
75 00000060: 3a 00 00 04 00 00 00 00 28 73 74 73 63 00 00 00 |:.......(stsc...|
76 00000070: 00 00 00 00 02 00 00 00 01 00 00 03 0f 00 00 00 |................|
77 00000080: 01 00 00 00 02 00 00 00 2b 00 00 00 01 00 00 00 |........+.......|
78 00000090: 14 73 74 73 7a 00 00 00 00 00 00 05 a9 00 00 03 |.stsz...........|
79 000000a0: 3b 00 00 00 18 63 6f 36 34 00 00 00 00 00 00 00 |;....co64.......|
80 000000b0: 01 ff ff ff ff f0 0f fb e7 |.........|
81 EOF
82
83 $t->write_file('bad.mp4', unhex($sbad));
84 $t->run()->plan(27);
69 85
70 ############################################################################### 86 ###############################################################################
71 87
72 my $test_uri = '/test.mp4'; 88 my $test_uri = '/test.mp4';
73 89
97 'start beyond short track'); 113 'start beyond short track');
98 like(http_head("$test_uri?start=21"), qr!HTTP/1.1 500!, 'start beyond EOF'); 114 like(http_head("$test_uri?start=21"), qr!HTTP/1.1 500!, 'start beyond EOF');
99 115
100 $test_uri = '/no_mdat.mp4', goto again unless $test_uri eq '/no_mdat.mp4'; 116 $test_uri = '/no_mdat.mp4', goto again unless $test_uri eq '/no_mdat.mp4';
101 117
118 # corrupted formats
119
120 TODO: {
121 local $TODO = 'not yet' unless $t->has_version('1.17.9');
122
123 like(http_get("/bad.mp4?start=0.5"), qr/500 Internal/, 'co64 chunk beyond EOF');
124
125 }
126
102 ############################################################################### 127 ###############################################################################
103 128
104 sub durations { 129 sub durations {
105 my ($t, $start, $end) = @_; 130 my ($t, $start, $end) = @_;
106 my $path = $t->{_testdir} . '/frag.mp4'; 131 my $path = $t->{_testdir} . '/frag.mp4';
121 my $r = `ffprobe -show_streams $path 2>/dev/null`; 146 my $r = `ffprobe -show_streams $path 2>/dev/null`;
122 Test::Nginx::log_core('||', $r); 147 Test::Nginx::log_core('||', $r);
123 sprintf "%.1f %.1f", $r =~ /duration=(\d+\.\d+)/g; 148 sprintf "%.1f %.1f", $r =~ /duration=(\d+\.\d+)/g;
124 } 149 }
125 150
151 sub unhex {
152 my ($input) = @_;
153 my $buffer = '';
154
155 for my $l ($input =~ m/: +((?:[0-9a-f]{2,4} +)+) /gms) {
156 for my $v ($l =~ m/[0-9a-f]{2}/g) {
157 $buffer .= chr(hex($v));
158 }
159 }
160
161 return $buffer;
162 }
163
126 ############################################################################### 164 ###############################################################################