没搞过这块,但之前稍微有些接触相关的工具和技术栈,也简单写写吧。直播本身还是很多坑,不仅仅是一个 Web 服务器可以满足的,而是一整套的解决方案,可能跨越多种编程语言和技术栈。楼主单纯说 HTTP 感觉更像是普通的 Web 视频播放场景。
一般普通的 Web 视频的话,最简单的情况,其实只要服务端返回浏览器 video 元素支持的媒体格式(一般是用 mp4 封装)就可以,在加载方面主要考虑 HTTP 的 206 状态返回的支持:
然后还需要注意视频数据应该把元数据 (moov) 放在文件流的前面,这样浏览器才能在不完全下载文件的情况下流畅播放视频和切换进度。
视频格式方面主要是需要区分封装容器和具体的音视频数据,封装容器类似(mp4、mov、flv)封装了音频与视频。具体的音视频数据则是各种编码(视频编码:MPEG-2、H.264、H.265、VP8、VP9 之类的,音频编码:wav、mp3、aac、wma 等等等等)。然后就可以根据浏览器的兼容性选择你需要的格式,可以参考这个 Media formats supported by the HTML audio and video elements - MDN。
直播的场景本质也是视频播放,只是需要更多考虑推流和转发到解码的所有阶段,比较常用的是用 OBS 通过 rtmp 的方式推流,服务端主要做流转发的工作,浏览器端用支持 flv 格式的播放器来播放流。rtmp 本身是 flash 搞的东西,浏览器原生不支持,需要引入第三方的组件(Flash、flv.js)来把 flv 数据的视频解封出来用 MSE 喂给 video 来播放。这种延迟可以控制在数秒内。
还有一种方式是 HLS,通过 m3u8 播放列表 + ts 分片的方式实现直播流的传输,这种大概有10~30s的延迟,兼容性方面只有 iOS 原生支持,其他平台还是类似上面说的生成数据喂 video 的方案;这里的服务端侧需要做的是一些根据输入的视频流切片输出生成分片的操作。
对于时延要求更高的还有利用 WebRTC 来实现的方案,类似 快直播-基于WebRTC升级的低延时直播 - 腾讯云
相关的概念可以参考这篇:5G时代来临,前端开发工程师必须了解的音视频入门基础知识(基本概念、播放流程、封装格式、编解码、传输协议)
然后我们可以发现,这里的复杂不是一人之力可以 hold 住的,每一个环节与细分领域都可能需要付出数个月乃至数年的时间精力去研究。个人建议是楼主可以试着收集相关资料,整个领域目前涉及到的技术架构体系梳理清楚,考虑到个人可以付出的工作量的因素,找一些力所能及的环节尝试实现一波。整个技术栈实现上基本上都是开源的(除了苹果的 HLS),折腾的过程应该也会很有意思~ 也期待分享其中的探索发现~