音视频基础能力之 iOS 视频篇(三):视频硬件解码

涉及硬件的音视频能力,比如采集、渲染、硬件编码、硬件解码,通常是与客户端操作系统强相关的,就算是跨平台的多媒体框架也必须使用平台原生语言的模块来支持这些功能

本系列文章将详细讲述移动端音视频的采集、渲染、硬件编码、硬件解码这些涉及硬件的能力该如何实现

本文为该系列文章的第 3 篇,将详细讲述在 iOS 平台下如何实现视频的硬件解码
往期精彩内容,可参考
音视频基础能力之 iOS 视频篇(一):视频采集
音视频基础能力之 iOS 视频篇(二):视频硬件编码

前言

视频解码是视频编码的逆过程,就是将压缩后的图像数据还原成原始未压缩的图像数据,可用于图像处理或渲染到屏幕。有关原始图像数据渲染到屏幕的内容,本系列后续文章中会详细介绍,敬请期待

在 iOS 平台,Apple 提供的硬件解码功能,目前仅支持 H.264 和 H.265,本文也将介绍这 2 种格式的硬件解码该如何实现。在阅读本文之前,建议预先了解下 H.264 和 H.265 的码流结构这些原理性的内容,方便后续更好的理解本文内容

整体流程

本文所介绍的解码流程,如下图所示

在这里插入图片描述
数据变化的流程,如下图所示
在这里插入图片描述

系统框架

用到了 VideoToolbox,引入头文件

#import <VideoToolbox/VideoToolbox.h>

关键类型

VTDecompressionSessionRef
CMVideoFormatDescriptionRef
CMSampleBufferRef

创建视频格式

视频格式的类型为 CMVideoFormatDescriptionRef

  • 对于 H.264,解码器的初始化需要 SPS 和 PPS 信息,顺序是 SPS、PPS
CMVideoFormatDescriptionRef video_format;

uint8_t* sps_data;
uint8_t* pps_data;
size_t sps_data_length;
size_t pps_data_length;
const uint8_t* param_set_pointers[2] = {sps_data, pps_data};
size_t param_set_sizes[2] = {sps_data_length, pps_data_length};
int nalu_header_length = 4;
OSStatus status = CMVideoFormatDescriptionCreateFromH264ParameterSets(kCFAllocatorDefault,
                                                                      2,
                                                   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值