Skip to content

Repository files navigation

PublicIPTV

English | 简体中文

A lightweight Chrome extension for discovering and playing streams on the web.

Installation

  1. Download this repository, or extract dist/PublicIPTV.zip generated by npm run package.
  2. Open chrome://extensions and enable Developer mode.
  3. Click Load unpacked and select the repository’s extension folder. If you extracted the ZIP, select the folder containing manifest.json.
  4. Pin PublicIPTV to the toolbar. Chrome 116 or later is required.

No npm installation or build step is needed to use the extension. The HLS playback library is bundled locally.

Usage

  • Open a TV station or live-streaming page to start capturing automatically. Play a video on the page, then click the extension to view the results. Capture starts when the page loads to catch autoplay requests.
  • If playback has already started, use Reload & capture to reload the page and play the video again.
  • Detect HLS streams (m3u/m3u8 or matching MIME types) and MP4/WebM/MOV videos. Results are kept separate for each browser tab and include requests made by iframes.
  • Search by name, URL, or page title, or filter by HLS / Video.
  • Click Play to watch inside the extension popup and Back to streams to return to the list. Closing the popup stops playback. Copy copies the full URL, including its original query parameters.
  • The player supports HLS adaptive bitrate streaming, quality selection, native playback controls, retries, a link to the original page, and manual URL entry. If autoplay is blocked, click the video’s play button.
  • Pause capture stops recording, and Clear removes recorded results. Navigating to another page clears old results. New tabs capture automatically; manually paused tabs stay paused across reloads and navigation. Use Start capture or Reload & capture to resume.

Scope and Limitations

  • This version does not include a submission API, uploads, a backend stream catalog, or automatic publishing.
  • Captured results are candidate media resources. They are not verified live streams, and their discovery does not imply permission for public redistribution.
  • The extension does not collect Cookie / Authorization headers, replay login credentials, or spoof Referer headers. Streams requiring these, DRM, a specific region, or expired signatures may not play in the extension. Use the original page instead.
  • DASH, FLV, UDP/RTP, and deep extraction of blob-only/MSE media are outside the scope of this version.
  • Each tab retains up to 150 recent distinct URLs. Identical URLs are deduplicated; URLs with different signatures or quality parameters are retained. Records are cleared when the browser closes.

Permissions and Privacy

See PRIVACY.md for details. Detecting streams across CDN domains and playing them directly requires HTTP/HTTPS host permissions. Capture starts automatically on regular HTTP/HTTPS tabs and can be paused per tab. Request headers are not stored. Playback connects directly to the video provider without passing through Public IPTV servers.

Development and Verification

npm ci
npm test
npx playwright install chromium
npm run test:browser
npm run package

Browser tests generate a local HLS test stream (requires ffmpeg), load the actual extension, and verify capture and real video decoding. They do not depend on third-party live-streaming sites.

After updating hls.js, run npm run vendor and commit the vendor files. The project code is licensed under MIT; hls.js uses Apache-2.0, with its license in extension/vendor/HLS-LICENSE.txt.

About

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages