diff --git a/README.md b/README.md index b3fa947..b4b7c1c 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,17 @@ import play from 'play-dl'; // Everything import { video_basic_info, stream } from 'play-dl'; // Individual functions ``` +## **Compatibility issues** - discord-player + +Because discord-player doesn't work with raw opus packets you need to enable the compatibility mode in `play-dl`, if you want to use both frameworks together. + +- To fix the playback of YouTube videos with `discord-player`, you can disable some of play-dl's optimisations and fixes by setting the `discordPlayerCompatibility` option for `stream` and `stream_from_info` to true + +- The `discordPlayerCompatiblity` option might break the playback of long YouTube videos. + +- Even with the `discordPlayerCompatibility` option set you will not be able to use the seek option for `stream` and `stream_from_info`. + + ### [Documentation](https://play-dl.github.io/modules.html) ### [Examples](./examples) ### [Instructions](./instructions) diff --git a/play-dl/YouTube/stream.ts b/play-dl/YouTube/stream.ts index 648e3b3..b9b7aef 100644 --- a/play-dl/YouTube/stream.ts +++ b/play-dl/YouTube/stream.ts @@ -19,6 +19,7 @@ export interface StreamOptions { language?: string; htmldata?: boolean; precache?: number; + discordPlayerCompatibility?: boolean } /** @@ -86,24 +87,26 @@ export async function stream_from_info( final[0].codec === 'opus' && final[0].container === 'webm' ? StreamType.WebmOpus : StreamType.Arbitrary; await request_stream(`https://${new URL(final[0].url).host}/generate_204`); if (type === StreamType.WebmOpus) { - options.seek ??= 0 - if (options.seek >= info.video_details.durationInSec || options.seek < 0) - throw new Error(`Seeking beyond limit. [ 0 - ${info.video_details.durationInSec - 1}]`); - return new SeekStream( - final[0].url, - info.video_details.durationInSec, - final[0].indexRange.end, - Number(final[0].contentLength), - info.video_details.url, - options - ); - } else - return new Stream( - final[0].url, - type, - info.video_details.durationInSec, - Number(final[0].contentLength), - info.video_details.url, - options - ); + if(!options.discordPlayerCompatibility){ + options.seek ??= 0 + if (options.seek >= info.video_details.durationInSec || options.seek < 0) + throw new Error(`Seeking beyond limit. [ 0 - ${info.video_details.durationInSec - 1}]`); + return new SeekStream( + final[0].url, + info.video_details.durationInSec, + final[0].indexRange.end, + Number(final[0].contentLength), + info.video_details.url, + options + ); + } else if(options.seek) throw new Error("Can not seek with discordPlayerCompatibility set to true.") + } + return new Stream( + final[0].url, + type, + info.video_details.durationInSec, + Number(final[0].contentLength), + info.video_details.url, + options + ); } diff --git a/play-dl/index.ts b/play-dl/index.ts index 4848b33..f92770d 100644 --- a/play-dl/index.ts +++ b/play-dl/index.ts @@ -100,6 +100,7 @@ async function stream(url: string, options?: StreamOptions): Promise { @@ -239,6 +240,7 @@ async function stream_from_info(info: InfoData, options?: StreamOptions): Promis * - `number` quality : Quality number. [ 0 = Lowest, 1 = Medium, 2 = Highest ] * - `boolean` htmldata : given data is html data or not * - `number` precache : No of segments of data to store before looping [YouTube Live Stream only]. [ Defaults to 3 ] + * - `boolean` discordPlayerCompatibility : Conversion of Webm to Opus[ Defaults to false ] * @returns A {@link YouTubeStream} or {@link SoundCloudStream} Stream to play */ async function stream_from_info(