推流,就是将采集到的音频,视频数据经过流媒体协议发送到流媒体服务器。html
如今直播应用,采用RTMP协议居多,也有部分使用HLS协议。android
采用RTMP协议,就要看下它与流媒体服务器交互的过程,RTMP协议的默认端口是1935,采用TCP协议。而且须要了解FLV的封装格式。ios
采用HLS协议,由于涉及到切片,延时会比较大,须要了解TS流。git
作直播,数据的来源不可缺乏,就是采集摄像头,麦克风的数据。github
iOS平台上采集音视频数据,须要使用AVFoundation.Framework框架,从captureSession会话的回调中获取音频,视频数据。swift
软编码就是利用CPU资源来压缩音视频数据,硬编码与之相反。windows
软编码的话,如今普遍采用FFmpeg库结合编码库来实现,FFmpeg+X624来编码视频数据YUV/RGB输出H264数据,
FFmpeg+fdk_aac来编码音频数据PCM输出AAC数据。api
将音频,视频打包成packet。缓存
根据所选流媒体协议,发送相应指令链接服务器,链接服务器成功后,就能够发送packet数据了。服务器
拉流,就是从流媒体服务器获取音频,视频数据。
播放器端根据URL解析所用的流媒体协议(RTMP,HLS)。
解封装,就是demux的过程,从容器格式(FLV,TS)中,分离出音视频数据。
解码,就是把获取到的数据解压缩,恢复成原始数据。解码就是将H264变成YUV,AAC变成PCM。
解码可使用软解码,硬解码。
软解码就是利用CPU资源去解压缩数据,采用的方式是FFmpeg解码。
硬解码,对于iOS平台来讲,可使用VideoToolbox.Framework(该框架只能在iOS 8.0及以上系统使用)
硬解码视频数据。Android平台上,可使用MediaCodec来硬解码视频数据。
采用OpenGL渲染YUV数据,呈现视频画面。将PCM送入设备的硬件资源播放,产生声音。
iOS播放流式音频,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架。
4. 直播相关SDK
5. 直播相关开源库
1. BeautifyFaceDemo 基于GPUImage的图片处理,作美颜方面能够参考一下
2. lf.swift 开源RTMP Swift版的,能够学习一下!好像做者是日本的,或者是在日本工做的,写了很多日文!
3. PLPlayerKit 一个不依赖FFmpeg的播放器,支持RTMP
4. HLS-Demo https://github.com/yangchao0033/HLS-Demo HLS播放demo
5. SmarterStreaming https://github.com/daniulive/SmarterStreaming 直播SDK(支持私有协议和RTMP推流,如windows推流/android推流/iOS推流/windows播放器/android播放器/iOS播放器)
一、 RTMP(Real Time Messaging Protocol,实时消息传送协议)
RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:
1)、工做在TCP之上的明文协议,使用端口1935;
2)、RTMPT封装在HTTP请求之中,可穿越防火墙;
3)、RTMPS相似RTMPT,但使用的是HTTPS链接;
RTMP协议是被Flash用于对象、视频、音频的传输。这个协议创建在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据既能够是AMF格式的数据,也能够是FLV中的视音频数据。一个单一的链接能够经过不一样的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。
二、RTSP(Real Time Streaming Protocol,实时流传输协议)
RTSP定义了一对多应用程序如何有效地经过IP网络传送多媒体数据。RTSP提供了一个可扩展框架,数据源能够包括实时数据与已有的存储的数据。该协议目的在于控制多个数据发送链接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。
RTSP语法和运做跟HTTP/1.1相似,但并不特别强调时间同步,因此比较能容忍网络延迟。代理服务器的缓存功能也一样适用于RTSP,而且由于RTSP具备从新导向功能,可根据实际负载状况来切换提供服务的服务器,以免过大的负载集中于同一服务器而形成延迟。
三、RTP(Real-time Transport Protocol,实时传输协议)
RTP是针对多媒体数据流的一种传输层协议,详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议经常使用于流媒体系统(配合RTCP协议),视频会议和一键通系统(配合H.323或SIP),使它成为IP电话产业的技术基础。
RTP是创建在UDP协议上的,常与RTCP一块儿使用,其自己并无提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
RTP 并不保证传送或防止无序传送,也不肯定底层网络的可靠性,只管发送,无论传输是否丢包,也无论接收方是否有收到包。RTP 实行有序传送,RTP中的序列号容许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,如在视频解码中,就不须要顺序解码。
四、RTCP(Real-time Transport Control Protocol,实时传输控制协议)
RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。RTCP和RTP一块儿协做将多媒体数据打包和发送,按期在多媒体流会话参与者之间传输控制数据。
RTCP的主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体链接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。网络应用程序能够利用RTCP所提供的信息来提升服务质量,好比限制流量或改用压缩比小的编解码器。