探索多媒体直播技术|青训营笔记

140 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第5天 主要为思维导图大纲,收集课堂要点和一些补充知识 欢迎补充&指正

探索多媒体直播技术

1.视频的基本元素

1.视频基本要素

  • 1.像素点

    • 不同颜色的小点矩阵
  • 2.RGB(三原色)

    • 红、蓝、绿强度0~255
  • 3.分辨率

    • 纵横方向的像素数量

      • 例如1080p
  • 4.码率/比特率

    • 单位时间内传送bit的数目,单位bps
    • 高比特率需要高带宽,比特率太低则过度压缩,模糊不清
    • 转码指令:ffmpeg -i input.mp4 -b:v xx output.mp4
  • 5.帧/帧率

    • 视频、动画中的每一张画面
    • 帧率/刷新率:每秒传输帧数
    • 卡顿、屏幕闪烁
  • 6.视频数据封装

    • 编码压缩好的视频轨与音频轨按照一定格式放入视频容器,交错摆放(为了音画同步,实现边下载边播放)
    • 利用时间戳实现同步
  • 7.视频轨道/流

    • audio/video/subtitles(字幕)
  • 8.YUV:颜色空间

    • 带宽分给亮度Luma(黑白信号)、色度Chroma(彩色信号)
    • 人眼对亮度更敏感
    • YUV更易于RGB压缩

2.视频压缩

  • 引入:GIF压缩成MP4

  • 压缩:利用视频画面相关性减少数据量

    • 1.帧内压缩/空间压缩

      • 同一帧画面,划分小方格,相同方格直接引用同一个
    • 2.帧间压缩/时间压缩

      • 保留两帧相关性,即冗余信息,叠加新增差值
    • 3.帧的编码类型

      • 1.帧内帧:只依赖自己,可独立完成编码
      • 2.前项预测帧:依赖前一帧画面(压缩比较高)
      • 3.B帧(双向预测帧):解码参考某帧的前帧和后帧,再解码该帧
    • 4.GOP(group of picture)

      • I帧为GOP的基础帧(第一帧)

      • 场景设置

        • 视频点播:节省带宽,高压缩率,会使用 B 帧
        • 直播:低延迟,不使用 B 帧
        • 视频编辑:提高响应,个别会使用全 I 帧
    • 5.视频编码格式 H264 VS H265

      • H265 压缩比更高,需要更多的算力
      • H264 : AVC 更普及
      • H265 : HEVC 更小体积
      • google:vp9
      • 网飞:AV1

3.直播推拉流协议

  • 1.封装格式:MP4(表格)

    • Moov:Movie Box,存储 mp4 的 metadata,一般位于mp4文件的开头。
    • mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间、文件时长等
    • trak:Track Box,一个mp4可以包含一个或多个轨道(比如视频轨道、音频轨道)
    • Stbl:Sample Table Box包含了这些媒体数据的索引以及时间信息
  • 2.封装格式:FLV(链式)

    • FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。
    • tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)
  • 3.CDN:Content Delivery Network

    • 建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。
    • 边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储、计算、网络等资源,将部分关键业务应用下沉到接入网络边缘,以减少网络传输和多级转发带来的宽度和时延损耗
  • 4.推拉流协议方案

    • RTMP : Real-Time Messaging Protocol实时消息协议

      • 优势:

        • •基于 tcp 协议
        • •技术成熟,Ffmpeg 项目中有 rtmp 库
        • •低延迟
      • 劣势

        • •停止更新
        • •规范上没有支持 H265
        • •使用 1935 端口,会被防火墙阻碍
    • HTTP-FLV:HTTP + FLV

      • 协议友好,格式简单,便于分发
    • HLS : HTTP Live Streaming(APPLE)

      • 把整个流分成一个个小的基于HTTP的文件 来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的 资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
      • HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
  • 5.推拉流

    • 推流端

      • 图像采集->图像处理->编码+封装->推流
      • 采集方式:摄像头、屏幕、图像采集卡等
      • 图像处理的场景:美颜、绿幕、头饰
    • 拉流端

      • 拉流->封装码+解码(RGB)->图像处理->渲染

视频工具

ffmpeg-视频处理工具

ffplay-视频播放工具

ffprobe-视频分析工具

名词解释

点播:视频播放

推流:主播将数据发送到CDN网络(HTTP-FLV)主播之间互动(WebRTC:低延迟)

拉流:观众从CDN拉取直播数据(MP4)

M3u8 一级请求返回

相对地址

自适应码率 根据不同的带宽决定使用合适的源