123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- var Transmuxer = require('../lib/partial/transmuxer.js');
- var utils = require('./utils');
- var generatePMT = utils.generatePMT;
- var videoPes = utils.videoPes;
- var audioPes = utils.audioPes;
- var packetize = utils.packetize;
- var PAT = utils.PAT;
- QUnit.module('Partial Transmuxer - Options');
- [
- {options: {keepOriginalTimestamps: false}},
- {options: {keepOriginalTimestamps: true}},
- {options: {keepOriginalTimestamps: false, baseMediaDecodeTime: 15000}},
- {options: {keepOriginalTimestamps: true, baseMediaDecodeTime: 15000}},
- {options: {keepOriginalTimestamps: false}, baseMediaSetter: 15000},
- {options: {keepOriginalTimestamps: true}, baseMediaSetter: 15000}
- ].forEach(function(test) {
- var createTransmuxer = function() {
- var transmuxer = new Transmuxer(test.options);
- if (test.baseMediaSetter) {
- transmuxer.setBaseMediaDecodeTime(test.baseMediaSetter);
- }
- return transmuxer;
- };
- var name = '';
- Object.keys(test.options).forEach(function(optionName) {
- name += '' + optionName + ' ' + test.options[optionName] + ' ';
- });
- if (test.baseMediaSetter) {
- name += 'baseMediaDecodeTime setter ' + test.baseMediaSetter;
- }
- QUnit.test('Audio frames after video not trimmed, ' + name, function(assert) {
- var
- segments = [],
- earliestDts = 15000,
- transmuxer = createTransmuxer();
- transmuxer.on('data', function(segment) {
- segments.push(segment);
- });
- // the following transmuxer pushes add tiny video and
- // audio data to the transmuxer. When we add the data
- // we also set the pts/dts time so that audio should
- // not be trimmed.
- transmuxer.push(packetize(PAT));
- transmuxer.push(packetize(generatePMT({
- hasVideo: true,
- hasAudio: true
- })));
- transmuxer.push(packetize(audioPes([
- 0x19, 0x47
- ], true, earliestDts + 1)));
- transmuxer.push(packetize(videoPes([
- 0x09, 0x01 // access_unit_delimiter_rbsp
- ], true, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x08, 0x01 // pic_parameter_set_rbsp
- ], true, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x07, // seq_parameter_set_rbsp
- 0x27, 0x42, 0xe0, 0x0b,
- 0xa9, 0x18, 0x60, 0x9d,
- 0x80, 0x53, 0x06, 0x01,
- 0x06, 0xb6, 0xc2, 0xb5,
- 0xef, 0x7c, 0x04
- ], false, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x05, 0x01 // slice_layer_without_partitioning_rbsp_idr
- ], true, earliestDts)));
- transmuxer.flush();
- // the partial transmuxer only generates a video segment
- // when all audio frames are trimmed. So we should have an audio and video
- // segment
- assert.equal(segments.length, 2, 'generated a video and an audio segment');
- assert.equal(segments[0].type, 'video', 'video segment exists');
- assert.equal(segments[1].type, 'audio', 'audio segment exists');
- });
- QUnit.test('Audio frames trimmed before video, ' + name, function(assert) {
- var
- segments = [],
- earliestDts = 15000,
- baseTime = test.options.baseMediaDecodeTime || test.baseMediaSetter || 0,
- transmuxer = createTransmuxer();
- transmuxer.on('data', function(segment) {
- segments.push(segment);
- });
- // the following transmuxer pushes add tiny video and
- // audio data to the transmuxer. When we add the data
- // we also set the pts/dts time so that audio should
- // be trimmed.
- transmuxer.push(packetize(PAT));
- transmuxer.push(packetize(generatePMT({
- hasVideo: true,
- hasAudio: true
- })));
- transmuxer.push(packetize(audioPes([
- 0x19, 0x47
- ], true, earliestDts - baseTime - 1)));
- transmuxer.push(packetize(videoPes([
- 0x09, 0x01 // access_unit_delimiter_rbsp
- ], true, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x08, 0x01 // pic_parameter_set_rbsp
- ], true, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x07, // seq_parameter_set_rbsp
- 0x27, 0x42, 0xe0, 0x0b,
- 0xa9, 0x18, 0x60, 0x9d,
- 0x80, 0x53, 0x06, 0x01,
- 0x06, 0xb6, 0xc2, 0xb5,
- 0xef, 0x7c, 0x04
- ], false, earliestDts)));
- transmuxer.push(packetize(videoPes([
- 0x05, 0x01 // slice_layer_without_partitioning_rbsp_idr
- ], true, earliestDts)));
- transmuxer.flush();
- // the partial transmuxer only generates a video segment
- // when all audio frames are trimmed.
- if (test.options.keepOriginalTimestamps && !baseTime) {
- assert.equal(segments.length, 2, 'generated both a video/audio segment');
- assert.equal(segments[0].type, 'video', 'segment is video');
- assert.equal(segments[1].type, 'audio', 'segment is audio');
- } else {
- assert.equal(segments.length, 1, 'generated only a video segment');
- assert.equal(segments[0].type, 'video', 'segment is video');
- }
- });
- });
|