Πληροφορίες & Άδεια Αυτό το εγχειρίδιο δημιουργήθηκε από τον πάροχο streaming dos.gr και διατίθεται ελεύθερα υπό την άδεια Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) . Μπορείτε να το αντιγράψετε, να το τροποποιήσετε και να το αναδημοσιεύσετε, με την προϋπόθεση ότι θα αναφέρετε την αρχική πηγή ( dos.gr ) και να διατηρείτε την ίδια άδεια. ### → Ποιοι είμαστε Το dos.gr είναι ο πρώτος πάροχος παγκοσμίως που υλοποίησε δημόσια εκπομπή βίντεο σε 1080p WebM/VP9 μέσω Icecast server, όπως αποδεικνύεται από τις καταγραφές στο Internet Archive: Ιούνιος 2017: Κατάλογος Icecast WebM Ιούνιος 2017: Ζωντανή εκπομπή dos.gr Η ομάδα μας δραστηριοποιείται από το 1996, με εξειδίκευση σε: Live streaming: RTMP, HLS, Icecast, WebRTC, SRT Μορφές αρχείων: MP4, M3U8, WebM, FLV Εργαλεία: VDO Panel, Wowza, OBS, FFmpeg, Nginx, Red5 Υλοποίηση ABR, χρήση CDN, χαμηλή καθυστέρηση Βελτιστοποίηση kernel/sysctl/firewall/caching → Υπηρεσίες Παρέχουμε τεχνική υποστήριξη και εγκατάσταση για: RTMP / HLS / Icecast streaming VDO Panel, Wowza, OBS, FFmpeg Προσαρμοσμένα panels και custom server εφαρμογές Server optimization (BIOS, thermal, kernel-level) Τεχνική υποστήριξη σε Ελλάδα και εξ αποστάσεως (SSH, AnyDesk) Ιστότοπος: dos.gr Email: webm@dos.gr → Ευχαριστούμε για το ενδιαφέρον σας Σας ευχαριστούμε που διαβάζετε αυτό το εγχειρίδιο. Ελπίζουμε να σας φανεί χρήσιμο στην προσπάθειά σας να μεταδώσετε περιεχόμενο με τρόπο ανοικτό, οικονομικό και αποδοτικό → Θα χαιρόμασταν ιδιαίτερα αν επισκεφθείτε τον ιστότοπό μας και εξερευνήσετε τις υπηρεσίες μας. → Ποιος μπορεί να το χρησιμοποιήσει & γιατί Απευθύνεται σε: Ραδιοφωνικούς σταθμούς που θέλουν να δείξουν studio cams – Web TVs, μικρούς broadcasters – Online διδασκαλίες, webinars – Κάμερες παρακολούθησης / science cams – Όποιον έχει μια ιδέα χωρίς budget → Γιατί WebM + Icecast; Χωρίς άδειες/royalties (σε αντίθεση με Wowza, Flussonic, κ.λπ.) Υποστήριξη από όλους τους σύγχρονους browsers Ελάχιστες απαιτήσεις σε πόρους Εξαιρετική ποιότητα εικόνας με χαμηλό bitrate 100% HTML5 – χωρίς Flash ή plugin → Περίληψη εγχειριδίου Αυτό το manual αφορά προγραμματισμένη εκπομπή αποθηκευμένων αρχείων βίντεο (όχι live) μέσω Icecast v2. Σε επόμενο εγχειρίδιο θα περιγράψουμε και τη ζωντανή μετάδοση (live streaming). → Προαπαιτούμενα Θα χρειαστείτε: Icecast v2.4.4 (Centova Cast σε Linux) FFmpeg (7.1.1 σε Linux για μετατροπή) FFmpeg static (6.1.1 σε Windows για εκπομπή) Ο Icecast μπορεί να είναι τοπικός, σε VPS, ή σε πάροχο, με ή χωρίς panel (π.χ. Centova Cast). Η εκπομπή στη δική μας περίπτωση γίνεται από Windows για πρακτικούς λόγους. → Πλεονεκτήματα & Μειονεκτήματα Μετατροπή γίνεται 1 φορά, εξαιρετική ποιότητα με μικρό μέγεθος 0% CPU κατά την εκπομπή – δεν υπάρχει real-time transcoding Σταθερότητα, ιδανικό για low-resource συστήματα Χρόνος μετατροπής υψηλός (π.χ. 20 ώρες για 1 ώρα video με i9-9900K) VP9 δεν χρησιμοποιεί πλήρως τα threads Υπάρχουν ρυθμίσεις που επιταχύνουν (-row-mt, -tile-columns, -cpu-used) Αλλά η ποιότητα πέφτει ελαφρώς → Ρυθμίσεις server Icecast Για να μπορέσει να γίνει η εκπομπή WebM/VP9 μέσω Icecast v2, απαιτείται η κατάλληλη παραμετροποίηση του αρχείου icecast.xml Παρακάτω παρέχουμε έτοιμο αρχείο ρυθμίσεων που χρησιμοποιείται στην παραγωγική υλοποίηση του webm.win, σε Icecast v2 server (Centova Cast): Λήψη αρχείου icewebm.txt < Το αρχείο περιέχει πλήρη ρύθμιση για: SSL streaming (HTTPS) video/webm mountpoint (/dos.webm) Directory listings για Xiph και άλλους καταλόγους Κατάλληλες ρυθμίσεις burst-size, queue, timeouts, logging κ.ά. Μπορείτε να προσαρμόσετε το αρχείο ανάλογα με τις δικές σας ανάγκες. Η συγκεκριμένη υλοποίηση είναι πλήρως λειτουργική και δοκιμασμένη σε πραγματικές συνθήκες παραγωγής. → Ρυθμίσεις Icecast από το Centova Cast panel Παρακάτω φαίνεται η διαμόρφωση βασικών παραμέτρων μέσω του Centova Cast panel, όπως: Queue size: 12800000 Burst size: 2560000 Timeout τιμές για Source/Client Οι συγκεκριμένες τιμές αντιστοιχούν ακριβώς στο icecast.xml που χρησιμοποιείται στην παραγωγική υλοποίηση στο webm.win Συνημμένο αρχείο: → Ρυθμίσεις ‘Limits’ Η παρακάτω εικόνα δείχνει βασικές παραμέτρους περιορισμών, όπως: Μέγιστο Bitrate (9000 Kbps) (έχει τεθεί υψηλά για να μην κάνει αυτόματο stop το Centova σε αυτό το stream—και λιγότερο δεν έχει σημασία, αρκεί να μην είναι μικρότερο από το bitrate του βίντεο που θα εκπέμψετε) Μέγιστος αριθμός ακροατών Disk quota & mount point limit Συνημμένο αρχείο: → Ρυθμίσεις ‘Mount Point’ Ρυθμίσεις για το mount point /dos.webm στο Icecast, όπως: MIME type: video/webm Advertised bitrate: 2000 kbps Stream name & περιγραφή Stream URL: rdst.win:59000/dos.webm Συνημμένο αρχείο: → Μετατροπή αρχείων σε WebM/VP9 Για τη μετατροπή των αρχείων μας σε WebM/VP9, επιλέξαμε τη μέθοδο διπλού περάσματος (2-pass encoding) με ffmpeg, καθώς μετά από δοκιμές διαπιστώσαμε ότι με αυτόν τον τρόπο πετυχαίναμε τη μέγιστη δυνατή ποιότητα εικόνας σε σχέση με το μέγεθος αρχείου. Τα αρχικά αρχεία βίντεο ήταν σε ανάλυση 4K, και μετατράπηκαν σε 1920×1080 με σταθερό framerate 30fps. Όλα τα βίντεο μετατράπηκαν με την ίδια ακριβώς εντολή, ώστε να διασφαλιστεί πλήρης ομοιομορφία κατά την εκπομπή και την παρακολούθηση από διαφορετικούς browsers και συσκευές. Επιλέξαμε επίσης bitrate ήχου στα 192 kbps, καθώς προσφέρει εξαιρετική ποιότητα χωρίς υπερβολικό μέγεθος. → Παράδειγμα εντολής μετατροπής (2-pass VP9 WebM) ffmpeg -y -i carlcox.mp4 -vf "scale=1920:1080,fps=30" -c:v libvpx-vp9 -b:v 2000k -g 15 -deadline good -cpu-used 0 -threads 16 -pass 1 -an -f webm -passlogfile ./ffmpeg2pass temp_pass1_output.webm ffmpeg -y -i carlcox.mp4 -vf "scale=1920:1080,fps=30" -c:v libvpx-vp9 -b:v 2000k -g 15 -deadline good -cpu-used 0 -threads 16 -pass 2 -c:a libvorbis -b:a 192k -ar 44100 output_1080p_best_quality_2000k.webm → Επεξήγηση βασικών παραμέτρων Παράμετρος Περιγραφή -i carlcox.mp4 Το αρχικό αρχείο εισόδου (MP4) -vf "scale=1920:1080,fps=30" Ορισμός ανάλυσης εξόδου και ρυθμός καρέ -c:v libvpx-vp9 Video codec VP9 -b:v 2000k Bitrate video 2000 kbps -g 15 Απόσταση μεταξύ keyframes (GOP)—ιδανικό για σταθερό seeking -deadline good Ισορροπία μεταξύ ποιότητας και ταχύτητας -cpu-used 0 Μέγιστη ποιότητα (πιο αργή κωδικοποίηση) -threads 16 Χρήση 16 CPU threads -pass 1 / -pass 2 Πρώτο και δεύτερο πέρασμα για βελτιστοποιημένη ποιότητα -an Απενεργοποίηση ήχου στο πρώτο πέρασμα (δεν χρειάζεται) -c:a libvorbis Vorbis codec ήχου -b:a 192k Bitrate ήχου 192 kbps -ar 44100 Συχνότητα ήχου 44.1kHz -f webm Format εξόδου WebM -passlogfile Αρχείο καταγραφής pass → Δημιουργία Playlist και Προγραμματισμένη Εκπομπή Η εκπομπή των βίντεο WebM γίνεται μέσω Windows, χρησιμοποιώντας ένα αρχείο λίστας (input.txt) και την παρακάτω εντολή: -re -f concat -safe 0 -i C:/Users/lyk/Desktop/ffmpegyag/videos/1080p/30fps/input.txt -c copy -f webm -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm icecast://source:topassmou123@rdst.win:9000/dos.webm Το αρχείο input.txt περιέχει τις διαδρομές όλων των .webm αρχείων. Παράδειγμα: Συνημμένο αρχείο: Για μεγαλύτερη ευκολία, η εκπομπή τρέχει ως Windows service μέσω FireDaemon, για αυτόματη εκκίνηση, επανεκκίνηση σε σφάλμα και λειτουργία στο παρασκήνιο: Συνημμένο αρχείο: Με αυτόν τον τρόπο, η CPU κατά τη διάρκεια της εκπομπής παραμένει στο 0%—η κωδικοποίηση έχει ήδη γίνει. Η ίδια διαδικασία μπορεί να εφαρμοστεί και σε Linux με cron ή systemd. Σχόλιο: Θα ήταν χρήσιμο αν το Centova Cast υποστήριζε ενσωματωμένα .webm playlists και ffmpeg concat. → Τελικές σημειώσεις Αυτό το εγχειρίδιο καλύπτει βήμα-βήμα όλα τα στάδια: μετατροπή, config, και εκπομπή. Από εδώ και πέρα… πειραματιστείτε ελεύθερα! Για επαγγελματική υποστήριξη: dos.gr | webm@dos.gr