TeamNewPipe/NewPipe · error · ResolverException

Non URI progressive contents are not supported

Error message

Non URI progressive contents are not supported

What it means

Thrown by PlaybackResolver.buildProgressiveMediaSource when a stream whose DeliveryMethod is PROGRESSIVE_HTTP does not satisfy stream.isUrl(). Progressive playback in ExoPlayer requires a URL it can fetch as a byte stream; a progressive stream with non-URL (e.g. embedded/inline) content cannot be played this way.

Source

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

            case DASH:
                return buildDashMediaSource(dataSource, stream, cacheKey, metadata);
            case HLS:
                return buildHlsMediaSource(dataSource, stream, cacheKey, metadata);
            case SS:
                return buildSSMediaSource(dataSource, stream, cacheKey, metadata);
            // Torrent streams are not supported by ExoPlayer
            default:
                throw new ResolverException("Unsupported delivery type: " + deliveryMethod);
        }
    }

    private static ProgressiveMediaSource buildProgressiveMediaSource(
            final PlayerDataSource dataSource,
            final Stream stream,
            final String cacheKey,
            final MediaItemTag metadata) throws ResolverException {
        if (!stream.isUrl()) {
            throw new ResolverException("Non URI progressive contents are not supported");
        }
        throwResolverExceptionIfUrlNullOrEmpty(stream.getContent());
        return dataSource.getProgressiveMediaSourceFactory().createMediaSource(
                new MediaItem.Builder()
                        .setTag(metadata)
                        .setUri(Uri.parse(stream.getContent()))
                        .setCustomCacheKey(cacheKey)
                        .build());
    }

    private static DashMediaSource buildDashMediaSource(final PlayerDataSource dataSource,
                                                        final Stream stream,
                                                        final String cacheKey,
                                                        final MediaItemTag metadata)
            throws ResolverException {

        if (stream.isUrl()) {
            throwResolverExceptionIfUrlNullOrEmpty(stream.getContent());

View on GitHub (pinned to 9e8be09156)

Solutions

  1. Validate stream.isUrl() before attempting progressive playback and skip the stream if false.
  2. Update the extractor for the affected service so progressive streams carry proper URLs.
  3. Surface a user-facing message that this stream type cannot be played rather than failing silently.
Defensive patterns

Strategy: validation

Validate before calling

if (stream.getDeliveryMethod() == DeliveryMethod.PROGRESSIVE_HTTP && !stream.isUrl()) {
    // skip; progressive content must be a URL
}

Try / catch

try {
    return buildProgressiveMediaSource(dataSource, stream, cacheKey, metadata);
} catch (final ResolverException e) {
    // non-URL progressive content; fall back to another stream
}

Prevention

When it happens

Trigger: buildProgressiveMediaSource receives a Stream where stream.isUrl() is false, meaning getContent() holds data that is not a URL. The guard fires before any MediaSource is built.

Common situations: An extractor mistakenly marks non-URL content as PROGRESSIVE_HTTP, or a stream object's content field contains raw data/a malformed identifier rather than a URL. Indicates an extractor bug or an unexpected stream shape for the service.

Related errors


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