Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot get stream manifest of a video that is still being processed #734

Open
4 of 5 tasks
Mysterium-Mystery opened this issue Aug 31, 2023 · 8 comments
Open
4 of 5 tasks

Comments

@Mysterium-Mystery
Copy link

Version

Newest (6.3.3)

Platform

Windows 10

Steps to reproduce

var Vid = await YT.Videos.GetAsync(Link);`
var Manifests = await YT.Videos.Streams.GetManifestAsync(Vid.Id);

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

  • I have looked through existing issues to make sure that this bug has not been reported before
  • I have provided a descriptive title for this issue
  • I have made sure that that this bug is reproducible on the latest version of the package
  • I have provided all the information needed to reproduce this bug as efficiently as possible
  • I have sponsored this project
@Mysterium-Mystery
Copy link
Author

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

@Tyrrrz
Copy link
Owner

Tyrrrz commented Sep 1, 2023

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.

@caverna
Copy link

caverna commented Oct 8, 2023

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...

@caverna
Copy link

caverna commented Oct 8, 2023

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"
}

@caverna
Copy link

caverna commented Oct 8, 2023

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"
  }

@Tyrrrz
Copy link
Owner

Tyrrrz commented Oct 8, 2023

Here's the output from a live video at VideoController.cs, at line 93 (response.Content.ReadAsStringAsync()):

Was that for a finished livestream?

@caverna
Copy link

caverna commented Oct 8, 2023

no, it was during the livestream...

@Tyrrrz
Copy link
Owner

Tyrrrz commented Oct 8, 2023

Yeah, an ongoing livestream can only be fetched through the HLS manifest. You can use the GetHttpLiveStreamUrlAsync(...) method.

@Tyrrrz Tyrrrz changed the title Video does not contain playable streams. Issue with unprocessed streams? Cannot get stream manifest of a video that is still being processed Feb 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants