iOS开发-音视频开发

一.学习背景

5G网络作为第5代的移动通信网络,它的网络峰值传播速度可1以达到10Gbps/s.这比4G的的传输速度快数百倍.举个例子,整部超高画质电影下载可在1秒钟之内下载完成.

当然,随着5G技术的诞生,用在智能终端分享3D电影,游戏或者超高画质节目的时代已经毫无悬念的向我们走来.

想必大家也逐步了解,国内外的互联网公司也已经布局音视频,3D技术方面的开发者招聘和相关产品研发.目前落地推广最普遍的就是直播类项目和小视频类的项目.当然未来的方向肯定不止如此.

那么我们现在带着问题来学习?

  • 为何编码?
  • 何为编码?

1.1 为何编码?

从存储角度和网络传输以及通用性 3个角度,压缩已经成了不可或缺的动作.压缩编码最基本的指标,就是压缩比. 压缩比通常都是小于1(如果等于或者大于1,是不是就失去了编码的意义了.编码的目的就是为了压缩数据体量).

1.2 何为编码?

编码就是按照一定的格式记录采样和量化后的数据.

1.2.1编码中软编码和硬编码的区别?

  • 硬编码: 使用非CPU进行编码,例如使用GPU芯片处理
  • 软编码: 使用CPU来进行编码计算.

1.2.2 软编码与硬编码的区分?

  • 软编码: 实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。
  • 硬编码:性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。

读者理解: 硬编码,就是使用GPU计算,获取数据结果,优点速度快,效率高. 软编码,就是通过CPU来计算,获取数据结果.

1.2.3 压缩算法

压缩算法分为2种,有损压缩与无损压缩.

  • 无损压缩:解压后的数据可以完全复原,在常用的压缩格式中,无损压缩使用频次较低
  • 有损压缩:解压后数据不能完全复原,会丢失一部分信息.压缩比越小,丢失的信息就会越多.信号还原的失真就会越大.

需要根据不同的场景(考虑因素包括存储设备,传输网络环境,播放设备等)选用不同的压缩编码算法.

二. 直播APP需求剖析

2.1 直播项目流程

在直播项目中,一般常见有8个步骤.

  • 音视频采集
  • 视频滤镜
  • 音视频编码
  • 推流
  • 流媒体服务器处理
  • 拉流
  • 音视频解码
  • 音视频播放

这个在开发者面试一些有意向或者目前业务中包含直播需求的公司,最为常见的面试题.不管在我们过往的工作经验是否有直播或音视频相关经验.这个一块都是你必须能了解.希望大家可以简单的了解.

2.2 相关框架的学习与使用场景

Snip20180723_97.png

  • 采集视频,音频
    • 使用iOS原生框架 AVFoundation.framework
  • 视频滤镜处理
    • 使用iOS原生框架 CoreImage.framework
    • 使用第三方框架 GPUImage.framework

CoreImageGPUImage 框架比较: 在实际项目开发中,开发者更加倾向使用于GPUImage框架. 首先它在使用性能上与iOS提供的原生框架,并没有差别;其次它的使用便利性高于iOS原生框架,最后也是最重要的GPUImage框架是开源的.而大家如果想要学习GPUImage框架,建议学习OpenGL ES,其实GPUImage的封装和思维都是基于OpenGL ES. GPUImage OC版本下载地址 GPUImage Swift版本下载地址

  • 视频\音频编码压缩
    • 视频: 使用FFmpeg,X264算法把视频原数据YUV/RGB编码成H264
    • 音频: 使用fdk_aac 将音频数据PCM转换成AAC
    • 视频: VideoToolBox框架
    • 音频: AudioToolBox 框架
    • 硬编码
    • 软编码
  • 推流
    • 流媒体协议: RTMP\RTSP\HLS\FLV
    • 视频封装格式: TS\FLV
    • 音频封装格式: Mp3\AAC
    • 推流: 将采集的音频.视频数据通过流媒体协议发送到流媒体服务器
    • 推流技术
  • 流媒体服务器
    • 数据分发
    • 截屏
    • 实时转码
    • 内容检测
  • 拉流
    • 拉流: 从流媒体服务器中获取音频\视频数据
    • 流媒体协议: RTMP\RTSP\HLS\FLV
  • 音视频解码
    • 视频: 使用FFmpeg,X264算法解码
    • 音频: 使用fdk_aac 解码
    • 视频: VideoToolBox框架
    • 音频: AudioToolBox 框架
    • 硬解码
    • 软解码
  • 播放 ijkplayer,kxmovie 都是基于FFmpeg框架封装的
    • ijkplayer 播放框架
    • kxmovie 播放框架

原文发布于微信公众号 - HelloCode开发者学习平台(HellCode_CC)

原文发表时间:2018-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

如何学习框架

方法一: *以各种方式了解这个框架产生的原因,及其主要解决的问题。1% *观察其主要外部接口(这里的外部接口是指公有类型)的使用场景,理解它的核心概念。5% *...

23280
来自专栏Java学习网

什么是好代码

什么是好代码 你如何定义好的代码?本文通过咨询65个开发人员同一个问题从而得出了一个伪科学的答案。 首先我们相信写好代码是非常重要的。为什么呢?首先,好代码...

248100
来自专栏程序员宝库

如何学习一门新的语言?

首先要说,这并不是一篇教你如何学习的文章,因为到今天为止我也没有找到一种通用的方法来解决如何学习的问题。但是在探索的道路上,我确实产生过一些思路,我想把这些思考...

10120
来自专栏VRPinea

Unreal发布4.19版本,为iOS、Android提供统一AR开发框架

31860
来自专栏HappenLee的技术杂谈

大数据小视角4:小议Lambda 与 Kappa 架构,不可变数据的计算探索

首先我们来看看什么是Lambda架构,Lambda演算在编程语言之中是一个编程范式,它遵循如下几个特点:

15020
来自专栏惶心 - 技术博客

【Premium 文章】远行 要开心

从今天开始,博客将会不定期发布完全原创的文章,与博客其余大部分文章不同,这些文章属于惶心的个人文学创作,不属于技术类教程。想了半天,这类文章以后就叫【Premi...

13920
来自专栏CSDN技术头条

八个 Python 数据生态圈的前沿项目

Galvanize 最近在旧金山参加了 Dato 数据科学峰会,这次会议聚集了千余名来自业界和学术界的数据科学研究人员,他们交流并探讨关于数据科学、机器学习应用...

27670
来自专栏Keegan小钢

小钢的架构思考:架构设计

最近一个多月因为忙于工作上的项目重构,所以文章一直没能更新。现在,重构终于暂时告一段落,于是,赶紧抽时间把文章写完更新发布。下面进入正文。

11420
来自专栏吉浦迅科技

AMD GCN 微架构之超算细节详解

在 2012 年,AMD 正式推出了代号为的 Tahiti 的新 GPU,这个 GPU 的特别之处在于采用了名为 Graphics Core Ne...

44880
来自专栏架构专栏

P8架构师点亮进阶之路——阿里最新技术重点划分以及面试必问点

跳槽阿里基本上都分为两个阶段的提问。第一个阶段是主语言本身以及它的高级特性,第二个阶段是讲述自己的项目,并在中间穿插着问题。正文才是重点......

24210

扫码关注云+社区

领取腾讯云代金券