diff --git a/package.json b/package.json
index abc7d4312..7934fb15c 100644
--- a/package.json
+++ b/package.json
@@ -102,6 +102,6 @@
"opml-to-json": "0.0.3",
"tor-request": "^2.3.0",
"vue": "^2.5.17",
- "ytdl-core": "^0.20.4"
+ "ytdl-core": "^0.29.1"
}
}
diff --git a/src/js/player.js b/src/js/player.js
index 04d489c7b..ae432aaca 100644
--- a/src/js/player.js
+++ b/src/js/player.js
@@ -32,10 +32,13 @@ function playVideo(videoId, playlistId = '') {
playerView.playerSeen = true;
playerView.firstLoad = true;
playerView.videoId = videoId;
+ playerView.videoAudio = '';
playerView.videoAudio = undefined;
playerView.validAudio = true;
+ playerView.video480p = '';
playerView.video480p = undefined;
playerView.valid480p = true;
+ playerView.video720p = '';
playerView.video720p = undefined;
playerView.valid720p = true;
playerView.embededHtml = "";
@@ -54,8 +57,68 @@ function playVideo(videoId, playlistId = '') {
playerView.savedIconType = 'fas saved';
}
});
- //"kpkXPy_jXmU"
- invidiousAPI('videos', videoId, {}, function (data) {
+
+ youtubedlGetInfo(videoId, (data) => {
+ console.log(data);
+
+ let videoUrls = data.formats;
+ let formatUrls = data.player_response.streamingData.adaptiveFormats;
+
+ // Search through the returned object to get the 480p and 720p video URLs (If available)
+ Object.keys(videoUrls).forEach((key) => {
+ switch (videoUrls[key]['itag']) {
+ case '18':
+ playerView.video480p = decodeURIComponent(videoUrls[key]['url']);
+ //console.log(video480p);
+ break;
+ case '22':
+ playerView.video720p = decodeURIComponent(videoUrls[key]['url']);
+ //console.log(video720p);
+ break;
+ }
+ });
+
+ // Last adaptive format will be best the quality audio stream (migrate fully to adaptive formats later)
+ playerView.videoAudio = decodeURIComponent(formatUrls[formatUrls.length - 1]['url']);
+
+ if (typeof(playerView.videoAudio) === 'undefined') {
+ playerView.validAudio = false;
+ }
+
+ let useEmbedPlayer = false;
+
+ // Default to the embeded player if the URLs cannot be found.
+ if (typeof (playerView.video720p) === 'undefined' && typeof (playerView.video480p) === 'undefined') {
+ //useEmbedPlayer = true;
+ playerView.currentQuality = 'EMBED';
+ playerView.playerSeen = false;
+ //useEmbedPlayer = true;
+ showToast('Unable to get video file. Reverting to embeded player.');
+ }
+ else if (typeof (playerView.video720p) === 'undefined' && typeof (playerView.video480p) !== 'undefined') {
+ // Default to the 480p video if the 720p URL cannot be found.
+ console.log('Found');
+ playerView.videoUrl = playerView.video480p;
+ playerView.currentQuality = '480p';
+ } else {
+ // Default to the 720p video.
+ playerView.videoUrl = playerView.video720p;
+ playerView.currentQuality = '720p';
+ //playerView.videoUrl = playerView.liveManifest;
+ }
+
+ if (!useEmbedPlayer && data.player_response.captions !== undefined) {
+ data.player_response.captions.playerCaptionsTracklistRenderer.captionTracks.forEach((caption) => {
+ let subtitleUrl = 'https://www.invidio.us/api/v1/captions/' + videoId + '?label=' + caption.name.simpleText;
+
+ videoHtml = videoHtml + '