iOS-视频编码技术

来源:互联网 发布:php 求数组中最大值 编辑:程序博客网 时间:2024/06/06 13:15

在学习视频编码技术之前,需要先了解什么是帧:

  • 就是影像动画中最小单位的单幅影像画面;

  • 一帧就是一副静止的画面,连续的帧就形成动画;

  • 简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用FPS(Frames Per Second)表示;

  • 每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象;

  • 高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。

例如:一个 GIF 图,就是由若干张图片组合而成,每张图像相当于一帧

  • 1秒钟之内至少需要16帧画面,播放起来才不会出现卡顿

  • 正常开发视频播放通常会采集30帧


这里写图片描述

这个 GIF 图是由若干张图片组成:

这里写图片描述


数据流传输

  • 数据在网络上是以很小的称为帧(Frame)的单位传输的;

  • 未经压缩的视频的数据量巨大,根本没办法保存,更不适合网络中的传输;

  • 所以一般情况下,在音视频传输之前,需要进行压缩,也就是编码;

  • 数据流的传输过程:视频录制 –> 编码 –> 传输 –> 解码 –>播放。


编码定义:

  • 从信息论的观点来看,描述信源的数据是信息和数据冗余之和, 即:数据 = 信息+数据冗余

  • 所以要想获取到真实有用的信息,必须去掉 “数据冗余“,这样数据的大小也会减少很多,这种去除冗余信息的过程,我们就称之为压缩编码


空间冗余:图像相邻像素之间有较强的相关性

同一景物表面上采样点的颜色之间通常存在着空间相关性,相邻各点的取值往往相近或者相同,这就是空间冗余。

  • 例如,图像中有一片连续的区域,这个区域的像素都是相同的颜色,那么空间冗余就产生了。
  • 如果对每一个像素进行单独的存储,必然会非常浪费空间。

时间冗余:视频序列的相邻图像之间内容相似

在视频、动画图像中,相邻帧之间往往存在着时间和空间的相关性。

  • 例如,人们在会议室中开会,随着会议的进行,时间在改变,但是背景(房间、家具等)一直是相同的、而且没有移动,变化的只是人们的动作和位置。这里的背景就反映为时间冗余。
  • 同样,由于人在说话时产生的音频也是连续和渐变的,因此声音信息中也会存在时间冗余。

  • 所以如果对每张图像进行单独的像素存储,在下一张图片中又出现了相同的。那么相当于很多像素都存储了多份,必然会非常浪费空间。


视觉冗余:人的视觉系统对某些细节不敏感

在多媒体技术的应用领域中,人的眼睛是图像信息的接收端。
视觉冗余是相对于人眼的视觉特性而言的,人类的视觉系统并不能对图像画面的任何变化都能感觉到。

通常情况下具有以下特点:

  • 对亮度的变化敏感,对色度的变化相对不敏感。
  • 对静止图像敏感,对运动图像相对不敏感。
  • 对图像的水平线条和竖直线条敏感,对斜线相对不敏感。
  • 对整体结构敏感,对内部细节相对不敏感。
  • 对低频信号敏感,对高频信号相对不敏感(如:对边沿或者突变附近的细节不敏感)
  • ……

因此,包含在色度信号、运动图像、图像高频信号中的一些数据,相对于人眼而言,并不能对增加图像的清晰度作出贡献,被人眼视为多余的,这就是 视觉冗余


压缩编码的标准

标准化组织:

ITU:International Telecommunications Union VECG:Video Coding Experts Group(国际电传视讯联盟)

  • H.26X系列
    • H.261:主要在老的视频会议和视频电话产品中使用
    • H.263:主要用在视频会议、视频电话和网络视频上
    • H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
    • H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC的继任者。可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势,尚未有大众化编码软件出现

ISO:International Standards Organization MPEG:Motion Picture Experts Group(国际标准组织机构)

  • MPEG系列(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发)
    • MPEG-1第二部分:MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式
    • MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统中
    • MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。

目前应用最广泛的H.264(AVC)

特点:高压缩高质量和支持多种网络的流媒体传输

在H264协议里定义了三种帧

  • I帧:完整编码的帧叫I帧
  • P帧:参考之前的I帧生成的只包含差异部分编码的帧叫P帧
  • B帧:参考前后的帧编码的帧叫B帧

H264采用的核心算法是帧内压缩和帧间压缩

  • 帧内压缩是生成I帧的算法
  • 帧间压缩是生成B帧和P帧的算法

H264的压缩方法:

  • 分组: 把几帧图像分为一组(GOP:Group of picture(图像组),也就是一个序列),为防止运动变化,帧数不宜取多;
  • 定义帧: 将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
  • 预测帧: 以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
  • 数据传输: 最后将I帧数据与预测的差值信息进行存储和传输。

H264分层设计

  • 视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示;
  • 网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送。

编码方式

编码的方式有两种:

  • 软编码:使用 CPU 进行编码,软编码通常使用:ffmpeg+x264
  • 硬编码:使用非 CPU 进行编码,如显卡 GPU、专用的 DSP、FPGA、ASIC 芯片等
PS:

ffmpeg:是一套开源的、用于对音视频进行编码&解码&转化计算机程序

x264:x264是一种免费的、开源的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码方式

对比:

  • 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低
  • 硬编码: 性能高,对CPU没有压力,但是对其他硬件要求较高(如GPU等)

iOS中编码方式:

  • 在iOS8之前,苹果并没有开放硬编码的接口,所以只能采用ffpeng+x624进行软编码
  • 在iOS8之后,苹果开放了接口,并且封装了VideoToolBox&AudioToolbox两个框架,分别用于对视频&音频进行硬编码
原创粉丝点击