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
- Update the NewPipeExtractor dependency to a version with current URL patterns for the service.
- Validate the URL type before calling getIntentByLink: call service.getLinkTypeByUrl(url) yourself and handle NONE gracefully.
- If the URL is a share/short URL, follow redirects to resolve the canonical URL first.
- 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
- Always call service.getLinkTypeByUrl(url) and handle NONE before getIntentByLink.
- Keep the NewPipeExtractor dependency updated for current URL patterns.
- Resolve share/short URLs to canonical form before type detection.
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.