From e9bc1a4461943cc043ab7ebd6687bdb339cc9225 Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Mon, 6 Sep 2021 16:18:42 +0530 Subject: [PATCH] Retry Options fixed --- docs/YouTube/README.md | 18 +++---------- package-lock.json | 2 +- package.json | 2 +- play-dl/YouTube/stream.ts | 53 ++++++++++++++++++++------------------- 4 files changed, 32 insertions(+), 43 deletions(-) diff --git a/docs/YouTube/README.md b/docs/YouTube/README.md index 5360506..42b22d6 100644 --- a/docs/YouTube/README.md +++ b/docs/YouTube/README.md @@ -40,23 +40,19 @@ let id = extractID(url) ## Stream -### stream(url : `string`, options : [StreamOptions](https://github.com/play-dl/play-dl/tree/main/docs/YouTube#streamoptions)) +### stream(url : `string`, cookie? : `string`) *This is basic to create a youtube stream from a url or videoID.* +**[Cookies](https://github.com/play-dl/play-dl/discussions/34) are optional and are required for playing age restricted videos.** ```js let source = await stream("url") // This will create a stream Class which contains type and stream to be played. - - let source = await stream("url", { - cookie : "Your Cookie", - retry : true - }) //This will enable cookies and also prevent 403 Errors from happening. let resource = createAudioResource(source.stream, { inputType : source.type }) // This creates resource for playing ``` -### stream_from_info(info : `infoData`, options : [StreamOptions](https://github.com/play-dl/play-dl/tree/main/docs/YouTube#streamoptions)) +### stream_from_info(info : `infoData`) *This is basic to create a youtube stream from a info [ from [video_info](https://github.com/play-dl/play-dl#video_infourl--string) function ].* ```js let info = await video_info("url") @@ -66,14 +62,6 @@ let info = await video_info("url") }) // This creates resource for playing ``` -#### StreamOptions - - **cookie** : `string` - - **retry** : `boolean` - -**NOTE :** Setting retry to true will cause performance decrease in stream starting. - -**[Cookies](https://github.com/play-dl/play-dl/discussions/34) are optional and are required for playing age restricted videos.** - ## Search ### search(url : `string`, options? : [SearchOptions](https://github.com/play-dl/play-dl/tree/main/play-dl/YouTube#searchoptions)) diff --git a/package-lock.json b/package-lock.json index b928d38..8d74682 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "play-dl", - "version": "0.8.4", + "version": "0.8.5", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index b14f90a..fdbda0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "play-dl", - "version": "0.8.4", + "version": "0.8.5", "description": "YouTube, SoundCloud, Spotify streaming for discord.js bots", "main": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/play-dl/YouTube/stream.ts b/play-dl/YouTube/stream.ts index 6e5ea81..147e5ec 100644 --- a/play-dl/YouTube/stream.ts +++ b/play-dl/YouTube/stream.ts @@ -10,11 +10,6 @@ export enum StreamType{ Opus = 'opus', } -interface StreamOptions{ - cookie? : string; - retry? : boolean; -} - interface InfoData{ LiveStreamData : { isLive : boolean @@ -39,24 +34,28 @@ function parseAudioFormats(formats : any[]){ return result } -export async function stream(url : string, options : StreamOptions = { retry : false }): Promise{ - let info = await video_info(url, options.cookie) +export async function stream(url : string, cookie? : string): Promise{ + let info = await video_info(url, cookie) let final: any[] = []; let type : StreamType; if(info.LiveStreamData.isLive === true && info.LiveStreamData.hlsManifestUrl !== null && info.video_details.durationInSec === '0') { return new LiveStreaming(info.LiveStreamData.dashManifestUrl, info.format[info.format.length - 1].targetDurationSec, info.video_details.url) } - if(options.retry){ - await got(info.format[info.format.length - 1].url, { - headers : { - "range" : `bytes=0-1` - }, - retry : 0 - }).catch(async () => { - return await stream(info.video_details.url) - }) + console.time('Time to Retry') + let resp = await got(info.format[info.format.length - 1].url, { + headers : { + "range" : `bytes=0-1` + }, + retry : 0 + }).catch(() => { + return 0 + }) + if(resp === 0){ + return await stream(info.video_details.url) } + else if(typeof resp !== "number") resp.destroy() + console.timeEnd('Time to Retry') let audioFormat = parseAudioFormats(info.format) let opusFormats = filterFormat(audioFormat, "opus") @@ -77,23 +76,25 @@ export async function stream(url : string, options : StreamOptions = { retry : f return new Stream(final[0].url, type, info.video_details.durationInSec) } -export async function stream_from_info(info : InfoData, options : StreamOptions = { retry : false }): Promise{ +export async function stream_from_info(info : InfoData): Promise{ let final: any[] = []; let type : StreamType; if(info.LiveStreamData.isLive === true && info.LiveStreamData.hlsManifestUrl !== null && info.video_details.durationInSec === '0') { return new LiveStreaming(info.LiveStreamData.dashManifestUrl, info.format[info.format.length - 1].targetDurationSec, info.video_details.url) } - if(options.retry){ - await got(info.format[info.format.length - 1].url, { - headers : { - "range" : `bytes=0-1` - }, - retry : 0 - }).catch(async () => { - return await stream(info.video_details.url) - }) + let resp = await got(info.format[info.format.length - 1].url, { + headers : { + "range" : `bytes=0-1` + }, + retry : 0 + }).catch(() => { + return 0 + }) + if(resp === 0){ + return await stream(info.video_details.url) } + else if(typeof resp !== "number") resp.destroy() let audioFormat = parseAudioFormats(info.format) let opusFormats = filterFormat(audioFormat, "opus")