iOS直播类APP开发流程解析
ios直播类app开发流程解析
个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,cdn分发,即时通讯等技术,每一个技术都够学几年的。
一个完整直播app原理
把主播录制的视频,推送到服务器,在由服务器分发给观众观看。推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动(聊天室、礼物系统、赞)
一个完整直播app实现流程
1.采集视频、音频
avfoundation:是用来播放和创建实时的视听媒体数据的框架,同时提供objective-c接口来操作这些视听数据,比如编辑,旋转,重编码ccd:图像传感器: 用于图像采集和处理的过程,把图像转换成电信号。拾音器:声音传感器: 用于声音采集和处理的过程,把声音转换成电信号。音频采样数据:一般都是pcm格式视频采样数据: 一般都是yuv,或rgb格式,采集到的原始音视频的体积是非常大的,需要经过压缩技术处理来提高传输效率。
2.视频处理(美颜,水印)
视频处理原理:因为视频最终也是通过gpu,一帧一帧渲染到屏幕上的,所以我们可以利用opengl es,对视频帧进行各种加工,从而视频各种不同的效果,就好像一个水龙头流出的水,经过若干节管道,然后流向不同的目标。现在的各种美颜和视频添加特效的app都是利用gpuimage这个框架实现的。视频处理的框架
gpuimage : gpuimage是一个基于opengl es的一个强大的图像/视频处理框架,封装好了各种滤镜同时也可以编写自定义的滤镜,其本身内置了多达120多种常见的滤镜效果。opengl:opengl(全写open graphics library)是个定义了一个跨语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。opengl是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。opengl es:opengl es (opengl for embedded systems) 是 opengl三维图形 api 的子集,针对手机、pda和游戏主机等嵌入式设备而设计。
3.音视频编码解码
视频压缩编码标准:对视频进行压缩(视频编码)或者解压缩(视频解码)的编码技术,比如mpeg,h.264,这些视频编码技术是压缩编码视频的
mpeg:一种视频压缩方式,它采用了帧间压缩,仅存储连续帧之间有差别的地方 ,从而达到较大的压缩比h.264/avc:一种视频压缩方式,采用事先预测和与mpeg中的p-b帧一样的帧预测方法压缩,它可以根据需要产生适合网络情况传输的视频流,还有更高的压缩比,有更好的图象质量h.265/hevc:一种视频压缩方式,基于h.264,保留原来的某些技术,同时对一些相关的技术加以改进,以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。音频编码技术
aac,mp3:这些属于音频编码技术,压缩音频用
码率控制
多码率:观众所处的网络情况是非常复杂的,有可能是wifi,有可能4g、3g、甚至2g,那么怎么满足多方需求呢?多搞几条线路,根据当前网络环境自定义码率。
视频封装格式
ts : 一种流媒体封装格式,流媒体封装有一个好处,就是不需要加载索引再播放,大大减少了首次载入的延迟,如果片子比较长,mp4文件的索引相当大,影响用户体验flv: 一种流媒体封装格式,由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,因此flv格式成为了当今主流视频格式。
4.推流
推流,就是将采集到的音频,视频数据通过流媒体协议发送到流媒体服务器。
选择流媒体协议现在直播应用,采用rtmp协议居多,也有部分使用hls协议。
采用rtmp协议,就要看下它与流媒体服务器交互的过程,rtmp协议的默认端口是1935,采用tcp协议。并且需要了解flv的封装格式。
采用hls协议,因为涉及到切片,延时会比较大,需要了解ts流。
采集音视频数据做直播,数据的来源不可缺少,就是采集摄像头,麦克风的数据。
ios平台上采集音视频数据,需要使用avfoundation.framework框架,从capturesession会话的回调中获取音频,视频数据。
5.流媒体服务器
常用服务器
srs:一款国人开发的优秀开源流媒体服务器系统bms:也是一款流媒体服务器系统,但不开源,是srs的商业版,比srs功能更多nginx:免费开源web服务器,常用来配置流媒体服务器。
6.拉流
直播协议选择:
即时性要求较高或有互动需求的可以采用rtmp,rtsp对于有回放或跨平台需求的,推荐使用hlshls:由apple公司定义的用于实时流传输的协议,hls基于http协议实现,传输内容包括两部分,一是m3u8描述文件,二是ts媒体文件。可实现流媒体的直播和点播,主要应用在ios系统
7.解码
使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像/声音
涉及技术或协议:
一般对应的编码器都会带有相应的解码器,也有一些第三方解码插件等
8.播放
ijkplayer:一个基于ffmpeg的开源android/ios视频播放器
api易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电简单易用,指定拉流url,自动解码播放.
9.聊天互动
im:(instantmessaging)即时通讯:是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流.im在直播系统中的主要作用是实现观众与主播、观众与观众之间的文字互动.第三方sdk
腾讯云:腾讯提供的即时通讯sdk,可作为直播的聊天室
融云:一个比较常用的即时通讯sdk,可作为直播的聊天室
上一篇: iOS签名机制与证书介绍
下一篇: 我们小区有一个六岁男孩还没有上一年级