Własny serwer podcast

Na moim koncie YouTube mam coraz większą listę filmów do obejrzenia, głównie przesłuchania różnych wywiadów, konferencji czy innych pozycji w których głównym elementem jest głos – obraz jest zbędny. Niestety aplikacja YouTube na androida nie posiada możliwości (na chwilę obecną) odtwarzania pozycji na wygaszonym ekranie. Dodatkowo więcej baterii zużywamy oraz transferu danych. Z drugiej zaś strony też jesteśmy “uzależnieni od jakiejś platformy, urządzenia, która nam serwuje treść z YouTube” – mam tutaj na myśli np.: WWW, TV, tablet itp. Ja natomiast potrzebowałem prostego narzędzia, które wyciągnie audio z video i zaserwuje mi treść niezależnie od urządzenia. Stąd narodził się pomysł stworzenia własnego serwera podcast / audio, który będzie serwował mi pozycję z wybranej playlisty YouTube. Oczywiście poniższy projekt może też serwować inne pliki które mu dostarczymy np.: audiobooki.

1. Wymagania serwera

Cały sprawa sprowadza się do posiadania sprzętu z zainstalowanym systemem Linux lub pochodnym. W moim przypadku skorzystałem z Raspberry Pi. Oczywiście może to być też VPS itp. Nie testowałem na Windowsie – aczkolwiek może działać :). Jak ktoś przetestuje proszę dać znać. Oprócz tego będziemy potrzebowali Pythona + kilka zależności, FFmpeg i skryptu który wykona za nas robotę.
Jeżeli chodzi o YouTube musimy stworzyć playlistę niepubliczną lub publiczną – nie może być prywatna.

2. Przygotowanie serwera

Poniższe komendy wydawałem na systemie raspbian (ale też powinny działać na innych systemach linux). Wszystkie potrzebne rzeczy zainstalujemy wydając komendę:

sudo apt-get install libav-tools python
sudo pip install mutagen youtube-dl

3. Projekt GenPodcastFromYT

Projekt możesz znaleźć na github. Możemy go ściągnąć przez git’a lub bezpośrednio i zapisać go na dysku.
Na początku musimy poustawiać kilka rzeczy które znajdują się na początku pliku:

  • PLAYLIST – adres url lub “nr” playlisty z YouTube,
  • PATH_MP3 – ścieżka gdzie mają zapisywać się pliki z mp3,
  • HOST – nazwa hosta/IP na którym znajdują się serwer,
  • PORT – nr portu serwera podcastu,
  • REFRESH_RSS – jak często serwer ma pobierać pliki i generować nowy plik rss,
  • Reszta można zostawić domyślnie lub zmienić według uznania.

San projekt składa się z czterech funkcji:

  • start_server() – uruchamia prosty serwer WWW w pythonie.
  • dlAudio() – ta funkcja odpowiada za pobieranie pozycji z YouTube i konwertuje do formatu mp3,
  • gen_rss() – generuje plik rss,
  • check_net() – funkcja pomocnicza, sprawdza czy jest internet jeśli nie to czeka 1 min i ponownie sprawdza.

Skrypt działa w oparciu o następujący kod:

start_server()
while True:
	check_net()
	dlAudio()
	time.sleep(2)
	gen_rss()
	time.sleep(REFRESH_RSS)

Jeśli posiadasz już serwer WWW i chcesz z niego korzystać to zakomentuj lub usuń wpis który uruchamia serwer. Jest to linia 139 (w pliku). Pamiętaj tutaj, że pliki z mp3 nie mogą znajdować się poza katalogiem WWW,
Jeżeli potrzebujesz tylko serwera podcast i nie chcesz pobierać plików z YouTube zakomentuj linie dlAudio(). Dodajesz tylko pliki audio do katalogu PATH_MP3, a serwer robi resztę sam.

4. Uruchamiamy serwer

Mamy dwie opcję uruchomienia pierwsza z wiersza poleceń:

python GenPodcastFromYT.py

Wadą tego jest jak wyjdziesz z terminala (jeśli łączyć się przez ssh) serwer przestanie działać, zawsze można dodać do screena. Innym rozwiązaniem jest dodanie do crona i jego uruchomienie podczas startu systemu.

@reboot python /path/GenPodcastFromYT.py

5. Podsumowanie

Stworzenie własnego serwera podcast nie jest trudne i może przynieść korzyści. Projekt który stworzyłem może nie jest jakiś super idealny pod względem kodu, ale miał to być szybki i prosty sposób na uruchomienie serwera audio w sieci lokalnej. Projekt miał spełnić dwa warunki:

  1. Działać jako serwer audio / podcast,
  2. Dodatkowo pobierać pozycje z YouTube.

i spełnił te warunki. Złą wiadomością jest to, że jeśli odsłuchamy dany plik musimy go kasować ręcznie + pozycję które znajdują się na YouTube. Nie wykluczam w przyszłości rozbudowania tego skryptu jeśli będzie taka potrzeba. Zapraszam do zgłaszania propozycji lub uwag. Mile widziany feedback

, , , ,

Nie zapomnij przeczytać: