mirror of
https://github.com/TeamPiped/Piped.git
synced 2024-08-14 23:57:27 +00:00
Remove xml-js for fast-xml-parser.
This commit is contained in:
parent
7ff4fae53f
commit
4d43249e25
4 changed files with 73 additions and 186 deletions
|
@ -1,42 +1,33 @@
|
|||
// Based of https://github.com/GilgusMaximus/yt-dash-manifest-generator/blob/master/src/DashGenerator.js
|
||||
|
||||
import { Buffer } from "buffer";
|
||||
window.Buffer = Buffer;
|
||||
import { json2xml } from "xml-js";
|
||||
import { XMLBuilder } from "fast-xml-parser";
|
||||
|
||||
export function generate_dash_file_from_formats(VideoFormats, VideoLength) {
|
||||
const generatedJSON = generate_xmljs_json_from_data(VideoFormats, VideoLength);
|
||||
return json2xml(generatedJSON);
|
||||
const builder = new XMLBuilder({
|
||||
ignoreAttributes: false,
|
||||
allowBooleanAttributes: true,
|
||||
suppressBooleanAttributes: false,
|
||||
attributeNamePrefix: "_",
|
||||
});
|
||||
return builder.build(generatedJSON);
|
||||
}
|
||||
|
||||
function generate_xmljs_json_from_data(VideoFormatArray, VideoLength) {
|
||||
const convertJSON = {
|
||||
declaration: {
|
||||
attributes: {
|
||||
version: "1.0",
|
||||
encoding: "utf-8",
|
||||
"?xml": {
|
||||
_version: "1.0",
|
||||
_encoding: "utf-8",
|
||||
MPD: {
|
||||
_xmlns: "urn:mpeg:dash:schema:mpd:2011",
|
||||
_profiles: "urn:mpeg:dash:profile:full:2011",
|
||||
_minBufferTime: "PT1.5S",
|
||||
_type: "static",
|
||||
_mediaPresentationDuration: `PT${VideoLength}S`,
|
||||
Period: {
|
||||
AdaptationSet: generate_adaptation_set(VideoFormatArray),
|
||||
},
|
||||
},
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "MPD",
|
||||
attributes: {
|
||||
xmlns: "urn:mpeg:dash:schema:mpd:2011",
|
||||
profiles: "urn:mpeg:dash:profile:full:2011",
|
||||
minBufferTime: "PT1.5S",
|
||||
type: "static",
|
||||
mediaPresentationDuration: `PT${VideoLength}S`,
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "Period",
|
||||
elements: generate_adaptation_set(VideoFormatArray),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
return convertJSON;
|
||||
}
|
||||
|
@ -76,34 +67,27 @@ function generate_adaptation_set(VideoFormatArray) {
|
|||
|
||||
mimeAudioObjs.forEach(mimeAudioObj => {
|
||||
const adapSet = {
|
||||
type: "element",
|
||||
name: "AdaptationSet",
|
||||
attributes: {
|
||||
id: mimeAudioObj.audioTrackId,
|
||||
lang: mimeAudioObj.audioTrackId?.substr(0, 2),
|
||||
mimeType: mimeAudioObj.mimeType,
|
||||
startWithSAP: "1",
|
||||
subsegmentAlignment: "true",
|
||||
},
|
||||
elements: [],
|
||||
_id: mimeAudioObj.audioTrackId,
|
||||
_lang: mimeAudioObj.audioTrackId?.substr(0, 2),
|
||||
_mimeType: mimeAudioObj.mimeType,
|
||||
_startWithSAP: "1",
|
||||
_subsegmentAlignment: "true",
|
||||
Representation: [],
|
||||
};
|
||||
|
||||
let isVideoFormat = false;
|
||||
|
||||
if (mimeAudioObj.mimeType.includes("video")) {
|
||||
isVideoFormat = true;
|
||||
}
|
||||
|
||||
if (isVideoFormat) {
|
||||
adapSet.attributes.scanType = "progressive";
|
||||
adapSet["_scanType"] = "progressive";
|
||||
}
|
||||
|
||||
for (var i = 0; i < mimeAudioObj.videoFormats.length; i++) {
|
||||
const videoFormat = mimeAudioObj.videoFormats[i];
|
||||
if (isVideoFormat) {
|
||||
adapSet.elements.push(generate_representation_video(videoFormat));
|
||||
adapSet.Representation.push(generate_representation_video(videoFormat));
|
||||
} else {
|
||||
adapSet.elements.push(generate_representation_audio(videoFormat));
|
||||
adapSet.Representation.push(generate_representation_audio(videoFormat));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -114,94 +98,40 @@ function generate_adaptation_set(VideoFormatArray) {
|
|||
|
||||
function generate_representation_audio(Format) {
|
||||
const representation = {
|
||||
type: "element",
|
||||
name: "Representation",
|
||||
attributes: {
|
||||
id: Format.itag,
|
||||
codecs: Format.codec,
|
||||
bandwidth: Format.bitrate,
|
||||
_id: Format.itag,
|
||||
_codecs: Format.codec,
|
||||
_bandwidth: Format.bitrate,
|
||||
AudioChannelConfiguration: {
|
||||
_schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011",
|
||||
_value: "2",
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "AudioChannelConfiguration",
|
||||
attributes: {
|
||||
schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011",
|
||||
value: "2",
|
||||
},
|
||||
BaseURL: Format.url,
|
||||
SegmentBase: {
|
||||
_indexRange: `${Format.indexStart}-${Format.indexEnd}`,
|
||||
Initialization: {
|
||||
_range: `${Format.initStart}-${Format.initEnd}`,
|
||||
},
|
||||
{
|
||||
type: "element",
|
||||
name: "BaseURL",
|
||||
elements: [
|
||||
{
|
||||
type: "text",
|
||||
text: Format.url,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "element",
|
||||
name: "SegmentBase",
|
||||
attributes: {
|
||||
indexRange: `${Format.indexStart}-${Format.indexEnd}`,
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "Initialization",
|
||||
attributes: {
|
||||
range: `${Format.initStart}-${Format.initEnd}`,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
return representation;
|
||||
}
|
||||
|
||||
function generate_representation_video(Format) {
|
||||
const representation = {
|
||||
type: "element",
|
||||
name: "Representation",
|
||||
attributes: {
|
||||
id: Format.itag,
|
||||
codecs: Format.codec,
|
||||
bandwidth: Format.bitrate,
|
||||
width: Format.width,
|
||||
height: Format.height,
|
||||
maxPlayoutRate: "1",
|
||||
frameRate: Format.fps,
|
||||
_id: Format.itag,
|
||||
_codecs: Format.codec,
|
||||
_bandwidth: Format.bitrate,
|
||||
_width: Format.width,
|
||||
_height: Format.height,
|
||||
_maxPlayoutRate: "1",
|
||||
_frameRate: Format.fps,
|
||||
BaseURL: Format.url,
|
||||
SegmentBase: {
|
||||
_indexRange: `${Format.indexStart}-${Format.indexEnd}`,
|
||||
Initialization: {
|
||||
_range: `${Format.initStart}-${Format.initEnd}`,
|
||||
},
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "BaseURL",
|
||||
elements: [
|
||||
{
|
||||
type: "text",
|
||||
text: Format.url,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "element",
|
||||
name: "SegmentBase",
|
||||
attributes: {
|
||||
indexRange: `${Format.indexStart}-${Format.indexEnd}`,
|
||||
},
|
||||
elements: [
|
||||
{
|
||||
type: "element",
|
||||
name: "Initialization",
|
||||
attributes: {
|
||||
range: `${Format.initStart}-${Format.initEnd}`,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
return representation;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue