Repository: streamlink/streamlink

Issue:
Azerbaycan stations 
## Feature Request

- [x ] This is a feature request and I have read the contribution guidelines.

### Description

I want see the LiveStream over Streamlink Plugin 

### Expected / Actual behavior

The livestreams can be played on the page http://www.idmantv.az via the Firefox browser.
The site includes the broadcasters AZTV, Idman TV and Medeniyet TV
About the VLC player, it is not possible because the transmitter permanently tokens changes, the Streamlinkplugin should be able to handle it.


### Additional comments, screenshots, etc.

 
![idman tv](https://user-images.githubusercontent.com/36420635/47272680-7bdb3700-d589-11e8-99ec-39b7a683bedc.JPG)

 AZ TV 
http://185.102.219.82/5929820/tracks-v1a1/index.m3u8?token=
http://player.tvibo.com/aztv/5929820

Medeniyet
http://185.102.219.82/6858270/tracks-v1a1/index.m3u8?token=
http://player.tvibo.com/aztv/6858270/

Idman TV 
http://185.102.219.82/3977238/tracks-v1a1/index.m3u8?token=
http://player.tvibo.com/aztv/3977238/



Discussion:
Are there different URLs for these three channels? How would a user choose which channel to watch?

Also, if you extract `.m3u8` URL from your browser, running `streamlink http://185.102.219.82/6858270/index.m3u8?token=... best` can play the stream without dropping.
in first Post now with the stream links

Resolving patch:
diff --git a/src/streamlink/plugins/tvibo.py b/src/streamlink/plugins/tvibo.py
new file mode 100644
--- /dev/null
+++ b/src/streamlink/plugins/tvibo.py
@@ -0,0 +1,34 @@
+import logging
+import re
+
+from streamlink.plugin import Plugin
+from streamlink.stream import HLSStream
+
+log = logging.getLogger(__name__)
+
+
+class Tvibo(Plugin):
+
+    _url_re = re.compile(r"https?://player\.tvibo\.com/\w+/(?P<id>\d+)")
+    _api_url = "http://panel.tvibo.com/api/player/streamurl/{id}"
+
+    @classmethod
+    def can_handle_url(cls, url):
+        return cls._url_re.match(url) is not None
+
+    def _get_streams(self):
+        channel_id = self._url_re.match(self.url).group("id")
+
+        api_response = self.session.http.get(
+            self._api_url.format(id=channel_id),
+            acceptable_status=(200, 404))
+
+        data = self.session.http.json(api_response)
+        log.trace("{0!r}".format(data))
+        if data.get("st"):
+            yield "source", HLSStream(self.session, data["st"])
+        elif data.get("error"):
+            log.error(data["error"]["message"])
+
+
+__plugin__ = Tvibo


Test patch:
diff --git a/tests/plugins/test_tvibo.py b/tests/plugins/test_tvibo.py
new file mode 100644
--- /dev/null
+++ b/tests/plugins/test_tvibo.py
@@ -0,0 +1,22 @@
+import unittest
+
+from streamlink.plugins.tvibo import Tvibo
+
+
+class TestPluginTvibo(unittest.TestCase):
+    def test_can_handle_url(self):
+        should_match = [
+            'http://player.tvibo.com/aztv/5929820',
+            'http://player.tvibo.com/aztv/6858270/',
+            'http://player.tvibo.com/aztv/3977238/',
+        ]
+        for url in should_match:
+            self.assertTrue(Tvibo.can_handle_url(url))
+
+    def test_can_handle_url_negative(self):
+        should_not_match = [
+            'http://www.idmantv.az/',
+            'https://www.twitch.tv/twitch'
+        ]
+        for url in should_not_match:
+            self.assertFalse(Tvibo.can_handle_url(url))