We are doing our online radio with icecast2 as our streaming media server/backend and plyr for the frontend player. Plyr is loaded on a xenforo custom page/page node via php callback. The player changes the background image depending on which radio show is running.
We also sometimes do video streams during special events. Video player gets loaded automatically below the audio player, when it detects that video stream is running.
People can then choose themselves whether to listen audio only or watch the video feed.
Video feed is done with nginx / rtmp-module as a hls stream.