TeamNewPipe/NewPipe · error · ResolverException

Error when generating the DASH manifest of YouTube ended liv

Error message

Error when generating the DASH manifest of YouTube ended live stream

What it means

Thrown by PlaybackResolver.createYoutubeMediaSource when generating the DASH manifest for a YouTube POST_LIVE_STREAM (ended livestream) fails. The code calls YoutubePostLiveStreamDvrDashManifestCreator.fromPostLiveStreamDvrStreamingUrl and wraps any CreationException, IOException, or NullPointerException (the latter from Objects.requireNonNull on a null ItagItem) into this ResolverException.

Source

Thrown at app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java:436

                    cacheKey, metadata);
        } else if (streamType == StreamType.POST_LIVE_STREAM) {
            // If the content is not an URL, uses the DASH delivery method and if the stream type
            // of the stream is a post live stream, it means that the content is an ended
            // livestream so we need to generate the manifest corresponding to the content
            // (which is the last segment of the stream)

            try {
                final ItagItem itagItem = Objects.requireNonNull(stream.getItagItem());
                final String manifestString = YoutubePostLiveStreamDvrDashManifestCreator
                        .fromPostLiveStreamDvrStreamingUrl(stream.getContent(),
                                itagItem,
                                itagItem.getTargetDurationSec(),
                                streamInfo.getDuration());
                return buildYoutubeManualDashMediaSource(dataSource,
                        createDashManifest(manifestString, stream), stream, cacheKey,
                        metadata);
            } catch (final CreationException | IOException | NullPointerException e) {
                throw new ResolverException(
                        "Error when generating the DASH manifest of YouTube ended live stream", e);
            }
        } else {
            throw new ResolverException(
                    "DASH manifest generation of YouTube livestreams is not supported");
        }
    }

    private static MediaSource createYoutubeMediaSourceOfVideoStreamType(
            final PlayerDataSource dataSource,
            final Stream stream,
            final StreamInfo streamInfo,
            final String cacheKey,
            final MediaItemTag metadata) throws ResolverException {
        final DeliveryMethod deliveryMethod = stream.getDeliveryMethod();
        switch (deliveryMethod) {
            case PROGRESSIVE_HTTP:
                if ((stream instanceof VideoStream && ((VideoStream) stream).isVideoOnly())

View on GitHub (pinned to 9e8be09156)

Solutions

  1. Update the NewPipe extractor so ItagItem and post-live URL parsing match YouTube's current format.
  2. Validate stream.getItagItem() is non-null and stream.getContent() is a valid URL before calling the manifest creator.
  3. Retry playback; transient failures during DVR manifest generation can resolve on re-resolve.
  4. Fall back to HLS if available for the same ended livestream.
Defensive patterns

Strategy: validation

Validate before calling

if (stream.getItagItem() == null || stream.getContent() == null) {
    // cannot generate post-live DVR manifest; skip or fall back
}

Try / catch

try {
    return createYoutubeMediaSource(stream, streamInfo, dataSource, cacheKey, metadata);
} catch (final ResolverException e) {
    // post-live manifest generation failed; try HLS or another itag
}

Prevention

When it happens

Trigger: A YouTube ended-livestream (post-live DVR) stream where manifest creation fails: the stream's ItagItem is null, the content URL is malformed, or the manifest creator cannot build the DASH XML. Any of CreationException, IOException, or NPE in the try block maps here.

Common situations: The extractor did not attach an ItagItem to the stream (NPE on getItagItem), the post-live streaming URL format changed so the manifest creator cannot parse it (CreationException), or stream.getContent() is null/invalid. YouTube changes to its post-live DVR URL scheme are a frequent cause after YouTube-side updates.

Related errors


AI-assisted analysis of TeamNewPipe/NewPipe@9e8be09156 (2026-08-14). Data as JSON: /api/errors/5a64617ef8d2cba6. Report an issue: GitHub.