Seit kurzem bastel ich an einem Streaming-Setup für den Sneakpod. Ziel ist es die Sendungen live zu streamen, aber nach wie vor lokal aufzunehmen. Im Anschluß an die Live-Sendung steht die normale Nachbearbeitung um dann eine neue Podcast-Folge zu veröffentlichen. Dazu habe ich mich mal in Icecast und die Möglichkeiten vom Mac zu streamen vergraben möchte das derzeitige Setup kurz darlegen.
In der Artikelserie zum Thema Podcast-Setuphabeich das grundsätzliche Setup unseres Podcasts (aus damaliger Sicht) bereits dargelegt, bei Bedarf (schreibt Kommentare) werde ich da vielleicht nochmal ein Update geben, da sich schon einiges geändert hat.
Protokolle
Da ich erstmal das Thema Streaming überhaupt an den Start bringen wollte und mir das Thema HTTP-LiveStreaming zwar schon verlockend vorkam, aber dann doch (noch) sehr Apple-zentrisch ist, fiel die Wahl erstmal auf klassisches Icecast/SHOUTcast-Streaming. Das geht auch über HTTP, macht allerdings noch nicht so den ganzen modernen Foo mit unterschiedlichen Qualitätsstufen und ist natürlich auch nicht in der Lage als Nebenprodukt eine Re-Live-Möglichkeit abzuwerfen. Dafür gibt es für Icecast eine breite Unterstützung an Clients auf Hörerseite, dazu aber später mehr.
Audio-Formate
Eine Entscheidung für bestimmte Audioformate muss man an dieser Stelle noch nicht treffen, da sowohl HTTP-LiveStreaming, als auch Icecast-Streams in MP3, AAC und Vorbis streamen können. Jedoch habe ich mich entschlossen 2 Streams parallel anzubieten. Zu ersteinmal einen MP3-Stream und zum anderen einen AAC(HE)-Stream.
MP3-Stream
MP3 dürfte da draußen in der weiten Welt immer noch den kleinsten gemeinsamen Nenner darstellen wenn es um Massenkompatibilität geht, also müssen wir natürlich in MP3-Streamen. Um den Server bei mehr Hörern zu schonen streamen wir nur in Mono und zwar mit 64kBit/s (ABR).
AAC(HE)-Stream
Den AAC-Stream bieten wir mit niedrigerer Bitrate speziell mit Hintergedanken an Verbindungen mit sehr niedriger Bandbreite an. Solltet Ihr also beispielsweise vorhaben uns von unterwegs über UMTS (oder schlimmer), bespielsweise am Handy, zu hören dann ist dieser Stream mit nur 32kBit/s ABR der Richtige. Der Decoder den Ihr einsetzt sollte aber auf jeden Fall High Efficiency-AAC unterstützen, sonst klingt der Stream eher fürchterlich.
Server
Hardware und Bandbreite
Als Server verwenden wir ((bis auf weiteres)) unseren normalen Sneakpod.de-Server, auf dem auch dieses Blog läuft. Wieviele Hörer der aushält ist vorerst unbekannt. Je nachdem ob die Bandbreite oder die CPU-Last den Stream als erstes killt. Vorerst halten sich die Hörerzahlen unserer bisherigen Experimente stark in Grenzen und wir werden erstmal sehen müssen wie das weitergeht. Eine kleine Beispielrechnung sagt mir das man unseren beiden Streams (zusammen 96kBit/s) über 1000x parallel über eine 100MBit/s-Anbindung schieben könnte – ich gehe daher davon aus, dass der Server vorher an seinen eigenen Querelen (aka CPU-Last) eingeht.
Software
Der Server läuft, nach wie vor, unter CentOS und dort habe ich Icecast2 installiert. In der Datei /etc/icecast2.xml kann man nun so diverse Limits für den Server einstellen. Ich habe hier das meiste bei den Defaults belassen.
<clients>100</clients> limitiert uns erstmal auf 100 Zuhörer, keine Ahnung ob der Server das überhaupt mitmacht, aber bislang haben wir dieses Limit noch nicht erreicht – wenn es so kommt sehen wir weiter.
Die Zugangsdaten legt man im Bereich authentication fest, hier trägt man Usernamen und Passwörter für die Source-Clients ein, also die Daten, mit denen man sich später anmeldet um etwas über diesen Server zu streamen.
Im unteren Bereich der XML-Datei muss man noch die Pfade für’s webroot anpassen, damit Icecast seine eigenen Webseiten richtig ausliefern kann, man wählt sich einen Port ≠ 80 um dem normalen Webserver nicht auf die Füße zu treten.
Source-Clients
Unsere Audiodaten, also unser Podcast ensteht ja aber logischerweise nicht auf dem Server, sondern irgendwo im Studio und da haben wir maximal einen Laptop. Natürlich streamt man nicht von diesem Laptop zu allen Zuhörern, sondern von dort aus nur mit einem Stream zum Server und dieser verteilt den Stream an die Hörer. Wir sind also für den Server eine sogenannte Source, eine Quelle, und brauchen dafür eine Client-Software um den Icecast-Server zu füttern. Da ich den Stream mit einem Mac betreibe kommen eigentlich nur 2 Produkte in Frage: Ladiocast oder Nicecast. Ersteres ist eine kostenlose japanische Software, zweiteres ein Rogue Amoeba-Produkt das Geld (($59 um genau zu sein)) kostet.
Ladiocast
Die Entscheidung fiel also erstmal auf Ladiocast und das muss man nun einrichten. Ladiocast kann 2 Streams gleichzeitig aussenden, somit können die beiden oben erwähnten Streams problemlos konfiguriert werden.
Gestreamt wird zu sogenannten Mountpoints. Effektiv sehen diese für den Webbrowser wie Ressourcen hinter einem URL aus. Dieser kann, in der Standardkonfiguration durch die Source festgelegt werden ((es lassen sich auch feste Mountpoints in der .xml-Datei festlegen)). In unserem Fall legen wir die Mountpoints Live.mp3 und Live.heaac durch die Einstellungen in Ladiocast fest.
Ladiocast besitzt im Haupfenster Mix-Möglichkeiten für den Main-Mix und zwei separate AUX-Mixe, in unserem Setup kommt diese Funktion allerdings nicht zum Einsatz. Wir geben einfach ein Line-In auf den Output, fertig. Das Line-In kommt im Falle einer Aufnahme über Skype oder bei mir im Heimstudio aus dem Mischpult ((dann auch über ein anderes Interface, aber ich schweife ab)) oder, im Falle einer Aufnahme über Stefans H2, direkt aus dem Aufnahmegerät.
Listening-Clients
Kommen wir zur Seite des Hörers. Um den Stream zu empfangen benötigt man natürlich eine Software die in der Lage ist auf den Streaming-URL zuzugreifen und Audio zur Ausgabe zu bringen. Hierzu gibt es unzählige Möglichkeiten, einige hatte ich bereits auf www.sneakpod.de/Live-Stream/ gelistet. Das vorgehen ist jedoch immer das gleiche – spielen wir das am Beispiel von VLC ((das gibt es für nahezu alle Platformen)) einmal durch.
Als erstes wählt man aus dem Menü Open Network...
um als nächstes den Stream-URL einzugeben und zu öffnen. Fertig. Mehr ist nicht zu tun, auch wenn es natürlich nur wirklich funktioniert während wir streamen. In der übrigen Zeit bekommt man eine Fehlermeldung. :-(
Qualität
Audioqualität
In meinen Testaufbauten war ich mit der Streamqualität ((rein was das Audioencoding anging)) recht zufrieden, auch wenn ich von einigen Hörern nach der ersten gestreamten Sendung das Feedback bekommen habe, dass zu wenig Pegel auf dem Stream gewesen sei – das wird zu erforschen bleiben.
Latenz
Die Latenz, also die Verzögerung zwischen dem wirklich gesprochenen Wort und dem Augenblick in dem die Zuhörer es hören können, liegt irgendwo zwischen 5 und 10 Sekunden. Scheint für diese Art von Streaming ein übliche Größe zu sein, stellt kein großes Problem dar und macht sich immer sehr unterhaltsam in Chat bemerkbar.
Chat
Was wäre eine Live-Sendung auch ohne Chat. Natürlich haben auch wir einen. #Sneakpod auf Freenode. Wie man da hinkommt steht auch auf www.sneakpod.de/Live-Stream/.
Interessant? Lust mehr zu erfahren? Schreibt Kommentare. BTW: Dies ist der erste Artikel im Blog den ich mithilfe von Markdown geschrieben habe – hat gut geklappt – ging entspannt und schnell von der Hand und ich könnte mir vorstellen das in einem zukünftigen Artikel zu beleuchten.
Letzte Woche sahen wir in der Sneak den LiebesBeziehungsfilm 500 Days of Summer. Leider war ich zur Aufnahme des Sneakpods, wo ich normalerweise meine Meinung zu Protokoll gegeben hätte, nicht anwesend – daher schreib ich hier kurz auf, was ich zum Film denke.
DJ Mike Relm erzeugt aus bekannten YouTube-Videos Töne durch Scratchen auf Timecodeplatten, klingt wie eine Mischung zwischen coolem Beat und Katzengeheul
Dies ist der letzte Teil der Serie “Podcast Setup”. Im dritten und letzten Teil geht es darum wie die MP3-Datei fürs Web vorbereitet wird, wie der Podcast schließlich ins Web kommt, wie er veröffentlicht wird. RSS-Feed erzeugen und all das. Die ersten beiden Teile dieser Serie finden sich hier und hier.
Web
Vorbereitungen
Nachdem der Schnitt der Datei nun fertiggestellt ist, wird sie als MP3 exportiert, mit Tags versehen und ins Internet gestellt wo sie über die Webseite oder einen RSS-Feed abrufbar ist.
Exportieren
Bei der Bitrate für einen Podcast hört man im Internet sehr viele unterschiedliche Empfehlungen. Die übliche “CD-Qualität” bei 128kbps die für ein normales MP3 früher angesetzt wurde ist sicher auch für einen Podcast nicht verkehrt – allerdings würde man hier viel Traffic umsonst verursachen. Die Dateien würden relativ groß (etwas über 900kB pro Minute) und bei einem reinen Sprachprogramm (und ein solches ist der Sneakpod) wären 128kbps schlichtweg Overkill. Empfehlungen die man so hört sprechen von 64-96kbps. Normalerweise würden auch 22,05kHz statt der bei Musik verwendeten 44.1kHz ausreichen, nur hört man immer wieder von verschiedenen Inkompatibilitäten mit diversen Web-Flash-Playern und da unser Podcast über eben solche auf vielen Seiten von Podcastportalen angehört werden kann wollten wir hier kein Risiko eingehen. Je nach Schnittmeister (Stefan oder ich) exportieren wir unseren Podcast also normalerweise entweder mit 96kbps CBR ((CBR = konstante Bitrate, constant bitrate)) oder mit zwischen 64-112kbps VBR ((VBR = variable Bitrate)).
Taggen
Jetzt haben wir also endlich eine fertig bearbeitete Audiodatei im richtigen Format – fertig für die Welt da draußen, kompatibel mit den Flashplayern und MP3-Geräten, iPods, iPhones und Whatnots. Was Ihr als letzter Schliff noch fehlt sind ID-Tags.
ID-Tags ((im Zusammenhang mit MP3s nennt sich der Standard dafür ID3-Tags)) sind Metainformationen die in der MP3-Datei selbst abgespeichert werden und Informationen über das Tondokument selbst enthalten. Artist, Titel, Album, Albumart, etc. Diese ganzen Werte werden nun also auch für unseren Podcast ausgefüllt, Tracknummer mit der aktuellen Folgennummer gefüllt, vielleicht ein Kommentar ergänzt und ganz wichtig: Unser Logo als Cover mit in die Datei gespeichert.
Der letzte Schritt ist wichtig für alle unsere iPod-Hörer da draussen. Für Podcastverzeichnisse und ähnliches im Web reicht es wenn man das Logo als Cover über den RSS-Feed einbindet damit es angezeigt wird, aber um auf dem iPod mit Bildchen zu erscheinen muss das Logo als ID3-embedded CoverArt in die MP3-Datei. Ich finde es erstaunlich das von den etwa 50 Podcasts die ich abonniert habe, immernoch einige diesen einfachen letzten Schritt nicht hinkriegen. Ein Schritt der die Produktion am Ende der Kette, auf dem iPod des Hörers, doch erheblich aufwertet. Die 3-5 Folgen in der Liste von Podcasts auf meinem iPod die kein CoverArt besitzen und daher mit so einem schmucklosen grauen Hintergrund angezeigt werden, fallen mir jeden Tag aufs neue irgendwie unangenehm ins Auge.
Uploading
Jetzt ist die Datei aber wirklich fertig -der Prozess war ja auch lang genug. Jetzt muss Sie auf einen Webserver – hier gibts nahezu endlos viele Möglichkeiten wie die Datei zum Server gelangt, normale Podcastprogramme bieten meist einen FTP-Upload an, oder man nutzt ein Webinterface. Unsere Podcast-Seite www.sneakpod.de läuft auf einem von mir selbst administrierten Linux-System ((ein vServer welcher unter CentOS läuft)) auf dem kein FTP-Server läuft. Entweder lade ich die Datei also über das Website-Backend unserer Blogingsoftware (dazu gleich mehr) auf den Server (was einigermaßen schmerzvoll ist), oder – meine Wahl – ich benutze einen SSH basierten verschlüsselten Filetransfer über SCP. Da ich meinen Podcast auf einer Windowsmaschine produzieren und dann auch hochlade, kommt konkret WinSCP zum Einsatz.
Website
Fehlen noch zwei Schritte: Es muss ein Eintrag zur neuen Folge auf die Webseite und wir brauchen den dazu passenden Eintrag im RSS-Feed. Zweiteres ist eigentlich noch das wichtigere, denn der RSS-Feed macht dieses Audioangebot erst zu einem Podcast – bis hierher haben wir nämlich erstmal nur eine Sprachaufnahme hergestellt die wir zum Download anbieten werden. Erst der RSS-Feed und die Tatsache das man selbigen mit geeigneten Programmen ((sogenannten Podcatchern)) abonnieren kann und dadurch automatisch die aktuellen Folgen auf seinen eigenen Rechner bekommen, macht dieses Audiodownloadangebot zu einem Podcast.
Einen solchen RSS-Feed kann man natürlich von Hand tippen, das ist im Grunde auch wirklich nicht schwer, das ist plattes XML. Aber genauso wie heute kaum noch jemand die einzelnen Seiten seiner Webpage von Hand schreibt, sondern ein CMS verwendet, so kenn ich auch keinen Podcaster der seinen RSS-XML von Hand tippen würde. Beim Sneakpod verwende ich WordPress als CMS-System und darauf aufsetzend das podpress PlugIn von Mightseek. So wird im WordPresssystem auf unserem Server ein Artikel angelegt, geschrieben und dann das MP3 zur Veröffentlichung angehängt. WordPress legt ja ohnehin für das gesamte Blog Feeds aller Art an und podpress kümmert sich darum, dass in diesen einen (Podcast-)Feed auch die Enclosures ((Anhänge, also das MP3 selbst)) reinkommen und all die für iTunes und andere Podcatcher wichtigen Felder richtig ausgefüllt werden.
Über diesen RSS-Feed – den eure Podcatcher da draussen automatisch abfragen, wenn Ihr den Sneakpod abonniert habt – findet euer Computer die neuste Folge immer vollautomatisch und lädt sie herunter.
Abonnieren eines Podcast ist übrigens völlig kostenlos und ohne jede Verpflichtung – nur für den Fall das jemand bei dem Wort Abo sofort an seinen Geldbeutel gedacht hat.
Fertig
Das wars, damit ist es vollbracht. Eine neue Folge Sneakpod, von den Vorüberlegungen, über die Produktion bis hin zur Veröffentlichung. Das war das komplette “behind the scenes”. Für Fragen die in dieser Artikelserie nicht beantwortet wurden stehe ich gern in den Kommentaren oder per E-Mail zur Verfügung. Für Anregungen und sonstige Kommentare natürlich ebenso.
Natürlich würde ich am meisten darüber freuen, wenn Ihr einfach unseren Podcast unter www.sneakpod.de besucht – dort regelmäßig reinhört oder euren bevorzugten Podcatcher auf unseren Feed ansetzt.
In der neuen Folge des Sneakpods besprechen wir die Neuverfilmung des Films Prom Night. Ich hab mich ordentlich drüber aufgereget. Der Film ist eine Art Horrorfilm, aber für Kinder. Nur leider nicht in Deutschland – Prom Night weiterlesen →
The journey begins.. Robert macht sich wieder auf in den unendlichen Weiten des Internets zu publizieren. Dies dürfte die 3. oder vierte Version meiner Webseite unter www.robertkrueger.de sein. Eine Weile lang gab es hier entweder garnichts zu lesen oder die Seite war eine Weiterleitung auf mein Sneakpodcastprojekt. Warum, wieso, weshalb.. weiterlesen →