Skip to content

Commit

Permalink
added more tests and sloved some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Johan Lautakoksi committed Aug 29, 2023
1 parent 3ddc4d3 commit 149393e
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 35 deletions.
16 changes: 16 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,10 @@ class HLSVod {
codecsMatchingInVod++;
}
}
let audioGroupIdToUse = audioGroupId;
if (!this.audioSegments[audioGroupId]) {
audioGroupIdToUse = this.audioSegments[Object.keys(this.audioSegments)[0]];
}

debug(`Lookup media item for '${audioGroupId}'`);

Expand Down Expand Up @@ -302,6 +306,7 @@ class HLSVod {
if (!this.audioSegments[audioGroupId][itemLang]) {
return;
}

if (!this.audioCodecsMap[audioCodecs]) {
skipGroupId = true;
return;
Expand All @@ -310,6 +315,17 @@ class HLSVod {
const itemChannels = item.get("channels") ? item.get("channels") : "2";
this.audioCodecsMap[audioCodecs][itemChannels] = audioGroupId;

if (Object.keys(this.audioSegments).length > 1) {
const groupIds = Object.keys(this.audioSegments)
for (let index = 0; index < groupIds.length; index++) {
const groupId = groupIds[index];
if(this.audioSegments[groupId][itemLang]) {
audioGroupIdToUse = groupId;
return itemLang;
}
}
}

if (this.allowedAudioLanguages) {
for (let index = 0; index < this.allowedAudioLanguages.length; index++) {
const element = this.allowedAudioLanguages[index];
Expand Down
89 changes: 54 additions & 35 deletions spec/hlsvod_audio_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ describe("HLSVod with demuxed audio", () => {
forcedDemuxMode: true,
}


let mockMasterManifestOneLang;
let mockMediaManifestOneLang;
let mockAudioManifestOneLang;
Expand Down Expand Up @@ -442,7 +442,7 @@ describe("HLSVod with demuxed audio", () => {
});
});
});
describe("correct language functionality", () => {
describe("correct language functionality without allowedAudioLanguages list", () => {

const hlsOpts = {
forcedDemuxMode: true,
Expand Down Expand Up @@ -485,72 +485,91 @@ describe("HLSVod with demuxed audio", () => {
};
});

it("load with the language specified", (done) => {
const audioTracks = [
{ language: "en", name: "English" },
];
it("load vod after vod with the same languages", (done) => {
hlsOpts.allowedAudioLanguages = audioTracks;
mockVod = new HLSVod("http://mock.com/mock.m3u8", null, 0, 0, null, hlsOpts);
mockVod2 = new HLSVod("http://mock.com/mock2.m3u8", null, 0, 0, null, hlsOpts);

mockVod
.load(mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
mockVod2.loadAfter(mockVod, mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
});
});

});

it("load with all the language specified", (done) => {
const audioTracks = [
{ language: "en", name: "English" },
{ language: "sv", name: "Svenska" },
]
it("load vod after vod with one matching languages", (done) => {
hlsOpts.allowedAudioLanguages = audioTracks;
mockVod = new HLSVod("http://mock.com/mock.m3u8", null, 0, 0, null, hlsOpts);
mockVod2 = new HLSVod("http://mock.com/mock2.m3u8", null, 0, 0, null, hlsOpts);

mockVod
.load(mockMasterManifestMultipleLangs, mockMediaManifestMultipleLangs, mockAudioManifestMultipleLangs)
.load(mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en", "sv"]);
done();
mockVod2.loadAfter(mockVod, mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {

done();
});
});

});

it("load with one of the two languages specified", (done) => {
const audioTracks = [
{ language: "en", name: "English" },
]
it("load vod after vod with no matching languages", (done) => {
hlsOpts.allowedAudioLanguages = audioTracks;
mockVod = new HLSVod("http://mock.com/mock.m3u8", null, 0, 0, null, hlsOpts);
mockVod2 = new HLSVod("http://mock.com/mock2.m3u8", null, 0, 0, null, hlsOpts);

mockVod
.load(mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
mockVod2.loadAfter(mockVod, mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
});
});

});

it("load vod after vod with the same codecs", (done) => {
hlsOpts.allowedAudioLanguages = audioTracks;
mockVod = new HLSVod("http://mock.com/mock.m3u8", null, 0, 0, null, hlsOpts);
mockVod2 = new HLSVod("http://mock.com/mock2.m3u8", null, 0, 0, null, hlsOpts);

mockVod
.load(mockMasterManifestMultipleLangs, mockMediaManifestMultipleLangs, mockAudioManifestMultipleLangs)
.load(mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
mockVod2.loadAfter(mockVod, mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
});
});

});

it("load without the language specified", (done) => {
const audioTracks = [
{ language: "es", name: "Espanol" },
]
it("load vod after vod with the different codecs", (done) => {
hlsOpts.allowedAudioLanguages = audioTracks;
mockVod = new HLSVod("http://mock.com/mock.m3u8", null, 0, 0, null, hlsOpts);
mockVod2 = new HLSVod("http://mock.com/mock2.m3u8", null, 0, 0, null, hlsOpts);

mockVod
.load(mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
mockVod2.loadAfter(mockVod, mockMasterManifestOneLang, mockMediaManifestOneLang, mockAudioManifestOneLang)
.then(() => {
const audioLanguages = mockVod.getAudioLangsForAudioGroup("aac");
expect(audioLanguages).toEqual(["en"]);
done();
});
});
});
});
Expand Down

0 comments on commit 149393e

Please sign in to comment.