8000 feat: send ID3 tag even when a frame has malformed content (#408) · videojs/mux.js@1da5d23 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 1da5d23

Browse files
pszemusgesinger
andauthored
feat: send ID3 tag even when a frame has malformed content (#408)
Enables sending ID3 tag with as many frames as could be parsed. Co-authored-by: Garrett Singer <gesinger@gmail.com>
1 parent fab387e commit 1da5d23

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

lib/m2ts/metadata-stream.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,11 @@ MetadataStream = function(options) {
198198
if (frameSize < 1) {
199199
this.trigger('log', {
200200
level: 'warn',
201-
message: 'Malformed ID3 frame encountered. Skipping metadata parsing.'
201+
message: 'Malformed ID3 frame encountered. Skipping remaining metadata parsing.'
202202
});
203-
return;
203+
// If the frame is malformed, don't parse any further frames but allow previous valid parsed frames
204+
// to be sent along.
205+
break;
204206
}
205207
frameHeader = String.fromCharCode(tag.data[frameStart],
206208
tag.data[frameStart + 1],

test/metadata-stream.test.js

+22-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ QUnit.test('triggers log for non-id3/invalid data', function(assert) {
7272
assert.deepEqual(logs, [
7373
{level: 'warn', message: 'Skipping unrecognized metadata packet'},
7474
{level: 'warn', message: 'Skipping unrecognized metadata packet'},
75-
{level: 'warn', message: 'Malformed ID3 frame encountered. Skipping metadata parsing.'}
75+
{level: 'warn', message: 'Malformed ID3 frame encountered. Skipping remaining metadata parsing.'}
7676
], 'logs as expected.');
7777
});
7878

@@ -518,6 +518,27 @@ QUnit.test('constructs the dispatch type', function(assert) {
518518
assert.equal(metadataStream.dispatchType, '1503020100', 'built the dispatch type');
519519
});
520520

521+
QUnit.test('should skip tag frame parsing on malformed frame, preserving previous frames', function(assert) {
522+
var events = [],
523+
validFrame = id3Frame('TIT2',
524+
0x03, // utf-8
525+
stringToCString('sample title')),
526+
malformedFrame = id3Frame('WOAF'), // frame with size of 0B
527+
tag = id3Tag(validFrame, malformedFrame);
528+
529+
metadataStream.on('data', function(event) {
530+
events.push(event);
531+
});
532+
533+
metadataStream.push({
534+
type: 'timed-metadata',
535+
data: new Uint8Array(tag)
536+
})
537+
538+
assert.equal(events.length, 1, 'parsed 1 tag')
539+
assert.equal(events[0].frames.length, 1, 'parsed one frame');
540+
assert.equal(events[0].frames[0].key, 'TIT2');
541+
});
521542

522543
QUnit.test('can parse PRIV frames in web worker', function(assert) {
523544
var payload = stringToInts('arbitrary'),

0 commit comments

Comments
 (0)
0