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

257 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第10天

探索多媒体直播技术

视频的基本元素

  • 比特率/码率:单位时间内传送bit的数目,单位为bps,也称码流

    • 越高的比特率,需要越高的带宽来支撑,否则会带来卡顿、成本等问题
    • 太低的比特率,会导致视频画面过度压缩,模糊不清
  • FFmpeg Tools

    • ffmpeg:视频处理工具
    • ffpaly:视频播放工具
    • ffprobe:视频分析工具
  • 帧:视频里的每一个画面

  • 帧率(FPS):每秒的帧数

  • 轨道/流:一个视频封装里面可以放多个音频轨道,视频流、音频流数据相互交错排列,形成混流

    • 交错排列:一个位置的音视频数据相隔太远会导致卡顿、音画不同步



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

  • 颜色空间:YUV,就是另一种颜色数字化表达方式,RGB信号不利于压缩,视频储存中,将更多的带宽留给亮度信息(黑白信号),将少量的带宽留给色度(彩色信号) 微信图片_20220805161212.png

  • 帧内压缩(空间压缩):将像素用旁边相似的像素代替

  • 帧间压缩(时间压缩):画面内静止的区域不记录,只记录画面变化的部分

  • 帧的编码类型:

    • I-frame:帧内帧
    • P-frame:前向预测帧 微信图片_20220805161215.png
    • B-frame:b帧可以参考和插入再他之前和之后发生的两个帧,即可降低帧数大小,同时保存视频质量 微信图片_20220805161219.png

微信图片_20220805161225.png

  • GOP(Group of Pictures)

    • 视频点播:节省带宽,高压缩率,会使用B帧
    • 直播:低延迟,不使用B帧
    • 视频编辑:提高响应,个别会使用全I帧 微信图片_20220805161227.png
  • 视频编码格式(压缩比越高的编码算法需要越高的算力来支撑)

    • H264:AVC 广泛普及
    • H265:HEVC 逐渐普及
    • H266:VVC 未普及
  • 视频封装(视频格式):将编码压缩好的视频轨道和音频轨道按照一定格式放到一个文件中,也叫视频容器

    • MP4:按照一定规则将音视频数据结构化的放到一个文件中
    • FLV:由文件头和很多tag组成,tag由音频流、视频流、脚本流组成



直播推拉流协议

  • CDN(Content Delivery Network)

    • 由很多个节点一级一级分发,通过ip地址找到最近的CDN节点,减少起播的耗时 微信图片_20220805171736.jpg
  • 专业名词

    • 点播:视频播放
    • 直播看播:观众观看直播
    • 推流:主播将数据发送到CDN网络
    • 拉流:观众从CDN拉取直播数据
  • 推拉流协议方案

    • 推流协议:RTMP(实时消息协议)
      • 优势:基于tcp协议,不用考虑丢包;技术成熟,ffmpeg项目中由RTMP库;低延迟
      • 劣势:以停止更新;不支持H265;使用1935端口,可能被防火墙拦截;苹果不支持
    • 拉流协议:
      • HTTP-FLV
        • 优势:协议友好,格式简单,便于分发;不准啊吗情况下就可以直接转发,延迟低
      • HLS(HTTP Live Streaming)
        • 苹果自己的协议
        • 原理:把整个流分成一个个小的基于HTTP文件来下载,每次只下载一些
        • 视频封装格式:m3u8 / ts

    微信图片_20220805171731.png

  • 开播过程

    1. 图像采集(摄像头、录屏、图像采集卡)
    2. 图像处理(看需处理)
    3. 编码 + 封装
    4. 推流
  • 看播过程

    1. 拉流(HLS、HTTP-FLV)
    2. 解封装+解码(硬件解码、软件解码)
    3. 图像处理(看需处理)
    4. 渲染(OpenGL、VULKAN、Native window)
  • 音画同步

    1. 解码视频音频后放入内存
    2. 播放时将视频帧向音频对齐