I ended up using PyQt5 to create a window and embed the vlc media player in it and then switch using that. The code I used to define the stream is:
class Stream(QtWidgets.QMainWindow):
def __init__(self, url: str, title: str, parent=None):
super(Stream, self).__init__(parent)
self.setWindowTitle(title)
# creating a basic vlc instance
self.instance = vlc.Instance()
self.media_player = self.instance.media_player_new()
self.video_frame = QtWidgets.QFrame()
if sys.platform.startswith("linux"): # for Linux using the X Server
self.media_player.set_xwindow(self.video_frame.winId())
elif sys.platform == "win32": # for Windows
self.media_player.set_hwnd(self.video_frame.winId())
print(self.media_player.get_hwnd())
elif sys.platform == "darwin": # for MacOS
self.media_player.set_nsobject(self.video_frame.winId())
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
lay = QtWidgets.QVBoxLayout(central_widget)
lay.addWidget(self.video_frame)
self.video_frame.setStyleSheet("border: 0px")
central_widget.setStyleSheet("border: 0px")
self.setStyleSheet("border: 0px")
youtube_url = pafy.new(url).getbest()
media = self.instance.media_new(youtube_url.url)
self.media_player.set_media(media)
self.media_player.audio_set_volume(0)
self.media_player.play()
self.showFullScreen()
def bring_to_foreground(self):
self.window().activateWindow()
self.media_player.audio_set_volume(100)
def mute(self):
self.media_player.audio_set_volume(0)