前端处理实时监控直播协议和流媒体服务器的调研记录

274 阅读5分钟
  • 参考文章

  • 需要支持的环境

    • 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(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年