视频直播

直播基本流程

1.1、采集【AVFoundation】

        创建捕捉会话AVCaptureSession:startRunning开始采集

        输入源(AVCaptureDeviceInput):从摄像头输入

        输入源(AVCaptureDeviceInput):从话筒输入

        创建AVCaptureMovieFileOutput 用于将音频视频写入文件

1.2、前处理:美颜,滤镜,水印

      【GPUImage】:GPUImage是利用GPU,使在图片和视频上应用不同的效果和滤镜变得非常的容易(120种),同时它还拥有出色的性能,并且它的性能要比苹果内置的相关APIs出色。

        如高斯模糊:

       let processView =GPUImagePicture(image: sourceImage)

       let blurFilter =GPUImageGaussianBlurFilter()

       // 纹理大小blurFilter.texelSpacingMultiplier =2.0

        processView?.addTarget(blurFilter)


        【GPUImage美颜相机】

GPUImageStillCamera->GPUImageFilter->GPUImageView 这样,摄像机转到滤镜再转到view上显示出来.

         GPUImageStillCamera* imageCamera;//可以理解为设备

        GPUImageFilter* filter;//filter滤镜

        viewGPUImageView* iv;  //显示出来的

1.3、编码:视频压缩,音频压缩

为了不让用户感受到卡顿效果, 1秒钟之内至少需要16帧画面(正常开发通常会采集30帧)

去除冗余信息的过程,我们就称之为压缩编码

      【硬编码】使用GPU解码(ios8之前不可以硬编码,8之后可用VideoToolBox&AudioToolbox)

          「优缺点:软参数调整方便,升级易,但CPU负载重,性能比硬低」

          「优缺点:硬对CPU无压力,但是对GPU要求较高」

      【软编码】使用CPU解码(ffmpeg+x264)(手机发烫):android难以找到统一库兼容平台,通常软编。

       【编码标准】音频:AAC、Opus。 视频:H.264(高压缩高质量和支持多种网络的流媒体传输)、H.265、VP8、VP9

       【编码流程】:

          1、在进行当前信号编码时,编码器首先会产生对当前信号做预测的信号,称作预测信号

          2、 得到预测信号后,编码器会将当前信号与预测信号相减得到残余信号(residual signal),并只对残余信号进行编码

          3、编码器并不会直接对残余信号进行编码,而是先将残余信号经过变换(通常为离散余弦变换)然后量化以进一步去除空间上和感知上的冗余信息

          4、量化后得到的量化系数会再透过熵编码,去除统计上的冗余信息

H.264压缩算法要点:(NAL【网络提取层】+VCL【视频编码层】)

【VCL介绍】

          1、在H264协议里定义了三种帧

I帧:完整编码的帧叫I帧

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

B帧:参考前后的帧编码的帧叫B帧

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

帧内压缩是生成I帧的算法

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

          3、H264的压缩方法:

3.1、分组:把几帧图像分为一组GOP,为防止运动变化,帧数不宜取多。

GOP即Group of picture(图像组),指两个I帧之间的距离,也就是一个序列,一个序列的第一个图像叫做 IDR 图像,IDR 图像都是 I 帧图像:如果前一个序列出现重大错误,在这里可以获得重新同步的机会),

3.2、定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;

3.3、预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;

3.4、数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

【NAL介绍】

3.1、根据不同的网络把数据打包成相应的格式,将VCL产生的比特字符串适配到各种各样的网络和多元环境中。

3.2、I帧、P帧、B帧都是被封装成一个或者多个NALU进行传输或者存储的

3.3、NALU头通常为00 00 00 01,作为一个新的NALU的起始标识

3.4、NALU体封装着VCL编码后的信息或者其他信息



FFMpeg + X264 软编码

FFMpeg:非常强大的音视频处理库,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等

x264:里面集成了非常多优秀的算法用于视频编码

1.4、推流:将编码推送给服务器

        将数据经过采集预处理,编码后推流到服务器

       【传输协议】RTMP、RTSP、HLS

HLS协议:

       HLS:Apple基于HTTP的流媒体传输协议,HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。

HLS工作流程为:

采集视频源和音频源的数据

对原始数据进行H264编码和AAC编码

视频和音频数据封装为MPEG-TS包

HLS分段生成策略及m3u8索引文件

HTTP传输协议传输数据

RTMP协议:

基于TCP的应用层协议优势如下:

实时性高,延迟在3S内,若对实时性有要求,建议用RTMP。

支持加密;

稳定性高。

播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据

RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。


推流框架LFLiveKit是一个集成了视频采集-美颜-编码-推流为一体的框架,并且使用起来非常的简单, 我们可以在iOS中直接使用该框架进行推流

1.5、流分发:服务器进一步视频转码

       服务端为适配各个平台各种不同协议,需要做一些流处理工作,比如转码成不同格式,支持不同协议等。

1.6、播放

       拉流获取数据后,需要编码器解码渲染才可以在播放器上播放:

      解协议:取出网络传输过程中一些无用信息

      解封装:获取到的是音频&视频放在一起的封装文件

      音视频解码:音视频都是经过压缩编码的内容,解码后才能进行播放

      音视频同步:视频&音频文件需要通过播放

      音视频播放:声卡&显卡等对音视频进行播放

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

推荐阅读更多精彩内容

  • 直播在2016年是一个非常火热的领域,我也有幸在今年参与了新浪微博直播客户端的开发,在此分享一下关于直播开发的一些...
    倾剑飞血阅读 4,400评论 0 15
  • 花灯摇曳,弦歌夜舞。纵是元宵端阳,燕京也未曾如此的热闹过。又是一年七月半,温若萱斜倚在船尾栏杆上,百无聊赖的望着因...
    枇杷姑娘阅读 261评论 2 1
  • 体验:人生就是一连串的抉择,每个人的前途与命运,完全把握在自己手中,只要努力,终会有成,就业也好,择业也罢,创业亦...
    九洋阅读 180评论 0 0