Для стриминга думаю можно реализовать так:
Для передачи видео стрима - webRTC. Сервер принимает сигнал и раздает, + локально записывает видео, пока длится стрим. Как трансляция закончилась, видео ковертится в несколько вариантов качества и будет доступно для просмотра