-
参考文章
- 音视频知识体系大纲
www.0voice.com/uiwebsite/h…
- 流媒体服务器原理和架构解析
zhuanlan.zhihu.com/p/522741415
- 流媒体服务器工作逻辑
juejin.cn/post/718032…
- Node+OBS直播服务器搭建总结
juejin.cn/post/699917…
- 直播协议RTMP、HLS、HTTP、FLV分析讲解,解决抖音直播推流拉流的各种延迟问题
www.bilibili.com/video/BV1bF…
- 音视频知识体系大纲
-
需要支持的环境
-
H5
-
chmore浏览器
-
-
直播过程
-
客户端通知服务端推流(完全由合作公司控制)
-
视频采集
-
视频采集
-
视频处理(筛选算是在这里做的吗)
-
视频编码(线程)
-
-
音频采集
- 音频采集
- 音频处理
- 音频编码(现成)
-
服务端筛选算法(筛选算法是在这里做的吗)
-
服务端推流(线程 协议)
-
-
流媒体服务器处理(中转的意义 开多个进程 合并读和合并写)
-
拉流(协议)
-
音频包队列
-
音频解码
-
PCM帧队列
-
音频播放
-
-
视频包队列
- 视频解码
- 图像帧队列
- 视频播放
-
-
-
卡顿原因(谁缓存就有可能卡顿)
- 消息队列(因为有时间最大值限制,所以有可能卡顿)
- 流媒体服务器(分发 缓存 HLS会分片所以延迟)
- 推流速度
-
直播协议
-
总结
-
H5能用的就是HLS RTMP RTSP HTTP-FLV四种
- HLS 基于HTTP的 支持HTTPS 直接H5支持可以播放 其他协议需要借助插件额外处理 在URL中使用HTTPS协议头(https://)来指定使用HTTPS进行传输 因为切片传输 所以高延迟 低卡顿
HLS采用分段传输 缺点是分段的文件会保存在服务器上(不知道能不能边播放边删除)
- RTSP 需要转成HTTP协议再去播 支持音视频的回放和控制功能 基于TCP 支持HTTPS 在URL中使用HTTPS协议头(rtsp://或rtsps://)低延迟
- RTMP 基于TCP
- HTTP-FLV 基于HTTP
- HLS 基于HTTP的 支持HTTPS 直接H5支持可以播放 其他协议需要借助插件额外处理 在URL中使用HTTPS协议头(https://)来指定使用HTTPS进行传输 因为切片传输 所以高延迟 低卡顿
-
-
细节
-
HLS(H5直接支持 有延迟 但是流畅)
- HLS(HTTP Live Streaming)苹果提出的流媒体播放协议
- 将视频分成 5-10 秒的视频小分片,然后用 m3u8 索引表进行管理
- 由于客户端下载到的视频都是 5-10 秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS 的一般延迟在 10-30s 左右)
- 相比于 FLV,HLS 在 iPhone 和大部分 android 手机浏览器上的支持非常给力
- HLS 协议客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可,而且网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器
- 相比 RTMP 这类长连接协议, 用到互动直播场景延时较高
- HTML5 可以直接打开播放
- 对于视频播放,可以使用 HLS 协议播放直播流,iOS 和 Android 都天然支持这种协议,配置简单,直接使用 video 标签即可
- 广泛兼容,适用于多平台和多设备
-
RTMP
- RTMP(Real Time Messaging Protocol)实时消息传输协议,用来进行实时数据通信
- 一般传输的音频格式是 FLV、F4V,web 上通过 flash 播放器支持,移动端基本不支持
- 主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信
-
RTSP协议
- RTSP(Real Time Streaming Protocol)实时流传输协议
- 用于控制声音或影像多个数据的连接,服务器端可以自行选择使用 TCP 或 UDP 来传送串流内容
- 不特别强调时间同步,所以可能会网络延迟,但是 RTSP 具有重新导向功能,可以根据实际负载情况来切换提供服务的服务器,因此可在一定程度上可避免服务器承载过大而造成的延迟
-
HTTP-FLV 协议
- FLV(Flash Video)是一种流媒体格式
- 直接发起长链接,下载对应的 FLV 文件
- 基于 HTTP 流式 IO 传输 FLV,依赖浏览器支持播放 FLV
- 在手机浏览器上的支持非常有限,但是用作手机端 APP 直播协议却异常合适
-
RTCP 实时传输控制的协议,通常与RTMP一起使用 不适用于浏览器播放
- RTCP(RTCP:RTP Control Protocol)RTP 控制协议
- RTCP 主要功能是为 RTP 所提供的服务质量提供反馈,收集相关媒体连接的统计信息
- RTCP 是 RTP 的配套协议,是和 RTP 一起协作将多媒体数据包打包和发送,定期在多媒体流会话参与者之间传输控制数据
-
RTP协议(基于UDP 延迟低 不适用于浏览器播放)
- RTP(Real-time Transport Protocol)实时传输协议
- 默认基于 UDP 协议传输数据,延迟可以低到毫秒
- 实行有序传送,RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置
- 应用于流媒体相关的通讯和娱乐,包括电话、视频会议、电视和基于网络的一键通业务(类似对讲机的通话)
-
-
-
流媒体服务器
- NODE环境支持
- MediaSoup RTCP 多个协议组合在一起
- MediaSoup是一个开源的WebRTC媒体服务器,专注于提供高性能的流媒体传输和处理能力。它支持多种语言,包括Node.js,提供了灵活的API和丰富的功能,适用于实时通信、视频会议等场景。
- 环境
- 它支持多种语言,包括 Node.js,提供了灵活的 API 和丰富的功能,使 Node.js 应用能够与 MediaSoup 进行集成。
- 热度
- 可扩展性
- 发布时间 2017年
- Node-Media-Server
- Node-Media-Server是一个基于Node.js的流媒体服务器,支持RTMP、HLS和HTTP-FLV等流媒体协议。它易于使用,具有良好的可扩展性和灵活性,适用于实时直播、视频点播等场景。
- 环境 NOde
- 热度
- 可扩展性
- 发布时间 2015年
- MediaSoup RTCP 多个协议组合在一起
- NODE环境支持