Beste allemaal,
Als eerste een korte introductie wat ik wil bereiken. Deze tweaker is binnenkort jarig en geeft een feestje. En net als veel andere tweakers heb ik een heleboel hardware liggen die ik niet gebruik (aantal PC's een 37" LCD etc). Dus wat was mijn idee? Ik zet op meerdere plekken computers neer die tegelijk muziekclips afspelen. Het meest voor de hand liggende optie is een stream, zeg maar een soort TV-uitzending die je kan afspelen op de verschillende computers. Het beeld zou dan in principe overal nagenoeg gelijk moeten lopen. Ik ben daarbij op VLC player uitgekomen als streaming server. Het is open source en heeft gigantisch veel opties. Helaas blijkt niet alles even duidelijk gedocumenteerd te zijn en loop ik tegen wat dingen aan.
Laat ik beginnen met dat ik behoorlijk ver gekomen ben, maar ik mis de 'finishing touch' om het zo te zeggen. Via de interface van VLC player kan je eigenlijk maar één film tegelijk streamen. Als de film afgelopen is, dan stopt de stream. Ook al kan je als source van de stream meerdere bestanden of een playlist selecteren, uiteindelijk wordt er maar één file afgespeeld. Dat is niet wat ik wil, ik wil immers een hele lijst met clips hebben op random kunnen streamen.
VLC kan je gelukkig ook opstarten met command parameters en dan heb je ineens een stuk meer opties. Ik ben tot het volgende gekomen (bat file die ik gebruik om VLC te starten):
Wat dit doet, is alle bestanden in s:\music\clips in een playlist zetten op random en loop en een transcode stream (MP2) starten op http://<computer>:8080/stream. Dit werkt in principe goed. Echter, de stream wordt afgebroken na elk nummer, terwijl '--sout-keep' dit zou moeten voorkomen. VLC aan de ontvangende kant stopt met afspelen aan het einde van het nummer. Als je meteen daarna weer connect is er al een stream met het volgende nummer beschikbaar. Er wordt blijkbaar per nummer een nieuwe stream gestart. Ik encode alles, omdat je niet gedurende een stream kan switchen van resolutie, bitrate en file type. Dit zou een consistente stream moeten opleveren die met --sout-keep open zou moeten blijven. Dat helpt dus ook niet.
Zoals je ziet heb ik voor een http-stream gekozen, terwijl ik denk dat het niet de beste stream is die je kan gebruiken. Volgens mij is een rtsp-stream bijvoorbeeld al beter. Echter, bij een HTTP stream kan je in VLC aan de ontvangende kant instellen dat er gereconnect moet worden bij het verlies van de HTTP stream. Dit werkt ook prima op zich, want je ziet eigenlijk niet dat er opnieuw geconnect wordt aan het einde van een nummer en aan het begin van een nummer. Op deze manier krijg je een consistente ervaring waarbij het volgende nummer begint met spelen zodra de vorige stopt zonder dat je eerst terug springt naar het bureaublad.
So far so good? Nou nee, het probleem is dat er elke keer opnieuw verbinding gemaakt moet worden (reconnecten) en dat je daardoor afwisselende synchronisaties krijgt tussen de verschillende PC's. Het doel is om de PC's nagenoeg gelijk te laten lopen en dat wisselt nogal als ze telkens moeten reconnecten. Ik heb gehad dat ze soms meer dan een seconde asynchroon lopen.
Wat wil ik nou bereiken? Nou in eerste instantie dat er op meerdere computers een video synchroon afgespeeld wordt. Dat doel is bijna bereikt. Als ik het voor elkaar krijg om de stream open te laten, dan denk ik dat als de computers eenmaal synchroon lopen, dat ze dat ook zullen blijven doen. Mocht iemand nog hele andere ideeen hebben (zonder VLC), dan hoor ik het natuurlijk graag.
Alvast bedankt!
PS, met de '--random' optie wordt de playlist ECHT random afgespeeld. Met 'ECHT random' bedoel ik dat het mogelijk is dat sommige nummers vaker afgespeeld kunnen worden dan anderen. Is er ook een soort pseudo-random, waarbij alle nummers even vaak in willekeurige volgorde afgespeeld worden?
Als eerste een korte introductie wat ik wil bereiken. Deze tweaker is binnenkort jarig en geeft een feestje. En net als veel andere tweakers heb ik een heleboel hardware liggen die ik niet gebruik (aantal PC's een 37" LCD etc). Dus wat was mijn idee? Ik zet op meerdere plekken computers neer die tegelijk muziekclips afspelen. Het meest voor de hand liggende optie is een stream, zeg maar een soort TV-uitzending die je kan afspelen op de verschillende computers. Het beeld zou dan in principe overal nagenoeg gelijk moeten lopen. Ik ben daarbij op VLC player uitgekomen als streaming server. Het is open source en heeft gigantisch veel opties. Helaas blijkt niet alles even duidelijk gedocumenteerd te zijn en loop ik tegen wat dingen aan.
Laat ik beginnen met dat ik behoorlijk ver gekomen ben, maar ik mis de 'finishing touch' om het zo te zeggen. Via de interface van VLC player kan je eigenlijk maar één film tegelijk streamen. Als de film afgelopen is, dan stopt de stream. Ook al kan je als source van de stream meerdere bestanden of een playlist selecteren, uiteindelijk wordt er maar één file afgespeeld. Dat is niet wat ik wil, ik wil immers een hele lijst met clips hebben op random kunnen streamen.
VLC kan je gelukkig ook opstarten met command parameters en dan heb je ineens een stuk meer opties. Ik ben tot het volgende gekomen (bat file die ik gebruik om VLC te starten):
code:
1
2
3
| c:
cd\Program Files (x86)\VideoLAN\VLC
vlc "file:///s:/music/clips/" --random --loop --ttl="5" --sout="#transcode{vcodec=mp2v,vb=1200,scale=1,acodec=mpga,ab=512,channels=2,samplerate=44100}:http{mux=ts,dst=:8080/stream}" --sout-keep |
Wat dit doet, is alle bestanden in s:\music\clips in een playlist zetten op random en loop en een transcode stream (MP2) starten op http://<computer>:8080/stream. Dit werkt in principe goed. Echter, de stream wordt afgebroken na elk nummer, terwijl '--sout-keep' dit zou moeten voorkomen. VLC aan de ontvangende kant stopt met afspelen aan het einde van het nummer. Als je meteen daarna weer connect is er al een stream met het volgende nummer beschikbaar. Er wordt blijkbaar per nummer een nieuwe stream gestart. Ik encode alles, omdat je niet gedurende een stream kan switchen van resolutie, bitrate en file type. Dit zou een consistente stream moeten opleveren die met --sout-keep open zou moeten blijven. Dat helpt dus ook niet.
Zoals je ziet heb ik voor een http-stream gekozen, terwijl ik denk dat het niet de beste stream is die je kan gebruiken. Volgens mij is een rtsp-stream bijvoorbeeld al beter. Echter, bij een HTTP stream kan je in VLC aan de ontvangende kant instellen dat er gereconnect moet worden bij het verlies van de HTTP stream. Dit werkt ook prima op zich, want je ziet eigenlijk niet dat er opnieuw geconnect wordt aan het einde van een nummer en aan het begin van een nummer. Op deze manier krijg je een consistente ervaring waarbij het volgende nummer begint met spelen zodra de vorige stopt zonder dat je eerst terug springt naar het bureaublad.
So far so good? Nou nee, het probleem is dat er elke keer opnieuw verbinding gemaakt moet worden (reconnecten) en dat je daardoor afwisselende synchronisaties krijgt tussen de verschillende PC's. Het doel is om de PC's nagenoeg gelijk te laten lopen en dat wisselt nogal als ze telkens moeten reconnecten. Ik heb gehad dat ze soms meer dan een seconde asynchroon lopen.
Wat wil ik nou bereiken? Nou in eerste instantie dat er op meerdere computers een video synchroon afgespeeld wordt. Dat doel is bijna bereikt. Als ik het voor elkaar krijg om de stream open te laten, dan denk ik dat als de computers eenmaal synchroon lopen, dat ze dat ook zullen blijven doen. Mocht iemand nog hele andere ideeen hebben (zonder VLC), dan hoor ik het natuurlijk graag.
Alvast bedankt!
PS, met de '--random' optie wordt de playlist ECHT random afgespeeld. Met 'ECHT random' bedoel ik dat het mogelijk is dat sommige nummers vaker afgespeeld kunnen worden dan anderen. Is er ook een soort pseudo-random, waarbij alle nummers even vaak in willekeurige volgorde afgespeeld worden?
AMD Ryzen 7 5800X3D | Gigabyte X570 Aorus ELITE | 32GB Corsair vengence 3200 | MSI RTX3080 Gaming Z | 2 x WD Black SN850X 2TB, Samsung 850 EVO 1TB | NZXT H7 Flow | Be quiet! Dark Rock Pro 4 | Corsair RM850x | Meta Quest 3