iOS直播业务流程及H264编码

直播

伪流媒体

渐进式下载 : 边下边存, 文件会保存

使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像,
特点:实现简单, 成本也低

流媒体

边下边播, 不会保存文件

HLS (HTTP Live Streaming)

是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。原理上是将视频流分片成一系列HTTP下载文件。所以,HLS比RTMP有较高的延迟。HLS基于HTTP协议实现呢,传输内容給包括两部分,一是M3U8描述文件,二是TS媒体文件

RTMP (Real Time Messaging Protocol)

实时消息传输协议, 该协议基于TCP,是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信.

Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议它有多种变种:

  • RTMP工作在TCP之上,默认使用端口1935;
  • RTMPE在RTMP的基础上增加了加密功能;
  • RTMPT封装在HTTP请求之上,可穿透防火墙;
  • RTMPS类似RTMPT,增加了TLS/SSL的安全功能;

RTMP优势

  • 实时性高:RTMP的实时性在3秒之内,经过多层CDN节点分发后,实时性也在3秒左右,在一些实时性有要求的应用中以RTMP为主。
  • 支持加密:RTMPE和RTMPS为加密协议
  • 稳定性高:HTTP也很稳定,但HTTP是在协议上稳定性不只是服务端的事情,在CDN分发,服务器管理,客户端的支持上

RTMP 使用

  • RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接,在Connection链接上会传输一些控制信息
  • TMP协议传输时会对数据做自己的格式化,这种格式的消息我们称之为RTMP Message。而实际传输的时候为了更好地实现多路复用,分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每一个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据chunk中包含的data的长度,message id和message的长度把chunk还原成完整的Message,从而实现信息的收发。

RTMP协议详解

Real Time Message Protocol(实时信息传输协议)的缩写,用来解决==多媒体数据传输流==的多路复用(Multiplexing)和分包(packetizing)的问题,靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性。

TCP-传输控制协议

  • 建立连接,形成传输数据的通道
  • 在连接中可进行大数据传输,数据大小不做限制
  • 通过三次握手完成连接,是可靠协议,安全送达
  • 必须建立连接,效率会降低

UDP-用户数据报协议

  • 将数据源和目的封装到数据包中,不需要建立连接
  • 每个数据包的大小限制在64K之内
  • 因为不需要连接,因此是不可靠协议
  • 不需要建立连接,速度快

RTMP握手

  • 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
  • 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
  • 当客户端和服务器分别收到S2和C2后,握手完成。
直播APP架构.png

完整的直播业务流程

  • 1.音视频采集(AVFoundation)
    • 摄像头(图像传感器)
    • 麦克⻛(声音传感器)
  • 2.视频滤镜(GPUImage)
    • 美颜
    • 水印
  • 3.音视频编码
    • 硬编码:视频:VideoToolBox | 音频: AudioToolBox
    • 软编码:视频编码H264 | 音频编码: AAC
  • 4.推流
    • 将采集的音频,视频数据发送到流媒体服务器
  • 5.流媒体服务器
    • 数据分发(CDN)
    • 截屏
    • 实时转码
  • 6.拉流
    • 从流媒体服务器获取⾳频、视频数据
  • 7.音视频解码
    • 视频解码:硬解码(VideoToolbox) | 软解码(X264)
    • 音频解码:硬解码(AudioToolBox) | 软解码(fdk_aac)
  • 8.音视频播放
    • ljkplayer:⼀一款开源强⼤大的播放器

直播需要技术点

1.采集视频、音频

  • 摄像头、⻨麦克⻛
  • 摄像头 CCD(图像传感器)
  • ⻨克风 拾⾳器(声音传感器)
  • 采集音视频数据
  • 导⼊入AV Foundation.Framework框 架
  • 从CaptureSession会话的回调中获取音视频数据

2.视频滤镜处理

  • 美颜
  • 水印
  • 使⽤用GPUImage美颜、⽔水印

3.视频、音频编码压缩

  • 硬编码
  • 视频:VideoToolBox 框架
  • 音频: AudioToolBox 框架
  • 软编码
  • 视频压缩

视频编码H264
X264把视频原数据YUV/RGB编码 H264

  • 音频压缩
  • 音频编码:mp3.AAC
  • fdk_aac将音频数据PCM转AAC

4.推流

推流:将采集的音频,视频数据通过流媒体协议发送到流媒体服务器

  • muxing(封装) 音视频封包成FLV或 者TS
  • 推流技术
  • 流媒体协议: RTMP\RTSP\HLS\FLV
  • 视频封装格式:TS\FLV
  • 音频封装格式:mp3\AAC

5.流媒体服务器处理数据

  • 数据分发(CDN)
  • 截屏
  • 录制
  • 实时转码

6.拉流

拉流:从流媒体服务器获取⾳频、视频数据

流媒体协议: RTMP\RTSP\HLS\FLV

7.视频、音频解码

  • demuxing(解封装)
    将FLV\TS文件分离出音视频
  • 视频解码
    硬解码(VideoToolbox)
    软解码(X264)
  • 音频解码
    硬解码(AudioToolBox)
    软解码(fdk_aac)

8.播放

ljkplayer:⼀一款开源强⼤大的播放器

9.聊天互动

IM及时通讯

聊天功能

第三⽅方及时通讯:融云、腾讯云

视频编码(H264)

通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式
硬编码:(硬件)定制性好,VideoToolBox
软编码:基于CPU, fmpeg

认知视频

即连续的图片(视频帧)

内容元素

  • 图像(Image)
  • 音频(Audio)
  • 元信息(Metadata)


    内容元素

编码格式

  • Video:H264/H265
  • Audio:AAC\HE-AAC

容器封装

  • MP4\MOV\FLV\RM\RMVB\AVI

视频(图像、音频)构成:-> 视频编码H264 -> 音频编码AAC -> 注明元数据 -> 容器封装打包MP4 -> 完整的视频文件

视频编码技术

  • MPEG 帧间压缩:存储连续帧直接的有差别
    的地⽅,从而达到较⼤的压缩⽐
  • H264 :比较
  • 单个画面清晰度比较, MPEG4 有优势,从动作连贯性上的清晰度,H264优势比较多
  • 264算法比较复杂,运行需要更多的资源,因此264优势比较高
  • 264使⽤更灵活,将一些实现留给⼚家
  • H265: 265是基于264,保留原来技术, 将相关的技术加以改进,例如码流、 编码质量、延时、算法复杂度之间的差额算法,达到最优化设置
  • 更⾼效的编码标准,能够在同等画质效果下将内容的体积压缩得更小,传输时更快更省带宽.
  • I帧:关键帧 解码关键(完整的图片),没有关键帧则编码失败
  • muxing(合成) 将视频流、音频流、字母流合成封装到一个文件中,作为一个信号进行传输

GOP : I、B、P

VideoToolBox

VideoToolBox基于Core Foundation库函数,C语言

创建Session -> 设置编码相关 参数 -> 开始编码 -> 循环输入元数据(直接向摄像头获取)-> 获取编码后的H264数据 -> 结束编码

补充

1.如何判断帧类型

如何判断帧类型.png

如何计算

如何计算帧类型

2.视频帧格式

视频帧格式

3.H264格式

H264格式.png

4.编码后数据

编码后数据

5.FFmpeg命令

ffmpeg -i H264文件 -i AAC文件 -vcodec copy -f MP4文件

ffmpeg -i /Users/xxx/Desktop/Video.h264 -i /Users/xxx/Desktop/Audio.aac -vcodec copy -f mp4 /Users/xxx/Desktop/Mp4.mp4

6.码率计算公式

码率计算公式.png

软编码是一种设计,而硬编码不过是一种具体的实现。

参考

LFLiveKit
已经实现了 后台录制、美颜功能、支持h264、AAC硬编码,动态改变速率,RTMP传输等,我们真正开发的时候直接使用就很方便啦。
LiveVideoCoreSDK
实现了美颜直播和滤镜功能,我们只要填写RTMP服务地址,直接就可以进行推流啦。
https://www.jianshu.com/p/27b3bb4695aa

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

推荐阅读更多精彩内容