TeamNewPipe/NewPipe · error · ResolverException

Unsupported delivery type: {}

Error message

Unsupported delivery type: {}

What it means

Thrown by PlaybackResolver.buildMediaSource when a (non-YouTube) stream's DeliveryMethod is not PROGRESSIVE_HTTP, DASH, HLS, or SS. The default branch of the delivery-method switch raises the ResolverException. The code comment notes that Torrent streams (and any other delivery method) are not supported by ExoPlayer.

Source

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

                                        final String cacheKey,
                                        final MediaItemTag metadata) throws ResolverException {
        if (streamInfo.getService() == ServiceList.YouTube) {
            return createYoutubeMediaSource(stream, streamInfo, dataSource, cacheKey, metadata);
        }

        final DeliveryMethod deliveryMethod = stream.getDeliveryMethod();
        switch (deliveryMethod) {
            case PROGRESSIVE_HTTP:
                return buildProgressiveMediaSource(dataSource, stream, cacheKey, metadata);
            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());

View on GitHub (pinned to 9e8be09156)

Solutions

  1. Check the stream's DeliveryMethod before requesting playback and skip/notify the user for unsupported methods like TORRENT.
  2. Update the extractor and NewPipe to the latest version if a new delivery method was added that should be supported.
  3. Filter streams in the UI so only playable delivery methods are offered to the user.
Defensive patterns

Strategy: validation

Validate before calling

final DeliveryMethod dm = stream.getDeliveryMethod();
if (dm != DeliveryMethod.PROGRESSIVE_HTTP && dm != DeliveryMethod.DASH
        && dm != DeliveryMethod.HLS && dm != DeliveryMethod.SS) {
    // skip this stream; do not call buildMediaSource
}

Try / catch

try {
    return buildMediaSource(dataSource, stream, streamInfo, cacheKey, metadata);
} catch (final ResolverException e) {
    // unsupported delivery method (e.g. Torrent); skip stream
}

Prevention

When it happens

Trigger: buildMediaSource is called with a Stream whose getDeliveryMethod() returns a value outside the four supported methods (e.g. TORRENT). This is the generic (non-YouTube) stream resolution path.

Common situations: A service returns a torrent-delivered stream, or a new delivery method is introduced by an extractor that NewPipe does not yet handle. Also when a malformed/partial StreamInfo yields an unexpected delivery method enum value.

Related errors


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