美文网首页
直播学习总结

直播学习总结

作者: 白水灬煮一切 | 来源:发表于2019-07-23 19:06 被阅读0次

    第三方服务:

    七牛云:https://www.qiniu.com/?utm_campaign=baiduSEM 

    网易云:http://vcloud.163.com/live#bdpc

    阿里云:

    视频参数

    帧率: 表示一秒播放的视频中有多少个帧,单位是FPS(Frame Per Second)以及Gop(表示多少秒一个I帧),人眼能接受的视频连续播放的最小帧率为25帧/秒。

    分辨率:单位英寸中所包含的像素点数,影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。

    码率:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。

    视频参数

    音频参数

    采样频率:即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。

    采样值:用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。

    声道数:即声音的通道的数目。常有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果,当然还有更多的通道数。

    码率 :比特率也叫码率,指音乐每秒播放的数据量

    本文主要使用的三个技术:

    1、采集、美颜LFLiveKit框架

    2、推流:LFLiveKit这个框架集成了以下框架:

    GPUImage(本身集成了AVFoundation框架):美颜+滤镜+水印

    X264框架:H264编码

    FFempeg:ACC编码

    RTMP协议:推流

    3、播放:ijkplayer内部集成了以下框架:

    FFempeg:音视频解码

    AVFoundation:视频播放

    服务器:nginx+rtmp+ffmpeg

    ![直播APP架构.png](https://img.haomeiwen.com/i2872842/b3c158c6b59616c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    GPUImage对AVFundation进行了一层封装,所以GPUImage框架已经集成了视频的录制

    ![屏幕快照 2018-06-07 上午10.17.55.png](https://img.haomeiwen.com/i2872842/1ede546841359037.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    ![屏幕快照 2018-06-07 上午10.17.55 2.png](https://img.haomeiwen.com/i2872842/e0b1ce37099752bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    HLS 也有它的优点:

    >数据通过 HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题。

    >使用短时长的分片文件来播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放。

    >HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。

    RTMP 优缺点:

    RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。这样 RTMP 相对来说就有这些优点:

    >延时较小,通常为 1-3s。

    >基于 TCP 长连接

    因此业界大部分直播业务都会选择用 RTMP 作为流媒体协议。通常会将数据流封装成 FLV 通过 HTTP 提供出去。但是这样也有一些问题需要解决:

    >iOS 平台没有提供原生支持 RTMP 或 HTTP-FLV 的播放器,这就需要开发支持相关协议的播放器。(ijkplayer框架很好支持了RTMP协议,包括音视频解码)

    推送服务器流程:

    通过AVCaptureSession这么一个捕捉会话,指定两个AVCaptureDevice 也就是iOS的摄像头和麦克风,获取个原始视频和音频,然后需要进行个H.264的视频编码和AAC的音频编码,再将编码后的数据整合成一个音视频包,通过rmtp推送到nginx服务器

    采集、美颜、推流有LFLiveKit,

    拉流播放有IJKMediaFramework(ijkplayer这个播放器框架集成了拉流、音视频解码、视频播放等强大功能)

    直播整个技术 流程:

    GPUImage 进行音视频的采集 + 美颜处理 ——>音视频原生文件包 ——>ffempeg进行音频ACC编码处理+X264进行视频H264编码处理 + 打包 ——>libremp框架进行RTMP协议推流 ——>通过ijkplayer框架进行播放(集成音频AudioTooBox和视频VideoToolBox的音视频解码+视频播放等功能)

    **数据采集原理:**

    **下面将利用** **ios** **上的摄像头,进行音视频的数据采集,主要分为以下几个步骤:**

    *  音视频的采集,ios 中,利用 AVCaptureSession和AVCaptureDevice 可以采集到原始的音视频数据流。

    *  对视频进行 H264 编码,对音频进行 AAC 编码,在 ios 中分别有已经封装好的编码库来实现对音视频的编码。

    *  对编码后的音、视频数据进行组装封包;

    *  建立 RTMP 连接并上推到服务端。

    *  ps:由于编码库大多使用 c 语言编写,需要自己使用时编译,对于 ios,可以使用已经编译好的编码库。

    *  **x264****编码:**[https://github.com/kewlbear/x264-ios](https://link.jianshu.com/?t=https://github.com/kewlbear/x264-ios)(复制此链接到浏览器打开)

    *  **faac****编码:**[https://github.com/fflydev/faac-ios-build](https://link.jianshu.com/?t=https://github.com/fflydev/faac-ios-build)(操作同上)

    *  **ffmpeg****编码:**[https://github.com/kewlbear/FFmpeg-iOS-build-script](https://link.jianshu.com/?t=https://github.com/kewlbear/FFmpeg-iOS-build-script)(操作同上)

    *  关于如果想给视频增加一些特殊效果,例如增加滤镜等,一般在编码前给使用滤镜库,但是这样也会造成一些耗时,导致上传视频数据有一定延时。

    iOS中的支持的视频格式:mp4、m4v、m4a、3gp、3g2

                              音频格式:caf、wav、aif、aifc、amr、mp3、ac3、eac3

                              图片:jpg、jpeg、dng、heic、avci、heif、tiff

      //下面是视频格式(用来转换视频格式)

        AVFileTypeQuickTimeMovie //.mov and .qt

        AVFileTypeMPEG4//.mp4

        AVFileTypeAppleM4V//.m4v

        AVFileTypeAppleM4A//.m4a

        AVFileType3GPP//.3gp, .3gpp, and .sdv NS_AVAILABLE(10_11, 4_0);

        AVFileType3GPP2//.3g2, .3gp2 NS_AVAILABLE(10_11, 4_0);

        AVFileTypeCoreAudioFormat//.caf NS_AVAILABLE(10_7, 4_0);

        AVFileTypeWAVE//.wav, .wave, and .bwf NS_AVAILABLE(10_7, 4_0);

        //下面是音频格式(用来转换音频格式)

        AVFileTypeAIFF//.aif and .aiff NS_AVAILABLE(10_7, 4_0);

        AVFileTypeAIFC//.aifc and .cdda NS_AVAILABLE(10_7, 4_0);

        AVFileTypeAMR//.amr NS_AVAILABLE(10_7, 4_0);

        AVFileTypeMPEGLayer3//.mp3 NS_AVAILABLE(10_9, 7_0);

        AVFileTypeSunAU//.au and .snd NS_AVAILABLE(10_9, 7_0);

        AVFileTypeAC3//.ac3 NS_AVAILABLE(10_9, 7_0);

        AVFileTypeEnhancedAC3//.eac3 NS_AVAILABLE(10_11, 9_0);

        //下面是图像的格式(用来转换图片格式)

        AVFileTypeJPEG//.jpg or .jpeg NS_AVAILABLE(10_13, 11_0);

        AVFileTypeDNG//.dng NS_AVAILABLE(10_13, 11_0);

        AVFileTypeHEIC//.heic NS_AVAILABLE(10_13, 11_0);

        AVFileTypeAVCI//.avci NS_AVAILABLE(10_13, 11_0);

        AVFileTypeHEIF//.heif NS_AVAILABLE(10_13, 11_0);

        AVFileTypeTIFF//.tiff or .tif NS_AVAILABLE(10_13, 11_0);

      */

    七牛云使用注意点:

    1、网络不好中断内置了自动重连功能,但是默认不开启,需要手动开启重连功能,而且自动重连次数上限目前设定为 3 次!——>三次重连仍未连上,则会触发一个网络异常代理回调,我们可以在代理里进行操作处理。

    2、弱网优化:

    1>链接中断会自动 重连三次。(默认关闭,要手动打开)

    2>网络切换block回调,自己根据需求做处理。该属性未被初始化赋值,则 SDK 内部出于节省用户移动网络流量的目的,会自动断开推流!所以需要自己监听进行重连!

    3>自适应码率模块 和 动态帧率模块  (默认情况下,这两个模块处于关闭状态)

    4>QUIC 推流:在 弱网情况下可以采用UDP推流 (优化的UDP保证丢包)

    3、美颜功能:美颜、美白、红润

    4、进入后台推一张图片,会 持续为您推送该图片

    5、可以录屏—>iOS 10 新增的录屏推流 (ReplayKit Live) 功能,App 中添加一个类型为 Broadcast Upload Extension 的新 Target,

    6、七牛云的播放端是 HLS 及 RTMP 播放 SDK,因此可以播放直播以及点播

    7、使用 IP 播放,不能使用域名

    8、可播放的格式mp4、H264、H265、HLS 、HTTP-FLV点播 /  AAC、MP3 ,其中mp4格式可以进行缓存到本地!

    相关文章

      网友评论

          本文标题:直播学习总结

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