美文网首页
视频直播

视频直播

作者: _叮叮当当__ | 来源:发表于2017-08-08 20:53 被阅读125次

直播基本流程

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、播放

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

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

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

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

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

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

相关文章

  • iOS直播---音/视频编码(三)

    iOS视频直播---主要的概念(一)iOS直播---音/视频采集/压缩(二)iOS直播---音/视频编码(三)

  • 视频直播

    三种协议 RTMP RTMP协议是互联网TCP/IP五层体系结构中应用层协议 RTMP可以用来推送还可以用来直播 ...

  • 视频直播

    客户端主要负责拉流、解码、播放 iOS原生的播放器都是基于http和https协议的,mms、rtmp等协议需要植...

  • 视频直播

    直播基本流程 1.1、采集【AVFoundation】 创建捕捉会话AVCaptureSession:st...

  • 视频直播

    参考文章: 知乎 如何搭建一个完整的直播系统https://www.zhihu.com/question/4216...

  • 视频直播

    iOS中集成ijkplayer视频直播框架 iOS视频直播初窥:高仿<喵播APP>

  • 视频直播

    LeanClound消息类型自定义 主要矛盾在于过去接收和发送的消息类型与现在接收和发送消息类型完全不一样,次要矛...

  • 音视频

    音视频的应用 直播类: 音视频会议、教育直播、娱乐/游戏直播等 短视频:抖音、快手 网络视频: 优酷、腾讯视频、爱...

  • 我的网址导航

    视频网站 爱奇艺视频腾讯视频优酷视频pp体育西瓜视频 直播网站 虎牙直播龙珠直播斗鱼 学习网站 玩安卓comsin...

  • 直播技术简单介绍(非原创)

    文章大纲 一、视频直播原理介绍二、视频直播代码演示(Android)三、项目源码下载四、参考文章 一、视频直播原理...

网友评论

      本文标题:视频直播

      本文链接:https://www.haomeiwen.com/subject/ystxrxtx.html