Closed Mysterium-Mystery closed 3 weeks ago
Ok, the download works now so my theory seems to be correct (YouTube reaaaally took it's time with this one). I'll still leave the issue open because the underlying problem still exists
You are likely correct. The challenge is that there's only a very small window where this issue is observed, so it's hard to test against it.
I think, when the video is being processed, it may be possible to fetch it via segmented streams available in DASH, but it's currently not supported. And I'm not sure if that's actually going to work at all.
You are likely correct. The challenge is that there's only a very small window where this issue is observed, so it's hard to test against it.
I think, when the video is being processed, it may be possible to fetch it via segmented streams available in DASH, but it's currently not supported. And I'm not sure if that's actually going to work at all.
You can test that using any live stream, it gives the same error as reported...
Here's the output from a live video at VideoController.cs, at line 93 (response.Content.ReadAsStringAsync()
):
{
"responseContext": {
"visitorData": "Cgs3Q2tIVk5jcXhVTSiI54qpBjIICgJERRICEgA%3D",
"maxAgeSeconds": 0
},
"playabilityStatus": {
"status": "OK",
"playableInEmbed": true
},
"streamingData": {
"expiresInSeconds": "21540",
"dashManifestUrl": "https://manifest.googlevideo.com/api/manifest/dash/expire/1696794600/ei/iLMiZbfjEsCxx_APzLmNMA/ip/2003%3Acb%3Ad71b%3Ac477%3A3d7f%3A3d1b%3A7946%3A7b99/id/1U72z0ByXhI.2/source/yt_live_broadcast/requiressl/yes/tx/24554065/txs/24554063%2C24554064%2C24554065%2C24554066%2C24554067%2C24554068/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/vprv/1/pacing/0/itag_bl/374%2C375%2C376%2C377%2C384%2C385%2C407%2C408%2C409%2C410%2C411%2C412%2C557%2C558%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24007246/beids/24350018/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Ctx%2Ctxs%2Cas%2Cvprv%2Citag%2Cplaylist_type/sig/AGM4YrMwRQIhAJ_SMjWqBUi7_s_KZS8IT158gCG42xllIqK9CZcdVjQFAiB2aDzioUQANSe_2xP5epo90fCtyGHBYu9S2InXPyJZtw%3D%3D",
"hlsManifestUrl": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1696794600/ei/iLMiZbfjEsCxx_APzLmNMA/ip/2003%3Acb%3Ad71b%3Ac477%3A3d7f%3A3d1b%3A7946%3A7b99/id/1U72z0ByXhI.2/source/yt_live_broadcast/requiressl/yes/tx/24554065/txs/24554063%2C24554064%2C24554065%2C24554066%2C24554067%2C24554068/hfr/1/vprv/1/go/1/pacing/0/nvgoi/1/keepalive/yes/fexp/24007246/beids/24350018/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Ctx%2Ctxs%2Chfr%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AGM4YrMwRQIgKeIkQeBc1vYMlZ6tWRx4xQMH1IHo1NOmrkKfyikoS2wCIQC5Ci6-E3RL9wofeM0Wa5X3Wdi8KqzW14VAhH00HGxcgw%3D%3D/file/index.m3u8"
},
"heartbeatParams": {
"intervalMilliseconds": "30000",
"softFailOnError": true,
"heartbeatServerData": "GAIgAg=="
},
"playbackTracking": {
"videostatsPlaybackUrl": {
"baseUrl": "https://s.youtube.com/api/stats/playback?cl=570785414&docid=1U72z0ByXhI&ei=iLMiZbfjEsCxx_APzLmNMA&fexp=v1%2C23946420%2C19788%2C17088%2C14760%2C6588%2C2602%2C26922%2C2780%2C40293%2C3497%2C40082%2C14490%2C4937%2C40927%2C4952%2C1251%2C54001%2C7577%2C6588%2C2%2C30243%2C2876%2C2307%2C76608%2C10019%2C311%2C4643%2C3060%2C5063%2C38113%2C22531%2C6998%2C7%2C5%2C510%2C5034%2C4851%2C7565%2C9132%2C15763%2C1563%2C3878%2C159%2C8639%2C3029%2C650%2C1045%2C3951%2C2417%2C10685%2C4125%2C330%2C712%2C85%2C825%2C2783%2C15%2C2063%2C489%2C2%2C1151%2C505%2C5816%2C3227%2C1088%2C3330%2C21785%2C376%2C108935%2C1910%2C1701%2C14625703%2C786%2C11678694%2C382%2C2158%2C2571%2C1034%2C119%2C868%2C720%2C75%2C150%2C192%2C385%2C41%2C1760%2C1115%2C1650%2C1170%2C759%2C114%2C543%2C184%2C944%2C2950%2C1007%2C888%2C418%2C374%2C616%2C1048%2C2%2C2438%2C124%2C977%2C1080%2C769%2C138%2C178%2C949%2C359%2C2992&live=dvr&ns=yt&plid=AAYHNL_zD0e_yqQm&delay=5&el=detailpage&len=0&of=qNw2AYySOk82WMEedkE6EA&vm=CAEQARgEOjJBQWpSVTZsZ3BENFI4TFVhcjhGVFhtbnNmT0hsTHBYRlhfU2lkRHoxbzducWxGeUNUUWJyQVBta0tESjQwTG5CN045Mk5FQ0ptenF6WE1ySmxhMEEtQWpiNVpBUURzTTQxWmFRbE1Rb3VlUDM0T1RSOEJFVXlqd0ljREI5bnZ6Y2Rhc05Ja2cxRnlCWFVzVkFlcW9vZEtXbC1pdWZNTFFpaE4tRUpBaAE",
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
},
"videostatsDelayplayUrl": {
"baseUrl": "https://s.youtube.com/api/stats/delayplay?cl=570785414&docid=1U72z0ByXhI&ei=iLMiZbfjEsCxx_APzLmNMA&fexp=v1%2C23946420%2C19788%2C17088%2C14760%2C6588%2C2602%2C26922%2C2780%2C40293%2C3497%2C40082%2C14490%2C4937%2C40927%2C4952%2C1251%2C54001%2C7577%2C6588%2C2%2C30243%2C2876%2C2307%2C76608%2C10019%2C311%2C4643%2C3060%2C5063%2C38113%2C22531%2C6998%2C7%2C5%2C510%2C5034%2C4851%2C7565%2C9132%2C15763%2C1563%2C3878%2C159%2C8639%2C3029%2C650%2C1045%2C3951%2C2417%2C10685%2C4125%2C330%2C712%2C85%2C825%2C2783%2C15%2C2063%2C489%2C2%2C1151%2C505%2C5816%2C3227%2C1088%2C3330%2C21785%2C376%2C108935%2C1910%2C1701%2C14625703%2C786%2C11678694%2C382%2C2158%2C2571%2C1034%2C119%2C868%2C720%2C75%2C150%2C192%2C385%2C41%2C1760%2C1115%2C1650%2C1170%2C759%2C114%2C543%2C184%2C944%2C2950%2C1007%2C888%2C418%2C374%2C616%2C1048%2C2%2C2438%2C124%2C977%2C1080%2C769%2C138%2C178%2C949%2C359%2C2992&live=dvr&ns=yt&plid=AAYHNL_zD0e_yqQm&delay=5&el=detailpage&len=0&of=qNw2AYySOk82WMEedkE6EA&vm=CAEQARgEOjJBQWpSVTZsZ3BENFI4TFVhcjhGVFhtbnNmT0hsTHBYRlhfU2lkRHoxbzducWxGeUNUUWJyQVBta0tESjQwTG5CN045Mk5FQ0ptenF6WE1ySmxhMEEtQWpiNVpBUURzTTQxWmFRbE1Rb3VlUDM0T1RSOEJFVXlqd0ljREI5bnZ6Y2Rhc05Ja2cxRnlCWFVzVkFlcW9vZEtXbC1pdWZNTFFpaE4tRUpBaAE",
"elapsedMediaTimeSeconds": 5,
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
},
"videostatsWatchtimeUrl": {
"baseUrl": "https://s.youtube.com/api/stats/watchtime?cl=570785414&docid=1U72z0ByXhI&ei=iLMiZbfjEsCxx_APzLmNMA&fexp=v1%2C23946420%2C19788%2C17088%2C14760%2C6588%2C2602%2C26922%2C2780%2C40293%2C3497%2C40082%2C14490%2C4937%2C40927%2C4952%2C1251%2C54001%2C7577%2C6588%2C2%2C30243%2C2876%2C2307%2C76608%2C10019%2C311%2C4643%2C3060%2C5063%2C38113%2C22531%2C6998%2C7%2C5%2C510%2C5034%2C4851%2C7565%2C9132%2C15763%2C1563%2C3878%2C159%2C8639%2C3029%2C650%2C1045%2C3951%2C2417%2C10685%2C4125%2C330%2C712%2C85%2C825%2C2783%2C15%2C2063%2C489%2C2%2C1151%2C505%2C5816%2C3227%2C1088%2C3330%2C21785%2C376%2C108935%2C1910%2C1701%2C14625703%2C786%2C11678694%2C382%2C2158%2C2571%2C1034%2C119%2C868%2C720%2C75%2C150%2C192%2C385%2C41%2C1760%2C1115%2C1650%2C1170%2C759%2C114%2C543%2C184%2C944%2C2950%2C1007%2C888%2C418%2C374%2C616%2C1048%2C2%2C2438%2C124%2C977%2C1080%2C769%2C138%2C178%2C949%2C359%2C2992&live=dvr&ns=yt&plid=AAYHNL_zD0e_yqQm&el=detailpage&len=0&of=qNw2AYySOk82WMEedkE6EA&vm=CAEQARgEOjJBQWpSVTZsZ3BENFI4TFVhcjhGVFhtbnNmT0hsTHBYRlhfU2lkRHoxbzducWxGeUNUUWJyQVBta0tESjQwTG5CN045Mk5FQ0ptenF6WE1ySmxhMEEtQWpiNVpBUURzTTQxWmFRbE1Rb3VlUDM0T1RSOEJFVXlqd0ljREI5bnZ6Y2Rhc05Ja2cxRnlCWFVzVkFlcW9vZEtXbC1pdWZNTFFpaE4tRUpBaAE",
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
},
"ptrackingUrl": {
"baseUrl": "https://www.youtube.com/ptracking?ei=iLMiZbfjEsCxx_APzLmNMA&oid=82ZyHtardRAbOneTQSSPtg&plid=AAYHNL_zD0e_yqQm&pltype=contentlive&ptchn=rkRKvn30Y7tzuyOBduzKXA&ptk=youtube_single&video_id=1U72z0ByXhI",
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
},
"qoeUrl": {
"baseUrl": "https://s.youtube.com/api/stats/qoe?cl=570785414&docid=1U72z0ByXhI&ei=iLMiZbfjEsCxx_APzLmNMA&event=streamingstats&fexp=v1%2C23946420%2C19788%2C17088%2C14760%2C6588%2C2602%2C26922%2C2780%2C40293%2C3497%2C40082%2C14490%2C4937%2C40927%2C4952%2C1251%2C54001%2C7577%2C6588%2C2%2C30243%2C2876%2C2307%2C76608%2C10019%2C311%2C4643%2C3060%2C5063%2C38113%2C22531%2C6998%2C7%2C5%2C510%2C5034%2C4851%2C7565%2C9132%2C15763%2C1563%2C3878%2C159%2C8639%2C3029%2C650%2C1045%2C3951%2C2417%2C10685%2C4125%2C330%2C712%2C85%2C825%2C2783%2C15%2C2063%2C489%2C2%2C1151%2C505%2C5816%2C3227%2C1088%2C3330%2C21785%2C376%2C108935%2C1910%2C1701%2C14625703%2C786%2C11678694%2C382%2C2158%2C2571%2C1034%2C119%2C868%2C720%2C75%2C150%2C192%2C385%2C41%2C1760%2C1115%2C1650%2C1170%2C759%2C114%2C543%2C184%2C944%2C2950%2C1007%2C888%2C418%2C374%2C616%2C1048%2C2%2C2438%2C124%2C977%2C1080%2C769%2C138%2C178%2C949%2C359%2C2992&live=dvr&ns=yt&plid=AAYHNL_zD0e_yqQm",
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
},
"youtubeRemarketingUrl": {
"baseUrl": "https://www.youtube.com/pagead/viewthroughconversion/962985656/?backend=innertube&cname=30&cver=1_9&foc_id=rkRKvn30Y7tzuyOBduzKXA&label=followon_view&ptype=no_rmkt&random=586117383",
"elapsedMediaTimeSeconds": 0,
"headers": [
{
"headerType": "USER_AUTH"
},
{
"headerType": "VISITOR_ID"
}
]
}
},
"videoDetails": {
"videoId": "1U72z0ByXhI",
"title": "STOCK CAR 2023 AO VIVO | 9ª ETAPA - BUENOS AIRES / ARGENTINA",
"lengthSeconds": "0",
"isLive": true,
"keywords": [
"stockcar",
"stock car 2020",
"Toyota Corolla",
"Chevrolet Cruze",
"stock car 2021",
"calendario 2021",
"Stock Car ao vivo"
],
"channelId": "UCrkRKvn30Y7tzuyOBduzKXA",
"isOwnerViewing": false,
"shortDescription": "#StockCar #StockCar2023\n\nSite Oficial: https://www.stockproseries.com.br/\n\nFacebook: https://www.facebook.com/stockcaroficial/\nInstagram: https://www.instagram.com/stock_car/\nTwitter: https://twitter.com/stock_car\nTikTok: https://www.tiktok.com/@stockcarbrasil",
"isCrawlable": true,
"isLiveDvrEnabled": true,
"thumbnail": {
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/1U72z0ByXhI/default.jpg?v=65206c7c",
"width": 120,
"height": 90
},
{
"url": "https://i.ytimg.com/vi/1U72z0ByXhI/mqdefault.jpg?v=65206c7c",
"width": 320,
"height": 180
},
{
"url": "https://i.ytimg.com/vi/1U72z0ByXhI/hqdefault.jpg?v=65206c7c",
"width": 480,
"height": 360
},
{
"url": "https://i.ytimg.com/vi/1U72z0ByXhI/sddefault.jpg?v=65206c7c",
"width": 640,
"height": 480
}
]
},
"allowRatings": true,
"viewCount": "4455",
"author": "Stock Car",
"isLowLatencyLiveStream": false,
"isPrivate": false,
"isUnpluggedCorpus": false,
"latencyClass": "MDE_STREAM_OPTIMIZATIONS_RENDERER_LATENCY_NORMAL",
"isLiveContent": true
},
"playerConfig": {
"audioConfig": {
"enablePerFormatLoudness": false
},
"exoPlayerConfig": {
"useExoPlayer": true,
"useAdaptiveBitrate": true,
"maxInitialByteRate": 91136,
"minDurationForQualityIncreaseMs": 15000,
"maxDurationForQualityDecreaseMs": 500,
"minDurationToRetainAfterDiscardMs": 21000,
"lowWatermarkMs": 15000,
"highWatermarkMs": 30000,
"lowPoolLoad": 0.8,
"highPoolLoad": 0.8,
"sufficientBandwidthOverhead": 0.67,
"bufferChunkSizeKb": 50,
"httpConnectTimeoutMs": 16000,
"httpReadTimeoutMs": 8000,
"numAudioSegmentsPerFetch": 1,
"numVideoSegmentsPerFetch": 2,
"minDurationForPlaybackStartMs": 2500,
"enableExoplayerReuse": false,
"useRadioTypeForInitialQualitySelection": true,
"blacklistFormatOnError": false,
"enableBandaidHttpDataSource": true,
"httpLoadTimeoutMs": 18000,
"canPlayHdDrm": true,
"videoBufferSegmentCount": 389,
"audioBufferSegmentCount": 38,
"useAbruptSplicing": false,
"minRetryCount": 10,
"minChunksNeededToPreferOffline": 2,
"secondsToMaxAggressiveness": 0,
"enableSurfaceviewResizeWorkaround": true,
"enableVp9IfThresholdsPass": false,
"matchQualityToViewportOnUnfullscreen": false,
"lowAudioQualityConnTypes": [
"MOBILE_CONNECTION_TYPE_CELLULAR_2G",
"MOBILE_CONNECTION_TYPE_CELLULAR_3G"
],
"useDashForLiveStreams": true,
"enableLibvpxVideoTrackRenderer": false,
"lowAudioQualityBandwidthThresholdBps": 0,
"enableVariableSpeedPlayback": false,
"preferOnesieBufferedFormat": false,
"minimumBandwidthSampleBytes": 4096,
"useDashForOtfAndCompletedLiveStreams": true,
"disableCacheAwareVideoFormatEvaluation": false,
"useLiveDvrForDashLiveStreams": true,
"cronetResetTimeoutOnRedirects": true,
"emitVideoDecoderChangeEvents": true,
"onesieVideoBufferLoadTimeoutMs": "0",
"onesieVideoBufferReadTimeoutMs": "0",
"libvpxEnableGl": false,
"enableVp9EncryptedIfThresholdsPass": false,
"enableOpus": false,
"usePredictedBuffer": true,
"maxReadAheadMediaTimeMs": 120000,
"useMediaTimeCappedLoadControl": true,
"allowCacheOverrideToLowerQualitiesWithinRange": 0,
"allowDroppingUndecodedFrames": true,
"minDurationForPlaybackRestartMs": 5000,
"serverProvidedBandwidthHeader": "",
"liveOnlyPegStrategy": "LIVE_ONLY_PEG_STRATEGY_DO_NOT_PEG",
"enableRedirectorHostFallback": false,
"enableHighlyAvailableFormatFallbackOnPcr": false,
"recordTrackRendererTimingEvents": false,
"minErrorsForRedirectorHostFallback": 0,
"nonHardwareMediaCodecNames": [
"OMX.ffmpeg.vp9.decoder",
"OMX.google.vp9.decoder",
"c2.android.vp9.decoder",
"OMX.Intel.sw_vd.vp9",
"OMX.MTK.VIDEO.DECODER.SW.VP9",
"c2.mtk.sw.vp9.decoder",
"OMX.google.av1.decoder",
"c2.android.av1.decoder",
"OMX.sprd.av1.decoder"
],
"enableVp9IfInHardware": false,
"enableVp9EncryptedIfInHardware": false,
"useOpusMedAsLowQualityAudio": false,
"minErrorsForPcrFallback": 0,
"useStickyRedirectHttpDataSource": false,
"onlyVideoBandwidth": false,
"useRedirectorOnNetworkChange": false,
"enableMaxReadaheadAbrThreshold": true,
"cacheCheckDirectoryWritabilityOnce": false,
"predictorType": "PREDICTOR_TYPE_NEAREST_RANK",
"slidingPercentile": 0.5,
"slidingWindowSize": 12,
"maxFrameDropIntervalMs": 100,
"ignoreLoadTimeoutForFallback": false,
"serverBweMultiplier": 1,
"drmMaxKeyfetchDelayMs": 0,
"maxResolutionForWhiteNoise": 0,
"whiteNoiseRenderEffectMode": "RENDER_EFFECT_MODE_UNKNOWN",
"enableLibvpxHdr": false,
"enableCacheAwareStreamSelection": false,
"useExoCronetDataSource": true,
"whiteNoiseScale": 0,
"whiteNoiseOffset": 0,
"preventVideoFrameLaggingWithLibvpx": false,
"enableMediaCodecHdr": false,
"enableMediaCodecSwHdr": false,
"liveOnlyWindowChunks": 10,
"bearerMinDurationToRetainAfterDiscardMs": [
21000,
21000,
21000,
21000,
120000,
120000,
90000,
120000
],
"forceWidevineL3": false,
"useAverageBitrate": false,
"useMedialibAudioTrackRendererForLive": true,
"useExoPlayerV2": false,
"logMediaRequestEventsToCsi": false,
"onesieFixNonZeroStartTimeFormatSelection": false,
"liveOnlyReadaheadStepSizeChunks": 1,
"liveOnlyBufferHealthHalfLifeSeconds": 60,
"liveOnlyMinBufferHealthRatio": 0.75,
"liveOnlyMinLatencyToSeekRatio": 3,
"manifestlessPartialChunkStrategy": "ANDROID_PARTIAL_CHUNK_STRATEGY_RETRY_RANGE",
"ignoreViewportSizeWhenSticky": false,
"enableLibvpxFallback": false,
"disableLibvpxLoopFilter": false,
"enableVpxMediaView": false,
"hdrMinScreenBrightness": 0,
"hdrMaxScreenBrightnessThreshold": 0,
"onesieDataSourceAboveCacheDataSource": false,
"httpNonplayerLoadTimeoutMs": 72000,
"numVideoSegmentsPerFetchStrategy": "NUM_SEGMENTS_PER_FETCH_STRATEGY_CONSTANT",
"maxVideoDurationPerFetchMs": 12000,
"maxVideoEstimatedLoadDurationMs": -1,
"estimatedServerClockHalfLife": 5,
"estimatedServerClockStrictOffset": false,
"minReadAheadMediaTimeMs": 0,
"readAheadGrowthRate": 0,
"useDynamicReadAhead": false,
"useYtVodMediaSourceForV2": false,
"enableV2Gapless": false,
"useLiveHeadTimeMillis": false,
"allowTrackSelectionWithUpdatedVideoItagsForExoV2": false,
"maxAllowableTimeBeforeMediaTimeUpdateSec": 0,
"enableDynamicHdr": false,
"v2PerformEarlyStreamSelection": false,
"v2UsePlaybackStreamSelectionResult": false,
"v2MinTimeBetweenAbrReevaluationMs": 2000,
"avoidReusePlaybackAcrossLoadvideos": false,
"enableInfiniteNetworkLoadingRetries": false,
"reportExoPlayerStateOnTransition": false,
"manifestlessSequenceMethod": "MANIFESTLESS_SEQUENCE_METHOD_LIVE_HEAD",
"useLiveHeadWindow": false,
"enableDynamicHdrInHardware": false,
"ultralowAudioQualityBandwidthThresholdBps": 0,
"ignoreUnneededSeeksToLiveHead": false,
"drmMetricsQoeLoggingFraction": 0.01,
"useTimeSeriesBufferPrediction": false,
"slidingPercentileScalar": 1,
"minAdaptiveVideoQuality": 0,
"platypusBackBufferDurationMs": 60000
}
},
"trackingParams": "CAAQu2kiEwi3x8r_y-aBAxXA2BEIHcxcAwY=",
"adBreakHeartbeatParams": "Q0FBJTNE"
}
Also if it helps, I noticed that PlayerResponse.cs, line 137, you search for "formats" value, which doesn't exists in a live stream. StreamData.Value contains only that:
{
"expiresInSeconds": "21540",
"dashManifestUrl": "https://manifest.googlevideo.com/api/manifest/dash/expire/1696797629/ei/Xb8iZfuEGobs1wLlsL_IAw/ip/2003%3Acb%3Ad71b%3Ac477%3A3d7f%3A3d1b%3A7946%3A7b99/id/1U72z0ByXhI.2/source/yt_live_broadcast/requiressl/yes/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/vprv/1/pacing/0/itag_bl/374%2C375%2C376%2C377%2C384%2C385%2C407%2C408%2C409%2C410%2C411%2C412%2C557%2C558%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24007246/beids/24350018/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cas%2Cvprv%2Citag%2Cplaylist_type/sig/AGM4YrMwRQIhAIyd-sNaFr4QybfTtK9W4A5KfHBte4MNjuSWXFHREgaAAiA3xU-B63EYxaXnqoRqVh9Oitu-WaRSYHhQBtlg_qAY6w%3D%3D",
"hlsManifestUrl": "https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1696797629/ei/Xb8iZfuEGobs1wLlsL_IAw/ip/2003%3Acb%3Ad71b%3Ac477%3A3d7f%3A3d1b%3A7946%3A7b99/id/1U72z0ByXhI.2/source/yt_live_broadcast/requiressl/yes/hfr/1/vprv/1/go/1/pacing/0/nvgoi/1/keepalive/yes/fexp/24007246/beids/24350018/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AGM4YrMwRAIgZ4Qdx-VN-CcepyEaKL7SskbVQ627DtHer_OqDAjB3dQCIGkdVP4DOI-eYExHdng7oMnegA1etxsf_b3rxN4a-XB6/file/index.m3u8"
}
Here's the output from a live video at VideoController.cs, at line 93 (
response.Content.ReadAsStringAsync()
):
Was that for a finished livestream?
no, it was during the livestream...
Yeah, an ongoing livestream can only be fetched through the HLS manifest. You can use the GetHttpLiveStreamUrlAsync(...)
method.
This may have been fixed by #818. Please create a new issue if the problem persists.
Version
Newest (6.3.3)
Platform
Windows 10
Steps to reproduce
Using "https://www.youtube.com/watch?v=oKbKHd7nd0o" as Link. The second line of code from above will then throw an error
Details
YoutubeExplode always worked for me without any issues. Even now, it still works with pretty much every video. Only this one doesn't seem to work I do sort of have a theory why this might be the case though. The stream is still relatively new (It ended about 8 hours ago) and the chat is still not visible so it hasn't been processed by YouTube. So maybe YTExplode just can't get the manifest for streams which are still being processed. Can someone confirm if that's correct? If it is, of course it would be a nice feature to be able to download unprocessed streams but if that's too hard to do, that's okay but I think this should at least be noted somewhere
The exception: YoutubeExplode.Exceptions.VideoUnplayableException: Video 'oKbKHd7nd0o' does not contain any playable streams. at YoutubeExplode.Videos.Streams.StreamClient.GetManifestAsync(VideoId videoId, CancellationToken cancellationToken) in /_/YoutubeExplode/Videos/Streams/StreamClient.cs:line 246
Checklist