VideoToolbox H264硬编码

直接使用硬件加速的视频编码和解码功能

Overview (概述)

VideoToolbox是一个提供直接访问硬件的编码和解码的底层框架,它提供了视频压缩和解压服务,并为储存在CoreVideo像素缓冲区中的光栅图像格式之间的转换提供服务,这些服务都是以会话对象的形式提供的(VTCompressionSession VTDecomprpessionSession VTPixelTransferSession),这些会话都是Core Foundation(CF)类型的,如果app不需要直接访问硬件编码器和解码器的应用程序就不需要使用VideoToolbox

VTCompressionSession(压缩 或者 编码)

管理将传入视频数据压缩的会话对象

压缩会话支持压缩一系列的视频帧,工作流程如下

  • VTCompressionSessionCreate创建一个压缩会话

  • 可选操作,用VTSessionSetProperty或者VTSessionSetProperties去设置压缩会话的压缩属性

  • VTCompressionSessionEncodeFrame编码视频帧,并且在会话的VTCompressionOutputCallback中接受压缩的视频帧

  • 强制完成一些或所有待处理的帧,用VTCompressionSessionCompleteFrames

  • 当你完成了压缩会话后,调用VTCompressionSessionInvalidate废弃压缩会话,并且要CFRelease释放它的内存

讲解

1 H264的数据结果

通常所说的H.264裸流,指的是由StartCode分割开来的一个个NALU组成的二进制序列,每个NALU一般来说就是一帧视频图像的数据(也有可能是多个NALU组成一帧图像,或者该NALU是SPS、PPS等数据)


image.png

如上图所示,0x00 00 00 01四个字节为StartCode,在两个StartCode之间的内容即为一个完整的NALU

如上图所示,0x00 00 00 01四个字节为StartCode,在两个StartCode之间的内容即为一个完整的NALU。
每个NALU的第一个字节包含了该NALU的类型信息,该字节的8个bit将其转为二进制数据后,解读顺序为从左往右算,如下:
(1)第1位禁止位,值为1表示语法出错
(2)第2~3位为参考级别
(3)第4~8为是nal单元类型
由此可知计算NALU类型时,只需将该字节的值与0x1F(二进制的0001 1111)相与,结果即为该NALU类型。
NALU类型有一下几种

image.png

比如:
00 00 00 01 67 42 C0 28 DA 01 E0 08 9F 96 10 00
00 03 00 10 00 00 03 01 48 F1 83 2A 00 00 00 01
68 CE 3C 80 00 00 01 06 05 FF FF 5D DC 45 E9 BD
E6 D9 48 B7 96 2C D8 20 D9 23 EE EF …

这是一段真实的码流
每帧的界定符为00 00 00 01 或者 00 00 01。 取后一个字节的后四位,作为判断该帧为什么类型(该帧的数据为两个界定符之间的数据)。

在ios硬解中,要将该帧转换成MP4风格的buffer,再放入解码器。

例如 上面的数据中
67 42 C0 28 DA 01 E0 08 9F 96 10 00 00 03 00 10 00 00 03 01 48 F1 83 2A
这是一个sps
要在前面加入4个字节的大端 表示sps的长度 即
00 00 00 18 67 42 C0 28 DA 01 E0 08 9F 96 10 00 00 03 00 10 00 00 03 01 48 F1 83 2A
00 00 00 18 表示sps的长度 24

SPS PPS

SPS(序列参数集Sequence Parameter Set)和 PPS(图像参数集Picture Parameter Set)是图2中NALU类型为7、8的两种NALU,其中包含了图像编码的各种参数信息,为解码时必须的输入

2 视频码率

视频码率:是视频数据(视频色彩量,亮度量,像素量)每秒输出的位数。一般用的单位是kbps

视频码率设置的必要性

在视频会议应用中,视频质量和网络带宽占用是矛盾的,通常情况下视频流占用的带宽越高则视频质量也越高;如要求高质量的视频效果,那么需要的网络带宽也越大;解决这一矛盾的钥匙当然是视频编解码技术。评判一种视频编解码技术的优劣,是比较在相同的带宽条件下,哪个视频质量更好;在相同的视频质量条件下,哪个占用的网络带宽更少。
是不是视频码率越高,质量越好呢?理论上是这样的,然而在我们肉眼分辨的范围内,当码率高到一定程度,感觉没有什么差别。所以码率设置有它的最优值,H.264(也叫AVC或X.264)的文档中,视频的建议码率如下

image.png

手机的设置码率的建议如下


image.png

编码前或者解码后数据格式


image.png

编码后


image.png
56344079C9CD44ACB0664890CE0389DF.png
image.png

H264码流中的第一个NALU就是SPS & PPS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 说是寂寞的秋的清愁, 说是辽远的海的相思 假如有人问我的烦忧 我不敢说出你的名字 我不敢说出你的名字 假如有人问我...
    乐佛仙女_清浊阅读 146评论 0 0
  • 1. 发笑的三种机理 1.1. 意外感 1.2. 优越感 1.3. 宣泄感 1.4. 所有让你感觉到好笑的事物,都...
    MR张翔阅读 1,250评论 0 2
  • 古人云:“君子一诺千金”,这种“承诺将来会执行”的对象在 JavaScript 中称为 Promise 对象。Pr...
    与蟒唯舞阅读 3,475评论 0 3
  • 丽妃刚离开的日子,维一个人吃饭,去同一家饭馆,点一份同样的米线。一个人去看电影,座同一个角落。一个人去逛...
    易水微尘阅读 215评论 0 0
  • 想和大家分享一下我昨天上课的一幕:……Enrichment的学生(11年级)对画脸谱兴趣没有Mandarin cl...
    蹦蹦的噩梦阅读 235评论 0 1