fixed conflicts, added aacstream and h264stream elements
Showing
4 changed files
with
97 additions
and
479 deletions
... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
14 | (function(window, videojs, undefined) { | 14 | (function(window, videojs, undefined) { |
15 | 'use strict'; | 15 | 'use strict'; |
16 | 16 | ||
17 | var PacketStream, ParseStream, ProgramStream, Transmuxer, MP2T_PACKET_LENGTH, H264_STREAM_TYPE, ADTS_STREAM_TYPE, mp4; | 17 | var PacketStream, ParseStream, ProgramStream, Transmuxer, AacStream, H264Stream, MP2T_PACKET_LENGTH, H264_STREAM_TYPE, ADTS_STREAM_TYPE, mp4; |
18 | 18 | ||
19 | MP2T_PACKET_LENGTH = 188; // bytes | 19 | MP2T_PACKET_LENGTH = 188; // bytes |
20 | H264_STREAM_TYPE = 0x1b; | 20 | H264_STREAM_TYPE = 0x1b; |
... | @@ -273,15 +273,22 @@ ProgramStream = function() { | ... | @@ -273,15 +273,22 @@ ProgramStream = function() { |
273 | data: [], | 273 | data: [], |
274 | size: 0 | 274 | size: 0 |
275 | }, | 275 | }, |
276 | flushStream = function(stream, type) { | 276 | flushStream = function(stream, type, pes) { |
277 | var | 277 | var |
278 | event = { | 278 | event = { |
279 | type: type, | 279 | type: type, |
280 | data: new Uint8Array(stream.size) | 280 | data: new Uint8Array(stream.size), |
281 | }, | 281 | }, |
282 | i = 0, | 282 | i = 0, |
283 | fragment; | 283 | fragment; |
284 | 284 | ||
285 | // move over data from PES into Stream frame | ||
286 | event.pts = pes.pts; | ||
287 | event.dts = pes.dts; | ||
288 | event.pid = pes.pid; | ||
289 | event.dataAlignmentIndicator = pes.dataAlignmentIndicator; | ||
290 | event.payloadUnitStartIndicator = pes.payloadUnitStartIndicator | ||
291 | |||
285 | // do nothing if there is no buffered data | 292 | // do nothing if there is no buffered data |
286 | if (!stream.data.length) { | 293 | if (!stream.data.length) { |
287 | return; | 294 | return; |
... | @@ -323,7 +330,7 @@ ProgramStream = function() { | ... | @@ -323,7 +330,7 @@ ProgramStream = function() { |
323 | // if a new packet is starting, we can flush the completed | 330 | // if a new packet is starting, we can flush the completed |
324 | // packet | 331 | // packet |
325 | if (data.payloadUnitStartIndicator) { | 332 | if (data.payloadUnitStartIndicator) { |
326 | flushStream(stream, streamType); | 333 | flushStream(stream, streamType, data); |
327 | } | 334 | } |
328 | 335 | ||
329 | // buffer this fragment until we are sure we've received the | 336 | // buffer this fragment until we are sure we've received the |
... | @@ -369,28 +376,69 @@ ProgramStream = function() { | ... | @@ -369,28 +376,69 @@ ProgramStream = function() { |
369 | * will flush the buffered packets. | 376 | * will flush the buffered packets. |
370 | */ | 377 | */ |
371 | this.end = function() { | 378 | this.end = function() { |
379 | debugger | ||
372 | flushStream(video, 'video'); | 380 | flushStream(video, 'video'); |
373 | flushStream(audio, 'audio'); | 381 | flushStream(audio, 'audio'); |
374 | }; | 382 | }; |
375 | }; | 383 | }; |
376 | ProgramStream.prototype = new videojs.Hls.Stream(); | 384 | ProgramStream.prototype = new videojs.Hls.Stream(); |
377 | 385 | ||
386 | /* | ||
387 | * Accepts a ProgramStream and emits data events with parsed | ||
388 | * AAC Audio Frames of the individual packets. | ||
389 | */ | ||
390 | AacStream = function() { | ||
391 | var self; | ||
392 | AacStream.prototype.init.call(this); | ||
393 | self = this; | ||
394 | |||
395 | this.push = function(packet) { | ||
396 | if (packet.type == "audio") { | ||
397 | console.log('AAC Stream Push!'); | ||
398 | this.trigger('data', packet); | ||
399 | } | ||
400 | }; | ||
401 | }; | ||
402 | AacStream.prototype = new videojs.Hls.Stream(); | ||
403 | |||
404 | /** | ||
405 | * Accepts a ProgramStream and emits data events with parsed | ||
406 | * AAC Audio Frames of the individual packets. | ||
407 | */ | ||
408 | H264Stream = function() { | ||
409 | var self; | ||
410 | H264Stream.prototype.init.call(this); | ||
411 | self = this; | ||
412 | |||
413 | this.push = function(packet) { | ||
414 | if (packet.type == "video") { | ||
415 | console.log('h264 Stream Push!'); | ||
416 | this.trigger('data', packet); | ||
417 | } | ||
418 | }; | ||
419 | }; | ||
420 | H264Stream.prototype = new videojs.Hls.Stream(); | ||
421 | |||
422 | |||
378 | Transmuxer = function() { | 423 | Transmuxer = function() { |
379 | var self = this, packetStream, parseStream, programStream; | 424 | var self = this, packetStream, parseStream, programStream, aacStream, h264Stream; |
380 | Transmuxer.prototype.init.call(this); | 425 | Transmuxer.prototype.init.call(this); |
381 | 426 | ||
382 | // set up the parsing pipeline | 427 | // set up the parsing pipeline |
383 | packetStream = new PacketStream(); | 428 | packetStream = new PacketStream(); |
384 | parseStream = new ParseStream(); | 429 | parseStream = new ParseStream(); |
385 | programStream = new ProgramStream(); | 430 | programStream = new ProgramStream(); |
431 | aacStream = new AacStream(); | ||
432 | h264Stream = new H264Stream(); | ||
386 | 433 | ||
387 | packetStream.pipe(parseStream); | 434 | packetStream.pipe(parseStream); |
388 | parseStream.pipe(programStream); | 435 | parseStream.pipe(programStream); |
436 | programStream.pipe(aacStream); | ||
389 | 437 | ||
390 | // generate an init segment | 438 | // generate an init segment |
391 | this.initSegment = mp4.initSegment(); | 439 | this.initSegment = mp4.initSegment(); |
392 | 440 | ||
393 | programStream.on('data', function(data) { | 441 | aacStream.on('data', function(data) { |
394 | self.trigger('data', data); | 442 | self.trigger('data', data); |
395 | }); | 443 | }); |
396 | 444 | ||
... | @@ -411,6 +459,8 @@ window.videojs.mp2t = { | ... | @@ -411,6 +459,8 @@ window.videojs.mp2t = { |
411 | PacketStream: PacketStream, | 459 | PacketStream: PacketStream, |
412 | ParseStream: ParseStream, | 460 | ParseStream: ParseStream, |
413 | ProgramStream: ProgramStream, | 461 | ProgramStream: ProgramStream, |
414 | Transmuxer: Transmuxer | 462 | Transmuxer: Transmuxer, |
463 | AacStream: AacStream, | ||
464 | H264Stream: H264Stream | ||
415 | }; | 465 | }; |
416 | })(window, window.videojs); | 466 | })(window, window.videojs); | ... | ... |
... | @@ -63,8 +63,7 @@ | ... | @@ -63,8 +63,7 @@ |
63 | </div> | 63 | </div> |
64 | <div class="result-wrapper"> | 64 | <div class="result-wrapper"> |
65 | <h3>Working</h3> | 65 | <h3>Working</h3> |
66 | <pre class="working-boxes"> | 66 | <pre class="working-boxes"></pre> |
67 | </pre> | ||
68 | </div> | 67 | </div> |
69 | </section> | 68 | </section> |
70 | <section> | 69 | <section> |
... | @@ -107,6 +106,8 @@ | ... | @@ -107,6 +106,8 @@ |
107 | <script src="../../src/stream.js"></script> | 106 | <script src="../../src/stream.js"></script> |
108 | <script src="../../src/mp4-generator.js"></script> | 107 | <script src="../../src/mp4-generator.js"></script> |
109 | <script src="../../src/transmuxer.js"></script> | 108 | <script src="../../src/transmuxer.js"></script> |
109 | <script src="../../src/flv-tag.js"></script> | ||
110 | <script src="../../src/exp-golomb.js"></script> | ||
110 | <script src="js/mp4-inspector.js"></script> | 111 | <script src="js/mp4-inspector.js"></script> |
111 | 112 | ||
112 | <script src="../../src/bin-utils.js"></script> | 113 | <script src="../../src/bin-utils.js"></script> |
... | @@ -123,6 +124,7 @@ | ... | @@ -123,6 +124,7 @@ |
123 | 124 | ||
124 | video = document.createElement('video'), | 125 | video = document.createElement('video'), |
125 | mediaSource = new MediaSource(), | 126 | mediaSource = new MediaSource(), |
127 | FlvTag = videojs.Hls.FlvTag; | ||
126 | 128 | ||
127 | logevent = function(event) { | 129 | logevent = function(event) { |
128 | console.log(event.type); | 130 | console.log(event.type); |
... | @@ -150,13 +152,17 @@ | ... | @@ -150,13 +152,17 @@ |
150 | videojs.log = console.log.bind(console); | 152 | videojs.log = console.log.bind(console); |
151 | 153 | ||
152 | original.addEventListener('change', function() { | 154 | original.addEventListener('change', function() { |
153 | var reader = new FileReader(); | 155 | var reader = new FileReader(), |
156 | videoSegments= [], | ||
157 | audioSegments = [], | ||
158 | videoBuffer = [], | ||
159 | audioBuffer = []; | ||
160 | |||
154 | reader.addEventListener('loadend', function() { | 161 | reader.addEventListener('loadend', function() { |
155 | var segment = new Uint8Array(reader.result), | 162 | var segment = new Uint8Array(reader.result), |
156 | transmuxer = new videojs.mp2t.Transmuxer(), | 163 | transmuxer = new videojs.mp2t.Transmuxer(), |
157 | hex = ''; | 164 | hex = ''; |
158 | 165 | ||
159 | |||
160 | transmuxer.on('data', function(data) { | 166 | transmuxer.on('data', function(data) { |
161 | if (data) { | 167 | if (data) { |
162 | console.log(data); | 168 | console.log(data); |
... | @@ -182,6 +188,8 @@ | ... | @@ -182,6 +188,8 @@ |
182 | var hex = '', | 188 | var hex = '', |
183 | bytes = new Uint8Array(reader.result); | 189 | bytes = new Uint8Array(reader.result); |
184 | 190 | ||
191 | |||
192 | console.log("boxes", videojs.inspectMp4(bytes)); | ||
185 | // clear old box info | 193 | // clear old box info |
186 | workingBoxes.innerHTML = JSON.stringify(videojs.inspectMp4(bytes), null, ' '); | 194 | workingBoxes.innerHTML = JSON.stringify(videojs.inspectMp4(bytes), null, ' '); |
187 | 195 | ... | ... |
... | @@ -14,7 +14,15 @@ | ... | @@ -14,7 +14,15 @@ |
14 | <link rel="stylesheet" href="css/main.css"> | 14 | <link rel="stylesheet" href="css/main.css"> |
15 | 15 | ||
16 | <script src="js/vendor/modernizr-2.6.2.min.js"></script> | 16 | <script src="js/vendor/modernizr-2.6.2.min.js"></script> |
17 | <script src="min-m4s.js"></script> | 17 | |
18 | <script> | ||
19 | window.videojs = window.videojs || { | ||
20 | Hls: {} | ||
21 | }; | ||
22 | </script> | ||
23 | <!--<script src="min-m4s.js"></script>--> | ||
24 | <script src="./js/mdat.js"></script> | ||
25 | <script src="../../src/mp4-generator.js"></script> | ||
18 | </head> | 26 | </head> |
19 | <body> | 27 | <body> |
20 | <!--[if lt IE 7]> | 28 | <!--[if lt IE 7]> |
... | @@ -59,7 +67,6 @@ | ... | @@ -59,7 +67,6 @@ |
59 | sourceBuffer, | 67 | sourceBuffer, |
60 | video; | 68 | video; |
61 | 69 | ||
62 | |||
63 | function closed() { | 70 | function closed() { |
64 | console.log("MediaSource Closed."); | 71 | console.log("MediaSource Closed."); |
65 | } | 72 | } |
... | @@ -69,38 +76,38 @@ | ... | @@ -69,38 +76,38 @@ |
69 | if (done) { | 76 | if (done) { |
70 | return; | 77 | return; |
71 | } | 78 | } |
79 | |||
72 | console.log("LOAD FRAGMENT"); | 80 | console.log("LOAD FRAGMENT"); |
73 | /* | ||
74 | var req = new XMLHttpRequest(); | ||
75 | req.responseType = "arraybuffer"; | ||
76 | req.open("GET", "../fixtures/dash/1-avc1.42c00d.m4s", true); | ||
77 | */ | ||
78 | 81 | ||
82 | var moov = videojs.mp4.moov(100, 600, 300, "video"); | ||
83 | var moof = videojs.mp4.moof([{trackId: 1}]); | ||
84 | var frag = Array.prototype.slice.call(moov); | ||
85 | frag = frag.concat(Array.prototype.slice.call(moof)); | ||
86 | frag = frag.concat(Array.prototype.slice.call(mdat)); | ||
79 | 87 | ||
80 | //req.onload = function () { | ||
81 | console.log("FRAGMENT DONE LOADING"); | ||
82 | 88 | ||
83 | sourceBuffer.appendBuffer(new Uint8Array(m4s)); | 89 | |
90 | sourceBuffer.appendBuffer( new Uint8Array( frag ) ); | ||
91 | |||
84 | done = true; | 92 | done = true; |
85 | //}; | ||
86 | 93 | ||
87 | /* | 94 | } |
88 | req.onerror = function () { | 95 | |
89 | window.alert("Could not load fragment."); | 96 | function loadMdat(){ |
90 | }; | 97 | console.log('mdat', mdat); |
98 | setTimeout( function(){ | ||
99 | sourceBuffer.appendBuffer(new Uint8Amdat); | ||
100 | },0); | ||
91 | 101 | ||
92 | req.send(); | ||
93 | */ | ||
94 | } | 102 | } |
95 | 103 | ||
96 | function loadInit() { | 104 | function loadInit() { |
97 | |||
98 | console.log("LOAD INIT"); | 105 | console.log("LOAD INIT"); |
99 | var req = new XMLHttpRequest(); | 106 | var req = new XMLHttpRequest(); |
100 | req.responseType = "arraybuffer"; | 107 | req.responseType = "arraybuffer"; |
101 | req.open("GET", "../fixtures/dash/init.mp4", true); | 108 | req.open("GET", "./ts2/Header.m4s", true); |
102 | 109 | ||
103 | req.onload = function () { | 110 | req.onload = function() { |
104 | console.log("INIT DONE LOADING"); | 111 | console.log("INIT DONE LOADING"); |
105 | sourceBuffer.appendBuffer(new Uint8Array(req.response)); | 112 | sourceBuffer.appendBuffer(new Uint8Array(req.response)); |
106 | sourceBuffer.addEventListener('update', loadFragment); | 113 | sourceBuffer.addEventListener('update', loadFragment); | ... | ... |
1 | [ | 1 | [ |
2 | { | 2 | { |
3 | "majorBrand": "iso5", | ||
4 | "minorVersion": 1, | ||
5 | "compatibleBrands": [ | ||
6 | 1769172845, | ||
7 | 1769172789, | ||
8 | 1684108136 | ||
9 | ], | ||
10 | "size": 28, | ||
11 | "type": "ftyp" | 3 | "type": "ftyp" |
12 | }, | 4 | }, |
13 | { | 5 | { |
14 | "data": { | ||
15 | "0": 73, | ||
16 | "1": 115, | ||
17 | "2": 111, | ||
18 | "3": 77, | ||
19 | "4": 101, | ||
20 | "5": 100, | ||
21 | "6": 105, | ||
22 | "7": 97, | ||
23 | "8": 32, | ||
24 | "9": 70, | ||
25 | "10": 105, | ||
26 | "11": 108, | ||
27 | "12": 101, | ||
28 | "13": 32, | ||
29 | "14": 80, | ||
30 | "15": 114, | ||
31 | "16": 111, | ||
32 | "17": 100, | ||
33 | "18": 117, | ||
34 | "19": 99, | ||
35 | "20": 101, | ||
36 | "21": 100, | ||
37 | "22": 32, | ||
38 | "23": 119, | ||
39 | "24": 105, | ||
40 | "25": 116, | ||
41 | "26": 104, | ||
42 | "27": 32, | ||
43 | "28": 71, | ||
44 | "29": 80, | ||
45 | "30": 65, | ||
46 | "31": 67, | ||
47 | "32": 32, | ||
48 | "33": 48, | ||
49 | "34": 46, | ||
50 | "35": 53, | ||
51 | "36": 46, | ||
52 | "37": 49, | ||
53 | "38": 45, | ||
54 | "39": 68, | ||
55 | "40": 69, | ||
56 | "41": 86, | ||
57 | "42": 45, | ||
58 | "43": 114, | ||
59 | "44": 101, | ||
60 | "45": 118, | ||
61 | "46": 52, | ||
62 | "47": 49, | ||
63 | "48": 57, | ||
64 | "49": 57, | ||
65 | "50": 0 | ||
66 | }, | ||
67 | "size": 59, | ||
68 | "type": "free" | 6 | "type": "free" |
69 | }, | 7 | }, |
70 | { | 8 | { |
71 | "boxes": [ | 9 | "boxes": [ |
72 | { | 10 | { |
73 | "version": 0, | ||
74 | "flags": { | ||
75 | "0": 0, | ||
76 | "1": 0, | ||
77 | "2": 0 | ||
78 | }, | ||
79 | "creationTime": "2012-10-23T11:14:28.000Z", | ||
80 | "modificationTime": "2012-10-23T11:14:28.000Z", | ||
81 | "timescale": 600, | ||
82 | "duration": 0, | ||
83 | "rate": 1, | ||
84 | "volume": 1, | ||
85 | "matrix": { | ||
86 | "0": 0, | ||
87 | "1": 1, | ||
88 | "2": 0, | ||
89 | "3": 0, | ||
90 | "4": 0, | ||
91 | "5": 0, | ||
92 | "6": 0, | ||
93 | "7": 0, | ||
94 | "8": 0, | ||
95 | "9": 0, | ||
96 | "10": 0, | ||
97 | "11": 0, | ||
98 | "12": 0, | ||
99 | "13": 0, | ||
100 | "14": 0, | ||
101 | "15": 0, | ||
102 | "16": 0, | ||
103 | "17": 1, | ||
104 | "18": 0, | ||
105 | "19": 0, | ||
106 | "20": 0, | ||
107 | "21": 0, | ||
108 | "22": 0, | ||
109 | "23": 0, | ||
110 | "24": 0, | ||
111 | "25": 0, | ||
112 | "26": 0, | ||
113 | "27": 0, | ||
114 | "28": 0, | ||
115 | "29": 0, | ||
116 | "30": 0, | ||
117 | "31": 0, | ||
118 | "32": 64, | ||
119 | "33": 0, | ||
120 | "34": 0, | ||
121 | "35": 0 | ||
122 | }, | ||
123 | "nextTrackId": 2, | ||
124 | "size": 108, | ||
125 | "type": "mvhd" | 11 | "type": "mvhd" |
126 | }, | 12 | }, |
127 | { | 13 | { |
128 | "boxes": [ | 14 | "boxes": [ |
129 | { | 15 | { |
130 | "data": { | ||
131 | "0": 0, | ||
132 | "1": 0, | ||
133 | "2": 0, | ||
134 | "3": 0, | ||
135 | "4": 0, | ||
136 | "5": 0, | ||
137 | "6": 0, | ||
138 | "7": 0 | ||
139 | }, | ||
140 | "size": 16, | ||
141 | "type": "mehd" | 16 | "type": "mehd" |
142 | }, | 17 | }, |
143 | { | 18 | { |
144 | "version": 0, | ||
145 | "flags": { | ||
146 | "0": 0, | ||
147 | "1": 0, | ||
148 | "2": 0 | ||
149 | }, | ||
150 | "trackId": 1, | ||
151 | "defaultSampleDescriptionIndex": 1, | ||
152 | "defaultSampleDuration": 1000, | ||
153 | "defaultSampleSize": 0, | ||
154 | "sampleDependsOn": 0, | ||
155 | "sampleIsDependedOn": 0, | ||
156 | "sampleHasRedundancy": 0, | ||
157 | "samplePaddingValue": 0, | ||
158 | "sampleIsDifferenceSample": true, | ||
159 | "sampleDegradationPriority": 0, | ||
160 | "size": 32, | ||
161 | "type": "trex" | 19 | "type": "trex" |
162 | } | 20 | } |
163 | ], | 21 | ], |
164 | "size": 56, | ||
165 | "type": "mvex" | 22 | "type": "mvex" |
166 | }, | 23 | }, |
167 | { | 24 | { |
168 | "boxes": [ | 25 | "boxes": [ |
169 | { | 26 | { |
170 | "version": 0, | ||
171 | "flags": { | ||
172 | "0": 0, | ||
173 | "1": 0, | ||
174 | "2": 1 | ||
175 | }, | ||
176 | "creationTime": "2012-02-14T00:07:31.000Z", | ||
177 | "modificationTime": "2012-10-23T11:14:29.000Z", | ||
178 | "trackId": 1, | ||
179 | "duration": 0, | ||
180 | "layer": 0, | ||
181 | "alternateGroup": 0, | ||
182 | "volume": 0, | ||
183 | "matrix": { | ||
184 | "0": 0, | ||
185 | "1": 1, | ||
186 | "2": 0, | ||
187 | "3": 0, | ||
188 | "4": 0, | ||
189 | "5": 0, | ||
190 | "6": 0, | ||
191 | "7": 0, | ||
192 | "8": 0, | ||
193 | "9": 0, | ||
194 | "10": 0, | ||
195 | "11": 0, | ||
196 | "12": 0, | ||
197 | "13": 0, | ||
198 | "14": 0, | ||
199 | "15": 0, | ||
200 | "16": 0, | ||
201 | "17": 1, | ||
202 | "18": 0, | ||
203 | "19": 0, | ||
204 | "20": 0, | ||
205 | "21": 0, | ||
206 | "22": 0, | ||
207 | "23": 0, | ||
208 | "24": 0, | ||
209 | "25": 0, | ||
210 | "26": 0, | ||
211 | "27": 0, | ||
212 | "28": 0, | ||
213 | "29": 0, | ||
214 | "30": 0, | ||
215 | "31": 0, | ||
216 | "32": 64, | ||
217 | "33": 0, | ||
218 | "34": 0, | ||
219 | "35": 0 | ||
220 | }, | ||
221 | "width": 320, | ||
222 | "height": 180, | ||
223 | "size": 92, | ||
224 | "type": "tkhd" | 27 | "type": "tkhd" |
225 | }, | 28 | }, |
226 | { | 29 | { |
227 | "boxes": [ | 30 | "boxes": [ |
228 | { | 31 | { |
229 | "version": 0, | ||
230 | "flags": { | ||
231 | "0": 0, | ||
232 | "1": 0, | ||
233 | "2": 0 | ||
234 | }, | ||
235 | "language": "und", | ||
236 | "creationTime": "2012-02-14T00:07:31.000Z", | ||
237 | "modificationTime": "2012-02-14T00:07:33.000Z", | ||
238 | "timescale": 25000, | ||
239 | "duration": 0, | ||
240 | "size": 32, | ||
241 | "type": "mdhd" | 32 | "type": "mdhd" |
242 | }, | 33 | }, |
243 | { | 34 | { |
244 | "version": 0, | 35 | |
245 | "flags": { | ||
246 | "0": 0, | ||
247 | "1": 0, | ||
248 | "2": 0 | ||
249 | }, | ||
250 | "handlerType": "vide", | ||
251 | "name": "counter-10mn_I25_320x180_48kbps_baseline.264:dur=600 - Imported with GPAC 0.4.6-DEV-rev3915", | ||
252 | "size": 124, | ||
253 | "type": "hdlr" | 36 | "type": "hdlr" |
254 | }, | 37 | }, |
255 | { | 38 | { |
256 | "boxes": [ | 39 | "boxes": [ |
257 | { | 40 | { |
258 | "version": 0, | ||
259 | "flags": { | ||
260 | "0": 0, | ||
261 | "1": 0, | ||
262 | "2": 1 | ||
263 | }, | ||
264 | "graphicsmode": 0, | ||
265 | "opcolor": { | ||
266 | "0": 0, | ||
267 | "1": 0, | ||
268 | "2": 0 | ||
269 | }, | ||
270 | "size": 20, | ||
271 | "type": "vmhd" | 41 | "type": "vmhd" |
272 | }, | 42 | }, |
273 | { | 43 | { |
274 | "boxes": [ | 44 | "boxes": [ |
275 | { | 45 | { |
276 | "version": 0, | ||
277 | "flags": { | ||
278 | "0": 0, | ||
279 | "1": 0, | ||
280 | "2": 0 | ||
281 | }, | ||
282 | "dataReferences": [ | 46 | "dataReferences": [ |
283 | { | 47 | { |
284 | "version": 0, | ||
285 | "flags": { | ||
286 | "0": 0, | ||
287 | "1": 0, | ||
288 | "2": 1 | ||
289 | }, | ||
290 | "size": 12, | ||
291 | "type": "url " | 48 | "type": "url " |
292 | } | 49 | } |
293 | ], | 50 | ], |
294 | "size": 28, | ||
295 | "type": "dref" | 51 | "type": "dref" |
296 | } | 52 | } |
297 | ], | 53 | ], |
298 | "size": 36, | ||
299 | "type": "dinf" | 54 | "type": "dinf" |
300 | }, | 55 | }, |
301 | { | 56 | { |
302 | "boxes": [ | 57 | "boxes": [ |
303 | { | 58 | { |
304 | "version": 0, | ||
305 | "flags": { | ||
306 | "0": 0, | ||
307 | "1": 0, | ||
308 | "2": 0 | ||
309 | }, | ||
310 | "sampleDescriptions": [ | 59 | "sampleDescriptions": [ |
311 | { | 60 | { |
312 | "dataReferenceIndex": 1, | ||
313 | "width": 320, | ||
314 | "height": 180, | ||
315 | "horizresolution": 72, | ||
316 | "vertresolution": 72, | ||
317 | "frameCount": 1, | ||
318 | "depth": 24, | ||
319 | "config": [ | 61 | "config": [ |
320 | { | 62 | { |
321 | "configurationVersion": 1, | ||
322 | "avcProfileIndication": 66, | ||
323 | "profileCompatibility": 192, | ||
324 | "avcLevelIndication": 13, | ||
325 | "lengthSizeMinusOne": 3, | ||
326 | "sps": [ | ||
327 | { | ||
328 | "0": 103, | ||
329 | "1": 66, | ||
330 | "2": 192, | ||
331 | "3": 13, | ||
332 | "4": 217, | ||
333 | "5": 1, | ||
334 | "6": 65, | ||
335 | "7": 159, | ||
336 | "8": 158, | ||
337 | "9": 16, | ||
338 | "10": 0, | ||
339 | "11": 0, | ||
340 | "12": 3, | ||
341 | "13": 0, | ||
342 | "14": 16, | ||
343 | "15": 0, | ||
344 | "16": 0, | ||
345 | "17": 3, | ||
346 | "18": 3, | ||
347 | "19": 32, | ||
348 | "20": 241, | ||
349 | "21": 66, | ||
350 | "22": 164, | ||
351 | "23": 128 | ||
352 | }, | ||
353 | { | ||
354 | "0": 103, | ||
355 | "1": 66, | ||
356 | "2": 192, | ||
357 | "3": 30, | ||
358 | "4": 37, | ||
359 | "5": 144, | ||
360 | "6": 10, | ||
361 | "7": 2, | ||
362 | "8": 255, | ||
363 | "9": 150, | ||
364 | "10": 16, | ||
365 | "11": 0, | ||
366 | "12": 0, | ||
367 | "13": 3, | ||
368 | "14": 0, | ||
369 | "15": 16, | ||
370 | "16": 0, | ||
371 | "17": 0, | ||
372 | "18": 3, | ||
373 | "19": 3, | ||
374 | "20": 32, | ||
375 | "21": 241, | ||
376 | "22": 98, | ||
377 | "23": 228, | ||
378 | "24": 128 | ||
379 | }, | ||
380 | { | ||
381 | "0": 103, | ||
382 | "1": 66, | ||
383 | "2": 192, | ||
384 | "3": 31, | ||
385 | "4": 53, | ||
386 | "5": 144, | ||
387 | "6": 5, | ||
388 | "7": 0, | ||
389 | "8": 91, | ||
390 | "9": 161, | ||
391 | "10": 0, | ||
392 | "11": 0, | ||
393 | "12": 3, | ||
394 | "13": 0, | ||
395 | "14": 1, | ||
396 | "15": 0, | ||
397 | "16": 0, | ||
398 | "17": 3, | ||
399 | "18": 0, | ||
400 | "19": 50, | ||
401 | "20": 15, | ||
402 | "21": 24, | ||
403 | "22": 50, | ||
404 | "23": 72 | ||
405 | }, | ||
406 | { | ||
407 | "0": 103, | ||
408 | "1": 66, | ||
409 | "2": 192, | ||
410 | "3": 40, | ||
411 | "4": 17, | ||
412 | "5": 100, | ||
413 | "6": 1, | ||
414 | "7": 224, | ||
415 | "8": 8, | ||
416 | "9": 159, | ||
417 | "10": 150, | ||
418 | "11": 16, | ||
419 | "12": 0, | ||
420 | "13": 0, | ||
421 | "14": 3, | ||
422 | "15": 0, | ||
423 | "16": 16, | ||
424 | "17": 0, | ||
425 | "18": 0, | ||
426 | "19": 3, | ||
427 | "20": 3, | ||
428 | "21": 32, | ||
429 | "22": 241, | ||
430 | "23": 131, | ||
431 | "24": 36, | ||
432 | "25": 128 | ||
433 | } | ||
434 | ], | ||
435 | "pps": [ | ||
436 | { | ||
437 | "0": 104, | ||
438 | "1": 203, | ||
439 | "2": 140, | ||
440 | "3": 178 | ||
441 | }, | ||
442 | { | ||
443 | "0": 104, | ||
444 | "1": 33, | ||
445 | "2": 11, | ||
446 | "3": 140, | ||
447 | "4": 178 | ||
448 | }, | ||
449 | { | ||
450 | "0": 104, | ||
451 | "1": 49, | ||
452 | "2": 139, | ||
453 | "3": 140, | ||
454 | "4": 178 | ||
455 | }, | ||
456 | { | ||
457 | "0": 104, | ||
458 | "1": 16, | ||
459 | "2": 32, | ||
460 | "3": 184, | ||
461 | "4": 203, | ||
462 | "5": 32 | ||
463 | } | ||
464 | ], | ||
465 | "size": 150, | ||
466 | "type": "avcC" | 63 | "type": "avcC" |
467 | }, | 64 | }, |
468 | { | 65 | { |
469 | "bufferSizeDB": 3978, | ||
470 | "maxBitrate": 85216, | ||
471 | "avgBitrate": 49120, | ||
472 | "size": 20, | ||
473 | "type": "btrt" | 66 | "type": "btrt" |
474 | } | 67 | } |
475 | ], | 68 | ], |
476 | "size": 256, | ||
477 | "type": "avc1" | 69 | "type": "avc1" |
478 | } | 70 | } |
479 | ], | 71 | ], |
480 | "size": 272, | ||
481 | "type": "stsd" | 72 | "type": "stsd" |
482 | }, | 73 | }, |
483 | { | 74 | { |
484 | "version": 0, | ||
485 | "flags": { | ||
486 | "0": 0, | ||
487 | "1": 0, | ||
488 | "2": 0 | ||
489 | }, | ||
490 | "timeToSamples": [], | ||
491 | "size": 16, | ||
492 | "type": "stts" | 75 | "type": "stts" |
493 | }, | 76 | }, |
494 | { | 77 | { |
495 | "version": 0, | ||
496 | "flags": { | ||
497 | "0": 0, | ||
498 | "1": 0, | ||
499 | "2": 0 | ||
500 | }, | ||
501 | "sampleToChunks": [], | ||
502 | "size": 16, | ||
503 | "type": "stsc" | 78 | "type": "stsc" |
504 | }, | 79 | }, |
505 | { | 80 | { |
506 | "version": 0, | ||
507 | "flags": { | ||
508 | "0": 0, | ||
509 | "1": 0, | ||
510 | "2": 0 | ||
511 | }, | ||
512 | "sampleSize": 0, | ||
513 | "entries": [], | ||
514 | "size": 20, | ||
515 | "type": "stsz" | 81 | "type": "stsz" |
516 | }, | 82 | }, |
517 | { | 83 | { |
518 | "version": 0, | ||
519 | "flags": { | ||
520 | "0": 0, | ||
521 | "1": 0, | ||
522 | "2": 0 | ||
523 | }, | ||
524 | "chunkOffsets": [], | ||
525 | "size": 16, | ||
526 | "type": "stco" | 84 | "type": "stco" |
527 | } | 85 | } |
528 | ], | 86 | ], |
529 | "size": 348, | ||
530 | "type": "stbl" | 87 | "type": "stbl" |
531 | } | 88 | } |
532 | ], | 89 | ], |
533 | "size": 412, | ||
534 | "type": "minf" | 90 | "type": "minf" |
535 | } | 91 | } |
536 | ], | 92 | ], |
537 | "size": 576, | ||
538 | "type": "mdia" | 93 | "type": "mdia" |
539 | } | 94 | } |
540 | ], | 95 | ], |
541 | "size": 676, | ||
542 | "type": "trak" | 96 | "type": "trak" |
543 | } | 97 | } |
544 | ], | 98 | ], |
545 | "size": 848, | ||
546 | "type": "moov" | 99 | "type": "moov" |
547 | } | 100 | } |
548 | ] | 101 | ] |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or sign in to post a comment