Thanks to visit codestin.com
Credit goes to github.com

Skip to content

plugins.soop: migrate to sooplive.com#6876

Merged
bastimeyer merged 2 commits into
streamlink:masterfrom
espressogit:soop-sooplive-com-url
Mar 27, 2026
Merged

plugins.soop: migrate to sooplive.com#6876
bastimeyer merged 2 commits into
streamlink:masterfrom
espressogit:soop-sooplive-com-url

Conversation

@espressogit

Copy link
Copy Markdown
Contributor

Summary

SOOP (formerly AfreecaTV) is migrating from sooplive.co.kr to sooplive.com. As of recently, https://www.sooplive.co.kr/ redirects to https://www.sooplive.com/, and play.sooplive.co.kr redirects to play-origin.sooplive.com in the browser.

This change proactively adds play.sooplive.com as a supported URL so the plugin is ready for potential .co.kr deprecation in the future, and for users who are already using the new sooplive.com URLs. The .co.kr domain is kept for backwards compatibility in case the migration is rolled back. The legacy play.afreecatv.com URL also remains supported and functional.

Changes

  • Added sooplive.com to the @pluginmatcher URL regex
  • Added $url play.sooplive.com to plugin metadata
  • Updated help text to reference sooplive.com
  • Added corresponding test cases for URL matching and non-matching

Test plan

Tested live recording with all three supported domains — login, stream discovery, and HLS recording all work correctly:

  • https://play.sooplive.com/channel/ — new .com URL works
  • https://play.sooplive.co.kr/channel/ — existing .co.kr URL still works
  • https://play.afreecatv.com/channel/ — legacy afreecatv URL still works
  • https://sooplive.com/channel/ (without play.) — correctly rejected
  • Unit tests pass (tests/plugins/test_soop.py — 27/27 passed)

SOOP (formerly AfreecaTV) is migrating from sooplive.co.kr to
sooplive.com. As of recently, https://www.sooplive.co.kr/ redirects to
https://www.sooplive.com/, and play.sooplive.co.kr redirects to
play-origin.sooplive.com in the browser.

While both play.sooplive.com and play.sooplive.co.kr URLs currently
work for streaming, this change proactively adds play.sooplive.com
support so the plugin is ready for potential .co.kr deprecation in the
future, and for users who are already using the new sooplive.com URLs.
The .co.kr domain is kept for backwards compatibility in case the
migration is rolled back. The legacy play.afreecatv.com URL also
remains supported and functional.

Tested live recording with all three domains (play.sooplive.com,
play.sooplive.co.kr, play.afreecatv.com) — login, stream discovery,
and HLS recording all work correctly.
@espressogit

Copy link
Copy Markdown
Contributor Author

AI disclosure: This PR was authored and tested with assistance from Claude Code (AI). Human-reviewed and straightforward change.

@espressogit

Copy link
Copy Markdown
Contributor Author

Debug log output

play.sooplive.com (new):

[cli][info] Found matching plugin soop for URL https://play.sooplive.com/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][debug] Authentication using stored credentials was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

play.sooplive.co.kr (existing):

[cli][info] Found matching plugin soop for URL https://play.sooplive.co.kr/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][debug] Authentication using stored credentials was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

play.afreecatv.com (legacy):

[cli][info] Found matching plugin soop for URL https://play.afreecatv.com/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][debug] Authentication using stored credentials was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

sooplive.com (without play. — correctly rejected):

error: No plugin can handle URL: https://sooplive.com/hotbeatstv/

@bastimeyer bastimeyer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR.

Please change the API URLs too.

@bastimeyer bastimeyer added the plugin enhancement A new feature for a working Plugin label Mar 27, 2026
Update internal API URLs (login, channel API, auth check), Origin
header, and cookie domain from .co.kr to .com to match SOOP's ongoing
domain migration.

Existing users with cached .co.kr cookies will re-authenticate
automatically on next run if credentials are provided.

Tested end-to-end with all three user-facing URL domains
(play.sooplive.com, play.sooplive.co.kr, play.afreecatv.com) —
login, stored cookie auth, and HLS recording all work correctly.
@espressogit

Copy link
Copy Markdown
Contributor Author

Updated — API endpoints migrated from .co.kr to .com (login, channel API, auth check, Origin header, cookie domain).

Debug log output (API endpoint changes)

play.sooplive.com — fresh login after credential purge (tests login.sooplive.com + live.sooplive.com endpoints):

[cli][info] Found matching plugin soop for URL https://play.sooplive.com/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, _ausb, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][info] All credentials were successfully removed
[plugins.soop][debug] Attempting to login using username and password
[plugins.soop][debug] Saved cookies: AbroadChk, AbroadVod, _au, _au3rd, _ausa, _ausb, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][info] Login was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

play.sooplive.com — stored cookie auth (tests afevent2.sooplive.com auth check endpoint):

[cli][info] Found matching plugin soop for URL https://play.sooplive.com/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, _ausa, _ausb, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][debug] Authentication using stored credentials was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

play.sooplive.co.kr — backward compat (.co.kr URL still works with .com API endpoints):

[cli][info] Found matching plugin soop for URL https://play.sooplive.co.kr/hotbeatstv/
[plugins.soop][debug] Restored cookies: AbroadChk, AbroadVod, _au, _au3rd, _ausa, _ausb, AuthTicket, BbsTicket, UserTicket, isBbs, RDB, BbsSaveTicket
[plugins.soop][debug] Authentication using stored credentials was successful
[cli][info] Available streams: 360p (worst), 540p, 720p, 1080p (best)
[cli][info] Opening stream: 1080p (hls)

@bastimeyer bastimeyer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

$ ./script/test-plugin-urls.py soop -m -r CHANNEL hotbeatstv -r 0123456789 292645879
:: https://play.afreecatv.com/hotbeatstv
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}
:: https://play.afreecatv.com/hotbeatstv/292645879
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}
:: https://play.sooplive.co.kr/hotbeatstv
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}
:: https://play.sooplive.co.kr/hotbeatstv/292645879
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}
:: https://play.sooplive.com/hotbeatstv
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}
:: https://play.sooplive.com/hotbeatstv/292645879
::  360p, 540p, 720p, 1080p, worst, best
::   {'id': '292645879', 'author': 'HotBeatsTV', 'category': None, 'title': '24/7 Electronic Music directly from Clubs, Events, Festivals and Sessions'}


authed = False
if self.session.http.cookies.get_dict(domain=".sooplive.co.kr"):
if self.session.http.cookies.get_dict(domain=".sooplive.com"):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will require re-authentication for users who have stored their auth credentials in the plugin cache file, but I guess it's the correct thing to change it now.

*Theoretically*, we could translate stored cookies, but it's not worth the effort.

self.session.http.headers.update({
"Referer": self.url,
"Origin": "https://play.sooplive.co.kr",
"Origin": "https://play.sooplive.com",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Speaking of translating URLs, would it make sense translating self.url to the .com domain? Streams currently work on all URLs supported by the matchers, so it's not a requirement to do any URL translations. But should HTTP requests be rejected when using the .co.kr domain and setting the .com Origin header, then URL translations needs to be applied. For now, I think, it's good enough.

@bastimeyer bastimeyer changed the title plugins.soop: add support for play.sooplive.com URL plugins.soop: migrate to sooplive.com Mar 27, 2026
@bastimeyer bastimeyer merged commit 473b3ab into streamlink:master Mar 27, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin enhancement A new feature for a working Plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants