Repository: streamlink/streamlink

Issue:
[bug] Tv1channel plugin no longer works
## Bug Report
<!-- Replace [ ] with [x] in order to check the box -->
- [x] This is a bug report and I have read the contribution guidelines.

### Reproduction steps / Explicit stream URLs to test

http://tv1channel.org/index.php/livetv fails to open. Stream seems to have moved away to a m3u8 link - either a quick fix or just remove the plugin as it is covered by one of the main plugins.


Discussion:
This looks like it's a static HLS address, but I'm not sure because of the numbers:

```
$ streamlink -l debug 'https://tv1.cdn.netbadgers.com/bg060/bg061/bg061.m3u8'
[cli][debug] OS:         Linux-5.6.0-1-git-x86_64-with-glibc2.2.5
[cli][debug] Python:     3.8.2
[cli][debug] Streamlink: 1.3.1+113.g1b287a6
[cli][debug] Requests(2.23.0), Socks(1.7.1), Websocket(0.56.0)
[cli][info] Found matching plugin hls for URL https://tv1.cdn.netbadgers.com/bg060/bg061/bg061.m3u8
[plugin.hls][debug] URL=https://tv1.cdn.netbadgers.com/bg060/bg061/bg061.m3u8; params={}
[utils.l10n][debug] Language code: en_US
Available streams: 576p (worst, best)
```

The site you're linking is just embedding an iframe with this URL:
`https://tv1.cdn.netbadgers.com/`
The plugin was apparently built for that, but the content of the embedded site must have changed.
I am a bit dubious about the numbers too, but I'm guessing that's just the 61st livestream they host? Maybe I can check back in X days and if the link is still the same - the plugin can be removed?
@bastimeyer The links should be permanent. I managed to find another hosted channel, so I think this means the Tv1Channel plugin is no longer required.

Example: https://eurofolk.cdn.netbadgers.com/bg040/bg041/bg041.m3u8

Resolving patch:
diff --git a/src/streamlink/plugins/tv1channel.py b/src/streamlink/plugins/tv1channel.py
deleted file mode 100644
--- a/src/streamlink/plugins/tv1channel.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import re
-
-from streamlink.plugin import Plugin
-from streamlink.plugin.api import useragents
-from streamlink.plugin.api.utils import itertags
-from streamlink.stream import HLSStream
-
-
-class TV1Channel(Plugin):
-    _url_re = re.compile(r'https?://(?:www\.)?tv1channel\.org/(?!play/)(?:index\.php/livetv)?')
-
-    @classmethod
-    def can_handle_url(cls, url):
-        return cls._url_re.match(url) is not None
-
-    def _get_streams(self):
-        self.session.http.headers.update({'User-Agent': useragents.FIREFOX})
-        res = self.session.http.get(self.url)
-        for iframe in itertags(res.text, 'iframe'):
-            if 'cdn.netbadgers.com' not in iframe.attributes.get('src'):
-                continue
-
-            res = self.session.http.get(iframe.attributes.get('src'))
-            for source in itertags(res.text, 'source'):
-                if source.attributes.get('src') and source.attributes.get('src').endswith('.m3u8'):
-                    return HLSStream.parse_variant_playlist(self.session,
-                                                            source.attributes.get('src'))
-
-            break
-
-
-__plugin__ = TV1Channel


Test patch:
diff --git a/tests/plugins/test_tv1channel.py b/tests/plugins/test_tv1channel.py
deleted file mode 100644
--- a/tests/plugins/test_tv1channel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import unittest
-
-from streamlink.plugins.tv1channel import TV1Channel
-
-
-class TestPluginTV1Channel(unittest.TestCase):
-    def test_can_handle_url(self):
-        # should match
-        self.assertTrue(TV1Channel.can_handle_url("http://tv1channel.org/"))
-        self.assertTrue(TV1Channel.can_handle_url("http://tv1channel.org/index.php/livetv"))
-
-        # shouldn't match
-        self.assertFalse(TV1Channel.can_handle_url("https://local.local"))
-        self.assertFalse(TV1Channel.can_handle_url("http://www.tv1channel.org/play/video.php?id=325"))
-        self.assertFalse(TV1Channel.can_handle_url("http://www.tv1channel.org/play/video.php?id=340"))