iOS直播---主要的概念(一)

剪发的Tony 2017-12-21 15:12:46 ⋅ 72 阅读

直播可谓风生水起, 热火朝天, 借此也对音视频进行一次深入学习, 希望有需要的大家一块学习.

第一步对直播的大概流程概括如下:

1.直播人设备端:从摄像头获取视频流,然后使用rtmp服务提交到服务器
2.服务器端:接收直播人提交的rtmp视频流,并为观看者提供rtmp源
3.观看者:用播放器播放rtmp源的视频.

技术流程图如下:

第一: 音视频传输的常见协议

1.1 RTMP协议

Real Time Messaging Protocol 是Adobe公司为Flash播放器和服务器之间音、视频及数据传输开发的
实时消息传送协议。协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。

1.2 HLS协议

Http Live Streaming 是由Apple公司定义的基于HTTP的流媒体实时传输协议。它的原理是将整个流分
为一个一个小的文件来下载,每次只下载若干个。传输内容包括两部分:一是M3U8描述文件,
二是TS媒体文件。TS媒体文件中的视频必须是H264编码,音频必须是AAC或MP3编码。

第二: 客户端需要操作的步骤

1. 音视频的采集;
2. 对视频进行H264编码,对音频进行AAC编码;
3. 对编码后的音、视频数据进行FLV封包;
4. 建立RTMP连接并上推到服务端。

第三: 实现方式---第三方(一)

很多第三方都提供SDK,七牛云、金山云、乐视云、腾讯云、百度云、斗鱼直播伴侣推流端等等,功能几乎都是一样的,不同的是整个直播平台服务差异和接入的简易性。后端现在 RTMP/HTTP-FLV 清一色,App挂个源站直接接入云厂商或CDN就OK。摘录自JIAAIR.

建议了解一下其中的原理再使用第三方, 所谓: 知其然知其所以然 +_-

第四: 实现方式---知其然知其所以然(二)
4.1 软编软解与硬编解码的概念

1. 软编软解: 利用CPU做视频的编码和解码; 占用CPU资源,编解码效率不高;
2. 硬编解码: 利用GPU或者专用处理器来对视频流进行编解码,也就是硬件编码和解码.在iOS 8.0后,
苹果将该Video ToolBox(之前在Mac系统中使用)框架引入iOS系统。

4.2 视频编码的两种方案

1. 利用第三方库FFmpeg 进行编码,FFmpeg因其跨平台及功能丰富等诸多优势,被广泛使用。---软编软解;
2. 利用iOS自身的  AVAssetWriter 或VideoToolBox.framework 的VTCompressionSession进行编码。 ---硬编解码
2.1 使用AVAssetWriter编码需要将视频写入本地文件,然后通过实时监听文件内容的改变,读取文件并处理封包。
2.2 从iOS8开始,VideoToolBox提供了硬件编码支持,可以使用VTCompressionSession进行编码。

4.3 音频AAC是神马?

AAC(Advanced Audio Coding),中文名:高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

4.4 视频编码H264

总的来说 H264结构

  1. H264的码流由NALU单元组成;

  2. NALU单元包含视频图像数据H264的参数信息;

  3. 视频图像数据就是CMBlockBuffer;

  4. H264的参数信息包含SPS(Sequence Parameter Set)PPS(Picture Parameter Set).

H264码流的结构如下图:

更详细内容(NALU数据格式)详见---RTMP中FLV流到标准h264、aac的转换

4.5 编码解码的总的流程

iOS8开始开发者可以调用Video Toolbox框架提供的接口,来对视频进行硬件编解码的工作,为VOIP视频通话,视频流播放等应用的视频编解码

Video Toolbox结构

1. CVPixelBuffer:编码前和解码后的图像数据结构;
2. CMTime、CMClock和CMTimebase:时间戳相关。时间以64-bit/32-bit的形式出现;
3. CMBlockBuffer:编码后,结果图像的数据结构;
4. CMVideoFormatDescription:图像存储方式,编解码器等格式描述;
5. CMSampleBuffer:存放编解码前后的视频图像的容器数据结构。

编码解码的总的流程如图所示

1. 编解码前后的视频图像均封装在CMSampleBuffer中;
2. 编码后的图像,以 CMBlockBuffer 方式存储;
3. 解码后的图像,以 CVPixelBuffer   方式存储。
4. CMSampleBuffer里面还有另外的 时间信息CMTime 和 视频描述信息CMVideoFormatDesc 。

第五: FLV文件

5.1 FLV是什么?

flv是一种视频格式.

FLV是一个二进制文件,简单来说,其是由一个文件头(FLV header)和很多tag组成(FLV body)。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流,而每个tag又由tag headertag data组成。

注:

封包的时候要特别注意一下包头里面的时间戳,因为这个控制着播放的速度,如果不填,全是0的话,播放会相当快,
一般按视频帧率来设置。我这个h264流是8帧的,所以我每个tag的时间间隔是125ms左右。




全部评论: 0

    我有话说:

    iOS直播---音/视频采集/压缩(二)

    不好意思,我们来晚了! 但我们不会缺席。

    iOS实战篇:iOS 界面卡顿原因

    界面卡顿原因在 VSync[1] 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容......

    抖音品质建设 - iOS启动优化《原理篇》

    前言 启动是 App 给用户第一印象,启动越慢用户流失概率就越高,良好启动速度是用户体验不可缺少环。启动优化涉及到知识点非常多面也很广,篇文章难以包含全部,所以拆分成两部分:原理和实践

    iOS实战篇:[译]iOS扩充--OCR光学字符识别(内附项目GitHub地址)

    OCR(Optical Character Recognition) 光学字符识别, 是从图像中电子扫描提取文本过程, 可以在文档编辑等多种形式重用它,例如: 文本搜索/压缩等用途。

    iOS TableView性能优化

    TableView性能优化非常考验开发基本功,之前做项目实战时候经常被这个问题困扰

    安全攻防系列 安全基础概念

      该系列记录学习极客时间–安全攻防技能30讲相关内容 安全本质 安全本质就是保护数据被合法地使用。 数据:应用最核心东西;如用户信息、订单信息等等 合法:大到法律法规、业务

    WeCube 2.7.1 发布,站式 IT 架构管理和运维管理工具

    WeCube简介 微众银行在分布式架构实践过程中,发现将银行核心系统构建于分布式架构之上,会遇到一些与传统单体应用不同痛点(例如,服务器增多,部署难度大;调用链长,全链路跟踪困难; 系统复杂

    抖音品质建设 - iOS启动优化《实战篇》

    前言 启动是 App 给用户第一印象,启动越慢,用户流失概率就越高,良好启动速度是用户体验不可缺少环。启动优化涉及到知识点非常多,面也很广,篇文章难以包含全部,所以拆分成两部分:原理和

    Express 系列之---概述()

    Express是目前最流行基于Node.jsWeb开发框架,可以快速地搭建一个完整功能网站。

    MongoDB系列之----概述()

    MongoDB是由C++语言编写,是一个基于分布式文件存储开源数据库系统。

    「转载」使用DDD指导业务设计一点思考

    领域驱动设计(DDD) 是 Eric Evans 提出种软件设计方法和思想,主要解决业务系统设计和建模。DDD 有大量难以理解概念,尤其是翻译原因,某些词汇非常生涩,例如:模型、限界上下文

    「轻阅读」轻松理解 Kubernetes 核心概念

    Kubernetes 迅速成为云环境中软件部署和管理新标准。

    精品推荐:无推送,无新闻,无广告,2倍速看视频,看直播超强浏览器

    今天给大家推荐款小众却功能强大应用,这款应用不怎么出名,一直很低调,但是却受到众多好评,相对其他大众

    「轻阅读」移动端适配必须掌握基本概念和适配方案

    随着技术发展,移动设备越来越流行,并且不同设备间屏幕尺寸和屏幕像素差异,移动端开发面临着多分辨率适配问题。

    『黑科技』开源 IP 地址定位库 ip2region,99.9%准确率

    ip2region 是什么?ip2region 是准确率 99.9% IP 地址定位库,0.0x毫秒级查

    Angry IP Scanner 3.7.4 发布,IP、端口扫描工具

    Angry IP Scanner 是款使用方便 IP、端口扫描工具。利用它,用户可以获得被扫描计算机 ping 响应时间、主机名称、计算机名称、工作组、登录用户名、MAC 地址、TTL

    iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+

    iOS OOM 崩溃在生产环境中归因一直是困扰业界已久疑难问题,字节跳动旗下头条、抖音等产品也面临同样问题。在字节跳动性能与稳定性保障团队研发实践中,我们自研了款基于内存快照技术并且可

    「轻阅读」美团开源QPS压测结果近5w/s分布式ID生成器leaf调试实战

    大型互联网项目ID要保证全局唯一,一般不在用数据库自带id自增了,一般都会用分布式id生成器。

    文看懂mycat配置--数据库读写分离、分表分库

    波波说运维https://www.toutiao.com/i6742436467806568973 概述 系统开发中,数据库是非常重要一个点。除了程序本身优化,如:SQL语句优化、代码优化