TeamNewPipe/NewPipe · error · ResolverException

Error when generating the DASH manifest of YouTube OTF…

Error message

Error when generating the DASH manifest of YouTube OTF stream

What it means

Thrown by PlaybackResolver.createYoutubeMediaSourceOfVideoStreamType when generating the DASH manifest for a YouTube OTF (On-The-Fly) stream fails. The code calls YoutubeOtfDashManifestCreator.fromOtfStreamingUrl and wraps any CreationException, IOException, or NullPointerException (from a null ItagItem) into this ResolverException. Unlike the progressive path, there is no fallback here; the error is logged and rethrown.

Solutions

  1. Update the NewPipe extractor and YoutubeOtfDashManifestCreator to match YouTube's current OTF URL scheme.
  2. Validate stream.getItagItem() is non-null and stream.getContent() is a valid OTF URL before manifest generation.
  3. Retry playback on re-resolve; transient OTF failures can clear.
  4. Fall back to an alternate itag or delivery method (e.g. HLS) for the same video.
Defensive patterns

Strategy: validation

Validate before calling

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

Try / catch

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

Prevention

When it happens

Trigger: A YouTube OTF-channel stream (delivery method DASH with non-URL content) where manifest creation fails: ItagItem is null, the OTF URL is malformed/changed, or the creator cannot build the manifest. CreationException, IOException, or NPE in the try block all map here.

Common situations: The extractor did not attach an ItagItem, YouTube changed the OTF URL format so YoutubeOtfDashManifestCreator cannot parse it, or stream.getContent() is invalid/null. OTF streams are format-sensitive, so YouTube-side changes frequently break this after updates.

Related errors


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

Appendix: source

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

                }
            case DASH:
                // If the content is not a URL, uses the DASH delivery method and if the stream
                // type of the stream is a video stream, it means the content is an OTF stream
                // so we need to generate the manifest corresponding to the content (which is
                // the base URL of the OTF stream).

                try {
                    final String manifestString = YoutubeOtfDashManifestCreator
                            .fromOtfStreamingUrl(stream.getContent(),
                                    Objects.requireNonNull(stream.getItagItem()),
                                    streamInfo.getDuration());
                    return buildYoutubeManualDashMediaSource(dataSource,
                            createDashManifest(manifestString, stream), stream, cacheKey,
                            metadata);
                } catch (final CreationException | IOException | NullPointerException e) {
                    Log.e(TAG,
                            "Error when generating the DASH manifest of YouTube OTF stream", e);
                    throw new ResolverException(
                            "Error when generating the DASH manifest of YouTube OTF stream", e);
                }
            case HLS:
                return dataSource.getYoutubeHlsMediaSourceFactory().createMediaSource(
                        new MediaItem.Builder()
                                .setTag(metadata)
                                .setUri(Uri.parse(stream.getContent()))
                                .setCustomCacheKey(cacheKey)
                                .build());
            default:
                throw new ResolverException("Unsupported delivery method for YouTube contents: "
                        + deliveryMethod);
        }
    }

    private static DashMediaSource buildYoutubeManualDashMediaSource(
            final PlayerDataSource dataSource,
            final DashManifest dashManifest,

View on GitHub (pinned to 9e8be09156)