第三方服务:
七牛云: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格式可以进行缓存到本地!
网友评论