Własny odtwarzacz audio/wideo w kilku linijkach

Aktualnie zajmuję się coraz intensywniej przygotowywaniem się do utworzenia projektu związanego z moją pracą magisterską (czy wręcz będącym jego podstawą 😉 ). Jego kluczową częścią jest odtwarzanie multimediów dlatego dzisiaj sprawdziłem w jaki sposób najlepiej to ugryźć. Oczywiście im bardziej dostępne dla ludzi (wieloplatformowe) tym lepiej.

Na początek pomyślałem sobie, by napisać plugin do programu Totem. Jest to Linuksowy program do odtwarzania filmów i utworów. Kiedy rozpocząłem swoje poszukiwania odpowiednich tutoriali w tym temacie okazało się, jest z tym raczej krucho. Bardzo słaba dokumentacja i wsparcie od kogokolwiek skłoniła mnie jednak do poszukania czegoś innego.

Jak zwykle w takich sytuacjach pierwsze kroki kieruję w stronę Pythona. Po prostu wiem, że on potrafi zazwyczaj wszystko co potrzeba. W związku z tym, że jakiś czas temu uczyłem się PyQt4 pomyślałem, że może i to przyjdzie mi z pomocą.

Oczywiście nie zawiodłem się 🙂 Okazało się bowiem, że Qt ma przepiękne wsparcie dla odtwarzania audio/video poprzez Phonon. Po kilku minutach przypatrywania się genialnej dokumentacji Qt (ma świetne przykłady) napisałem kilka linijek w interaktywnej konsoli Pythona i moim oczom ukazało się okienko z odtwarzaniem filmu! Linijki te wyglądały tak:

>>> import sys
>>> from PyQt4.QtGui import QApplication
>>> from PyQt4.phonon import Phonon
>>> app = QApplication(sys.argv)
>>> player = Phonon.VideoPlayer(Phonon.VideoCategory)
>>> source = Phonon.MediaSource(„/sciezka/do/pliku”)
>>> player.setVisible(True)
>>> player.play(source)

W ten sposób na ekranie pojawiło się proste okienko z odtwarzaniem filmu. Przy pomocy tego narzędzia można napisać prosty program, który uruchomiony z linii poleceń rozpocznie odtwarzanie filmu:

import sys
from PyQt4.QtGui import QApplication
from PyQt4.phonon import Phonon

if __name__ == '__main__':    
    app = QApplication(sys.argv)
    app.setApplicationName("Simple Video Player")
    player = Phonon.VideoPlayer(Phonon.VideoCategory)
    
    source = Phonon.MediaSource(sys.argv[1])
    player.play(source)
    player.setVisible(True)
    
    app.exec_()

W taki sposób możemy stworzyć prosty odtwarzacz. To jednak nie wszystko! W pakiecie dostajemy zupełnie za darmo odtwarzanie strumieni sieciowych. Jeśli do MediaSource podamy URL to player po prostu rozpocznie strumieniowanie i odtwarzanie filmu czy pliku dźwiękowego. Oczywiście podając URL statycznego pliku graficznego również ujrzymy go na ekranie. Problem pojawia się jedynie z przezroczystością w plikach PNG, ale do moich zastosowań zupełnie wystarczy mi to co działa dobrze.

Coraz bardziej się przekonuję o tym, że Python+Qt4 to duet nie do zastąpienia. Wszystko o czym pomyślę można osiągnąć pisząc w zasadzie bardzo niewiele linijek i na dodatek wszystko da się uruchomić na różnych systemach operacyjnych. Pięknie! 🙂

Python: Ukrycie okna konsoli w Windows

Jedynym mankamentem jaki pojawił się podczas uruchamiania skryptu wykorzystującego GUI w Windowsie, było wyskakujące czarne okienko konsoli… Rozwiązanie tego problemu znalazłem dość szybko i jest ono niesamowicie proste. Otóż w instalacji Windowsowej istnieją dwa interpretery – jeden konsolowy (python.exe)  oraz jeden Windowsowy (pythonw.exe).

Aby skorzystać z tego drugiego podczas wykonywania własnego skryptu wystarczy zmienić rozszerzenie z .py na .pyw.

Po takiej zamianie okno konsoli już nie będzie straszyć użytkowników programu 😉