Mercurial > hg > nginx-tests
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 ############################################################################### |