前言
因为工作需要, 我开始接触流媒体
准备工作
其实一开始, 我对直播这块是不了解的;
首先, 说说流媒体是怎么运作的吧
流媒体其实像一个管道, 举例斗鱼的直播场景:
主播开启摄像头, 摄像头采集数据, 并将这些数据实时发送到斗鱼服务器 (推流)
然后, 大量观众们打开网址, 浏览器中的播放器与斗鱼服务器也进行实时的通信, 播放器读取数据展示在浏览器中 (拉流)
流程是如此, 但是实现的协议有好几种:
- rtmp (延迟低, 兼容性不太好)
- rtmp+websocket (rtmp的http实现方案, 个人认为有些复杂, 不适合我现在的场景)
- hls (延迟较高, 苹果提出的基于 HTTP 的流媒体传输协议, 视频封装格式为ts, 但我观察b站对游戏竞赛场景(dota表演赛, 高并发场景)下使用的也是hls的方式, 待观察)
- http-flv ((延迟低, 支持http,https播放)
- webrtc (基于RTP/RTCP, 实时性好兼容性好, 能做到全平台兼容, 但似乎说如今还不完善, 待继续深入了解)
- srs (流媒体服务器, 其定位是运营级的互联网直播服务器集群, 我打算将其部署到Linux平台中)
总而言之, 结合场景来选择方案吧
开发环境下, 我选择的是 OBS
进行推流 和 VLC
进行播放
不同的播放器拉流效果也是不一样的, VLC播放器好用但是延迟还是稍高些
我选择的方案是 http-flv + flv.js, 这样一来, 便可以无需Flash插件, 在浏览器进行 Html5 播放了
现如今了解的还只是皮毛,所以文章太过琐碎, 存在不少问题, 本文会持续更新的
- 网络
- TCP
- UDP
- 客户端
- 缓冲
- 累积延迟与跳帧(seek)处理
- wasm
- 服务端
- GOP
- ffmpeg推流优化
- 多进程