{"record":{"id":"f454267a7b4eb0d6","repo":"TeamNewPipe/NewPipe","slug":"dash-manifest-generation-of-youtube-livestreams-is","errorCode":null,"errorMessage":"DASH manifest generation of YouTube livestreams is not supported","messagePattern":"DASH manifest generation of YouTube livestreams is not supported","errorType":"exception","errorClass":"ResolverException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java","lineNumber":440,"sourceCode":"            // livestream so we need to generate the manifest corresponding to the content\n            // (which is the last segment of the stream)\n\n            try {\n                final ItagItem itagItem = Objects.requireNonNull(stream.getItagItem());\n                final String manifestString = YoutubePostLiveStreamDvrDashManifestCreator\n                        .fromPostLiveStreamDvrStreamingUrl(stream.getContent(),\n                                itagItem,\n                                itagItem.getTargetDurationSec(),\n                                streamInfo.getDuration());\n                return buildYoutubeManualDashMediaSource(dataSource,\n                        createDashManifest(manifestString, stream), stream, cacheKey,\n                        metadata);\n            } catch (final CreationException | IOException | NullPointerException e) {\n                throw new ResolverException(\n                        \"Error when generating the DASH manifest of YouTube ended live stream\", e);\n            }\n        } else {\n            throw new ResolverException(\n                    \"DASH manifest generation of YouTube livestreams is not supported\");\n        }\n    }\n\n    private static MediaSource createYoutubeMediaSourceOfVideoStreamType(\n            final PlayerDataSource dataSource,\n            final Stream stream,\n            final StreamInfo streamInfo,\n            final String cacheKey,\n            final MediaItemTag metadata) throws ResolverException {\n        final DeliveryMethod deliveryMethod = stream.getDeliveryMethod();\n        switch (deliveryMethod) {\n            case PROGRESSIVE_HTTP:\n                if ((stream instanceof VideoStream && ((VideoStream) stream).isVideoOnly())\n                        || stream instanceof AudioStream) {\n                    try {\n                        final String manifestString = YoutubeProgressiveDashManifestCreator\n                                .fromProgressiveStreamingUrl(stream.getContent(),","sourceCodeStart":422,"sourceCodeEnd":458,"githubUrl":"https://github.com/TeamNewPipe/NewPipe/blob/9e8be091560a69f35d44bd252eb00bc7911c977b/app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java#L422-L458","documentation":"Thrown by PlaybackResolver.createYoutubeMediaSource when the YouTube stream's StreamType is neither VIDEO_STREAM nor POST_LIVE_STREAM. For other stream types (e.g. an active LIVE_STREAM or AUDIO_STREAM routed here), NewPipe has no DASH manifest generation path, so the resolver rejects it. This is the else branch after the two supported types.","triggerScenarios":"createYoutubeMediaSource receives a YouTube stream whose streamInfo.getStreamType() is a value other than VIDEO_STREAM or POST_LIVE_STREAM (for example LIVE_STREAM). Neither handled branch matches, so the else throws.","commonSituations":"An active YouTube livestream (StreamType.LIVE_STREAM) routed into createYoutubeMediaSource instead of the live-stream path, or an extractor reporting an unexpected StreamType. Indicates a routing/classification issue in how streams are dispatched to resolvers.","solutions":["Ensure active live streams go through buildLiveMediaSource (HLS/DASH live) rather than createYoutubeMediaSource.","Check the StreamType reported by the extractor and route accordingly before calling createYoutubeMediaSource.","Update the extractor if it mislabels the stream type.","Surface a user-facing message for genuinely unsupported stream types."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"final StreamType st = streamInfo.getStreamType();\nif (st != StreamType.VIDEO_STREAM && st != StreamType.POST_LIVE_STREAM) {\n    // do not call createYoutubeMediaSource; use live path or notify user\n}","typeGuard":null,"tryCatchPattern":"try {\n    return createYoutubeMediaSource(stream, streamInfo, dataSource, cacheKey, metadata);\n} catch (final ResolverException e) {\n    // unsupported stream type for YouTube DASH; route to live resolver if applicable\n}","preventionTips":["Dispatch active live streams to the live resolver instead of createYoutubeMediaSource.","Check StreamType before choosing the resolver path.","Update the extractor if stream types are mislabeled."],"tags":["playback","resolver","youtube","live-stream","media-source"],"backgroundTag":null,"analyzedSha":"9e8be091560a69f35d44bd252eb00bc7911c977b","analyzedAt":"2026-08-14T00:11:33.519Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}