All Versions
81
Latest Version
Avg Release Cycle
20 days
Latest Release
-
Changelog History
Page 2
Changelog History
Page 2
-
v6.0.6 Changes
- ๐ Fixed an issue which caused
Seek(...)
method on streams returned fromStreamClient.GetStreamAsync(...)
to move the stream into incorrect position. - ๐ Fixed an issue which caused an exception when parsing closed captions that don't have timing information. (Thanks @dbakuntsev)
- ๐ Fixed an issue which caused an exception when handling videos that had escape characters inside player config's JSON payload. (Thanks @wleader)
- ๐ Fixed an issue where the streams returned from
StreamClient.GetStreamAsync(...)
were very slow to read. (Thanks @Roberto Blรกzquez)
- ๐ Fixed an issue which caused
-
v6.0.5 Changes
- ๐ Fixed an issue where calling
ClosedCaptionsClient.GetManifestAsync(...)
failed with 404 HTTP error due to recent YouTube changes.
- ๐ Fixed an issue where calling
-
v6.0.4 Changes
- ๐ Fixed an issue where
StreamClient.GetHttpLiveStreamUrlAsync(...)
threw exceptions when called on valid live streams. - ๐ Fixed an issue where the version of YoutubeExplode targeting .NET 5 unnecessarily had
System.Text.Json
listed as a dependency.
- ๐ Fixed an issue where
-
v6.0.3 Changes
- ๐ Fixed an issue where trying to get stream or closed caption manifest failed on some videos with 404 HTTP error due to recent YouTube changes.
- ๐ Fixed an issue where some videos contained incorrect video quality labels.
Known issues:
StreamClient.GetHttpLiveStreamUrlAsync(...)
does not work and throws exceptions on every video, including valid livestreams (#566). -
v6.0.2 Changes
- ๐ Fixed an issue where trying to get stream manifest of videos with HDR streams failed with exception.
-
v6.0.1 Changes
- ๐ Fixed an issue where trying to get stream manifest failed on some videos with 404 HTTP error due to recent YouTube changes.
- ๐ Fixed an issue where trying to get stream manifest occasionally resulted in a
FormatException
. - ๐ Fixed an issue where some required cookies were not passed along with requests, which caused them to fail.
-
v6.0 Changes
- ๐ Fixed an issue where an attempt to get playlist metadata or playlist videos resulted in an exception, due to YouTube's recent changes.
- ๐ Fixed an issue where an attempt to get videos returned by a search query resulted in an exception, due to YouTube's recent changes.
- ๐ Fixed an issue where an attempt to get video metadata resulted in an exception, due to YouTube's recent changes.
- ๐ Fixed an issue where some age-restricted videos were reported as unplayable, due to YouTube's recent changes.
- ๐ Fixed an issue where
av01
-encoded video-only streams were occasionally missing from the resolved stream manifest. - ๐ Fixed many other issues brought on by recent YouTube changes.
- ๐ Changes to videos:
- Changed
Video.Duration
to a nullable property. It may benull
on videos that haven't finished yet (i.e. ongoing livestreams). - Changed
Video.Author
type fromstring
toAuthor
object, which encapsulates both channel ID and channel title. RemovedVideo.ChannelId
. - Changed
Video.Thumbnails
type fromThumbnailSet
toIReadOnlyList<Thumbnail>
. - Removed public constructor from
VideoId
. To create an instance ofVideoId
, useVideoId.Parse(...)
,VideoId.TryParse(...)
, or the implicit conversion fromstring
toVideoId
. - Changes to streams:
- Removed
IStreamInfo.Tag
property. - Reworked
VideoQuality
into a struct (from an enum) which encapsulates video quality label, maximum height, and framerate. RemovedIVideoStreamInfo.VideoQualityLabel
andIVideoStreamInfo.Framerate
in favor of this new consolidated type. - Renamed extension method
WithHighestBitrate(...)
toTryGetWithHighestBitrate(...)
. Also addedGetWithHighestBitrate(...)
which does not returnnull
, but instead throws if the source sequence is empty. - Renamed extension method
WithHighestVideoQuality(...)
toTryGetWithHighestVideoQuality(...)
. Also addedGetWithHighestVideoQuality(...)
which does not returnnull
, but instead throws if the source sequence is empty. - Changed the behavior of
TryGetWithHighestVideoQuality(...)
andGetWithHighestVideoQuality(...)
extension methods so that they now also take into account the framerate of the stream. - Removed
GetAllVideoQualityLabels(...)
extension method. - Changes to closed captions:
- Added
ClosedCaptionManifest.GetByLanguage(...)
. It works likeClosedCaptionManifest.TryGetByLanguage(...)
but throws an exception in case of failure instead of returningnull
. - Added
ClosedCaptionTrack.GetByTime(...)
. It works likeClosedCaptionTrack.TryGetByTime(...)
but throws an exception in case of failure instead of returningnull
. - Added
ClosedCaption.GetPartByTime(...)
. It works likeClosedCaption.TryGetPartByTime(...)
but throws an exception in case of failure instead of returningnull
.
- Changed
- ๐ Changes to playlists:
- Changed
Playlist.Author
type toAuthor
. Note that this property is nullable because auto-generated playlists (mixed, topics, etc.) don't have an author. - Changed
Playlist.Thumbnails
type fromThumbnailSet
toIReadOnlyList<Thumbnail>
. - Videos contained within playlists are now of type
PlaylistVideo
instead ofVideo
. PlaylistVideo
implementsIVideo
interface, which outlines properties shared withVideo
.PlaylistVideo
no longer contains some of the properties available onVideo
, specifically:UploadDate
,Description
,Keywords
, andEngagement
.- Changed
PlaylistVideo.Author
type toAuthor
. - Added
PlaylistClient.GetVideoBatchesAsync(...)
which returns videos in batches, each encompassing one response from YouTube. - Removed the previously available parameters for specifying starting page and page count on
PlaylistClient.GetVideosAsync(...)
. It is no longer possible to specify the starting page altogether because the new endpoint used by YoutubeExplode does not have the concept of pages. If you need manual control over how many requests you make, usePlaylistClient.GetVideoBatchesAsync(...)
instead. - Removed public constructor from
PlaylistId
. To create an instance ofPlaylistId
, usePlaylistId.Parse(...)
,PlaylistId.TryParse(...)
, or the implicit conversion fromstring
toPlaylistId
.
- Changed
- ๐ Changes to search:
- Search functionality is now using a different endpoint, which also returns channels and playlists in addition to just videos.
- Added
VideoSearchResult
,PlaylistSearchResult
, andChannelSearchResult
to represent the different possible result types. They implementIVideo
,IPlaylist
, andIChannel
respectively. - Added
SearchClient.GetResultsAsync(...)
which returns instances ofISearchResult
. You will need to match the instance with one of its possible implementations (VideoSearchResult
,PlaylistSearchResult
, orChannelSearchResult
) to extract detailed information. - Added
SearchClient.GetResultBatchesAsync(...)
that provides more granular control over how many requests are sent to YouTube, similar toPlaylistClient.GetVideoBatchesAsync(...)
. - Added additional methods to filter results by type:
SearchClient.GetVideosAsync(...)
,SearchClient.GetChannelsAsync(...)
, andSearchClient.GetPlaylistsAsync(...)
. Under the hood, these methods callSearchClient.GetResultsAsync(...)
.
- ๐ Changes to channels:
- Removed
Channel.LogoUrl
in favor ofChannel.Thumbnails
of typeIReadOnlyList<Thumbnail>
. - Removed public constructor from
ChannelId
. To create an instance ofChannelId
, useChannelId.Parse(...)
,ChannelId.TryParse(...)
, or the implicit conversion fromstring
toChannelId
. - Removed public constructor from
UserName
. To create an instance ofUserName
, useUserName.Parse(...)
,UserName.TryParse(...)
, or the implicit conversion fromstring
toUserName
.
- Removed
- ๐ Renamed
VideoResolution
toResolution
and moved it fromYoutubeExplode.Video.Streams
namespace toYoutubeExplode.Common
. This type is now also used inThumbnail
to specify the size of the thumbnail image. - โ Added
TryGetWithHighestResolution(...)
andGetWithHighestResolution(...)
extension methods onIEnumerable<Thumbnail>
. These methods return the thumbnail with the highest resolution by area (width multiplied by height). - ๐ Moved extension methods that enable
await
expressions on certainIAsyncEnumerable<T>
instances fromYoutubeExplode
namespace toYoutubeExplode.Common
. Remember to add corresponding using directive for this namespace when working with playlists or search. - ๐ Renamed
BufferAsync(...)
extension method toCollectAsync(...)
. - โ Added
CancellationToken
parameter to all asynchronous client methods where it was previously missing. - Consolidated exceptions into fewer types.
โช Thanks to @d4n3436, @Benjamin K., and @Baimbekka who helped find workarounds for recent YouTube breakages by submitting pull requests. Your contribution is very appreciated!
-
v5.1.9 Changes
- ๐ Fixed an issue where some age-restricted videos were reported as unplayable, due to YouTube's recent changes.
- ๐ Fixed an issue where trying to get stream manifest resulted in an exception sometimes.
-
v5.1.8 Changes
- ๐ Fixed numerous issues related to stream extraction caused by recent YouTube changes.
- ๐ Improved memory usage when downloading streams.
- โก๏ธ Updated package icon. (Thanks @Khalid Abuhakmeh)
-
v5.1.7 Changes
- โ Added a specialized
PlaylistUnavailableException
that gets thrown when the requested playlist is private, doesn't exist, or otherwise unavailable. (Thanks @Brandon Wood) - ๐ Fixed an issue where streams without rate-limiting did not properly support seeking. (Thanks @Johnson Pan)
- โ Added a specialized