美文网首页音视频学习从零到整
音视频学习从零到整--(10)视频解码思路

音视频学习从零到整--(10)视频解码思路

作者: iOS猿_员 | 来源:发表于2019-03-13 21:59 被阅读50次

    音视频学习从零到整--(1)
    音视频学习从零到整--(2)
    音视频学习从零到整--(3)
    音视频学习从零到整--(4)
    音视频学习从零到整--(5)
    音视频学习从零到整--(6)
    音视频学习从零到整--(7)
    音视频学习从零到整--(8)
    音视频学习从零到整--(9)

    音视频编解码处理流程,这个问题经常是面试官抛砖引玉的问题.他们渴望能从这个流程中看到你的宏观思考和微观技术处理.

    • 采集
    • 编码
    • 解码
    • 渲染

    一.解码的思路:

    1. 解析数据(NALU Unit) I/P/B...
    2. 初始化解码器
    3. 将解析后的H264 NALU Unit 输入解码器
    4. 解码完成回调,输出解码数据
    5. 解码数据显示(OpenGL ES)

    二.解码三个核心函数:

    1. 创建session, VTDecompressionSessionCreate
    2. 解码一个frame, VTDecompressionSessionDecodeFrame
    3. 销毁解码session,VTDecompressionSessionInvalidate

    三.原理分析:

    • H264原始码流-->NALU.
      • I帧: 保留了一张完整视频帧. 解码关键!
      • P帧: 先前参考帧.差异数据.解码需要依赖于I帧
      • B帧: 双向参考帧,解码时既需要I帧,也需要P帧!

    如果H264码流中I帧错误/丢失,就会导致错误传递,P/B帧单独是完成不了解码工作! 花屏的现象产生. VideoToolBox硬编码编码H264帧.I帧! 手动加入SPS/PPS. 解码时: 需要使用SPS/PPS数据来对解码器进行初始化!

    四. 解码思路:

    1. 解析数据

    既然NALU,一个接一个.实时解码! 首先,你要对数据解析! 分析NALU数据.前面4个字节是起始位!标识一个NALU的开始! 从第5位才开始来获取!从第五位才是NALU数据类型.

    要获取到第5位数据,转化十进制,然后根据表格判断它数据类型!

    判断好数据类型,才能将NALU送入解码器.SPS/PPS获取就可以,是不需求解码的!

    CVPixelBufferRef 保存是解码后的数据或者未编码前的数据

    1. 解码数据
    2. 解码成功后将数据通过OpenGL ES渲染到屏幕上!

    推荐文集

    * 抖音效果实现

    * BAT—最新iOS面试题总结

    * iOS面试题大全(附答案)

    原文作者:集才华美貌于一身的—C姐

    相关文章

      网友评论

        本文标题:音视频学习从零到整--(10)视频解码思路

        本文链接:https://www.haomeiwen.com/subject/wqpxmqtx.html