TeamNewPipe/NewPipe · error · ExtractionException

Url not known to service. service={} url={}

Error message

Url not known to service. service={} url={}

What it means

Thrown by NavigationHelper.getIntentByLink when the resolved StreamingService returns LinkType.NONE for the given URL — meaning the URL does not match any of the service's recognized URL patterns. getLinkTypeByUrl runs the URL against the service's registered regex/handlers; NONE indicates no match, so the app cannot determine whether the URL is a video, channel, or playlist for that service.

Source

Thrown at app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java:741

        final Intent mIntent = new Intent(context, MainActivity.class);
        mIntent.putExtra(Constants.KEY_SERVICE_ID, serviceId);
        mIntent.putExtra(Constants.KEY_URL, url);
        mIntent.putExtra(Constants.KEY_LINK_TYPE, type);
        return mIntent;
    }

    public static Intent getIntentByLink(final Context context, final String url)
            throws ExtractionException {
        return getIntentByLink(context, NewPipe.getServiceByUrl(url), url);
    }

    public static Intent getIntentByLink(final Context context,
                                         final StreamingService service,
                                         final String url) throws ExtractionException {
        final StreamingService.LinkType linkType = service.getLinkTypeByUrl(url);

        if (linkType == StreamingService.LinkType.NONE) {
            throw new ExtractionException("Url not known to service. service=" + service
                    + " url=" + url);
        }

        return getOpenIntent(context, url, service.getServiceId(), linkType);
    }

    public static Intent getChannelIntent(final Context context,
                                          final int serviceId,
                                          final String url) {
        return getOpenIntent(context, url, serviceId, StreamingService.LinkType.CHANNEL);
    }

    public static Intent getStreamIntent(final Context context,
                                         final int serviceId,
                                         final String url,
                                         @Nullable final String title) {
        return getOpenIntent(context, url, serviceId, StreamingService.LinkType.STREAM)
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

View on GitHub (pinned to 9e8be09156)

Solutions

  1. Update the NewPipeExtractor dependency to a version with current URL patterns for the service.
  2. Validate the URL type before calling getIntentByLink: call service.getLinkTypeByUrl(url) yourself and handle NONE gracefully.
  3. If the URL is a share/short URL, follow redirects to resolve the canonical URL first.
  4. Surface a user-facing 'unsupported link' message instead of letting the ExtractionException propagate.

Example fix

// before
Intent intent = NavigationHelper.getIntentByLink(context, service, url);

// after — check link type before delegating
StreamingService.LinkType type = service.getLinkTypeByUrl(url);
if (type == StreamingService.LinkType.NONE) {
    Toast.makeText(context, R.string.unsupported_url, Toast.LENGTH_SHORT).show();
    return;
}
Intent intent = NavigationHelper.getIntentByLink(context, service, url);
Defensive patterns

Strategy: validation

Validate before calling

// Check link type before calling getIntentByLink:
StreamingService service = NewPipe.getServiceByUrl(url);
StreamingService.LinkType type = service.getLinkTypeByUrl(url);
if (type == StreamingService.LinkType.NONE) {
    // URL not recognized — do not call getIntentByLink
    return null;
}

Try / catch

try {
    Intent intent = NavigationHelper.getIntentByLink(context, service, url);
} catch (ExtractionException e) {
    if (e.getMessage() != null && e.getMessage().startsWith("Url not known to service")) {
        // show user-facing 'unsupported link' and stop
        Toast.makeText(context, R.string.url_not_supported, Toast.LENGTH_SHORT).show();
    } else throw e;
}

Prevention

When it happens

Trigger: getIntentByLink(context, service, url) is called; service.getLinkTypeByUrl(url) returns StreamingService.LinkType.NONE; the equality check at line 740 fires. Happens when the URL belongs to a service whose patterns have changed, when the URL is a new/unsupported page type (e.g. a service's settings page), or when NewPipe.getServiceByUrl resolved the wrong service for the URL.

Common situations: YouTube/other service changed their URL structure and the extractor's pattern list is outdated; user pasted a URL for an unsupported page (account settings, search results, embed); a short URL (youtu.be) or share URL whose redirect target is not in the pattern list; mismatched service-to-URL mapping.


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