苹果设备直播教程,苹果直播最佳设置

首页 > 数码 > 作者:YD1662023-04-21 13:55:42

这一阶段,常用到的一个三方库是 GPUImage,这个库提供了常见的 100 滤镜的算法。它有三个版本:

GPUImage 1:OC OpenGL

GPUImage 2:Swift OpenGL

GPUImage 3:Swift Metal

编码

在拿到采集处理后的音视频原数据之后,还要经过编码压缩才能往外传输数据。

压缩分为两种,有损和无损,区别如下:

视频的编码,是为了压缩它的大小,以便于能够更快的在网络上传输。很明显,这是一个有损压缩过程。在这个过程中,会丢弃掉一些冗余信息,常见的冗余信息如下:

总结来说:编码就是一个丢弃冗余信息的压缩过程。

视频编码过程

具体的编码过程如下:

  1. 找到冗余信息:每一帧原始采样分块
  2. 把图片分组:有差别的像素只有 10% 以内的点,亮度差值变化不超过 2%,而色度差值的变化只有 1% 以内一组称为 GOP (包括一个 I 帧,多个 P/B 帧)
  3. 逐帧进行编码

苹果设备直播教程,苹果直播最佳设置(5)

这个是剪映的一个截图,我在里面放了一个30帧的视频。

先看左下角红框里,我框了5帧图片出来,这几帧图片,内容差别很小,我们可以把他们分成一个组。来处理我们上面说过的时间冗余信息。每一组图片叫做 GOP 。

再看右边这个小箭头,我把箭头尾部,肩膀这部分放大了,可以看到一个个像素,每个小红框里假如说是有16*16个像素,就是一个分块。在这个分块,我们处理上面说过的空间冗余。

分组,分块之后。一帧帧的去处理图片。这就是编码的大概流程。

I P B 帧

帧的编码方式:

在对视频帧编码后,原始视频数据会被压缩成三种不同类型的视频帧:I帧、P帧、B帧

苹果设备直播教程,苹果直播最佳设置(6)

H.264、H.265

H.264 的压缩方式,是在两方面对视频帧进行了压缩:

H.265 是基于 H.264 基础上,做了些改进,本质上是一样的。

核心方法如下:

// 创建编码器 OSStatus status = VTCompressionSessionCreate(NULL, _configuration.videoSize.width, _configuration.videoSize.height, kCMVideoCodecType_H264, NULL, NULL, NULL, VideoCompressonOutputCallback, (__bridge void *)self, &compressionSession); // 配置编码器属性 VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_MaxKeyFrameInterval, (__bridge CFTypeRef)@(_videoMaxKeyframeInterval)); //... // 编码前资源配置 VTCompressionSessionPrepareToEncodeFrames(compressionSession); // 编码 OSStatus status = VTCompressionSessionEncodeFrame(compressionSession, pixelBuffer, presentationTimeStamp, duration, (__bridge CFDictionaryRef)properties, (__bridge_retained void *)timeNumber, &flags); 音频编码

数字音频压缩编码是在保证信号在听觉方面不产生失真的前提下,对音频数据信号进行尽可能的压缩。 去除声音中冗余成分(不能被人耳察觉的信号,他们对声音的音色、音调等信息没有任何帮助)。

音频冗余信息如下:

音频编码核心方法如下:

#import <AudioToolbox/AudioToolbox.h> // 创建编码器 OSStatus result = AudioConverterNewSpecific(&inputFormat, &outputFormat, 2, requestedCodecs, &m_converter);; // 编码 AudioConverterFillComplexBuffer(m_converter, inputDataProc, &buffers, &outputDataPacketSize, &outBufferList, NULL) 封装

封装就是把编码后的音视频数据,打包放到一个容器格式里。例如 mp4、flv、mov 等

苹果设备直播教程,苹果直播最佳设置(7)

每一种封装格式有它适合的领域。比方说avi这种格式,它不支持流媒体播放,只能说是有一个完整的打包好的视频文件,那它就是适合在 bt下载领域应用,而不适合直播这种场景了。

直播中比较常用的两种封装格式是 flv 和 ts,他们的区别在于编码器类型不一样。

FLV

flv 支持 h.264 & AAC 编码器,我们这里就以他为例,看一下flv的文件结构是怎样的:

首先是有一个 flv header,里面包含 flv 的文件表示,以及flv版本信息等等。然后是flv body。body又分为一个个 tag,在 tag 里面才是具体的音频数据,或者视频数据信息。

苹果设备直播教程,苹果直播最佳设置(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.