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
- 对于有回放或跨平台需求的,推荐使用HLS
HLS:由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。可实现流媒体的直播和点播,主要应用在iOS系统
7.解码
使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像/声音
涉及技术或协议:
- 一般对应的编码器都会带有相应的解码器,也有一些第三方解码插件等
8.播放
ijkplayer:一个基于FFmpeg的开源Android/iOS视频播放器
- API易于集成;
- 编译配置可裁剪,方便控制安装包大小;
- 支持硬件加速解码,更加省电
- 简单易用,指定拉流URL,自动解码播放.
9.聊天互动
IM:(InstantMessaging)即时通讯:是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流.
IM在直播系统中的主要作用是实现观众与主播、观众与观众之间的文字互动.
第三方SDK
- 腾讯云:腾讯提供的即时通讯SDK,可作为直播的聊天室
- 融云:一个比较常用的即时通讯SDK,可作为直播的聊天室
iOS直播类APP开发流程解析相关推荐
- iOS 直播类APP开发流程解析
1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CC ...
- iOS 直播类APP开发流程
(一) iOS 直播类APP开发流程分解: 1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1.数据采集: 摄像机及拾音器收集视频及音频数据,此时得 ...
- (转载)iOS直播类APP开发流程
转载自博主:iOS_developer_zhong,博客地址: http://blog.csdn.net/zhonggaorong/article/details/51483282 本文为大家分享了i ...
- iOS 直播类APP开发流程分解:
1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CC ...
- 分析一下,直播类app开发需要哪些技术
直播技术总结 直播总结 1.概述 关于直播类app开发的技术文章不少,成体系的不多.我们将用这篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播类 ...
- 直播类app开发,如何实现直播的相关功能
上篇文章完成了直播的简单业务,我们可以慢慢完善这个直播类app开发, 例如附近直播,直播礼物,直播回放, 当然直播类app开发的实际业务要比我说的复杂,博主这里提供一个思路 附近直播 现在直播类app ...
- 直播类app开发的开屏广告是怎样实现的
直播类app开发时,技术人员需要注意一个功能,那就是开屏广告,接下来就分析一下直播类app开发是怎样实现开屏广告的. 一) 开屏广告 效果如下 支持网络资源缓存策略 支持本地和网络6种类型广告 本地i ...
- 直播类app开发,实现一个进度条效果
进度条是很多软件中必须存在的效果,今天我们就看看直播类app开发实现的进度条效果. 效果&使用 图例分别为: 修改读条起点为y轴正方向 消失性读条 正常读条 使用: 1 在xml中添加控件 & ...
- 在线视频直播类app软件如何开发?
最近两年,要说手机APP开发最火的行业非视频直播APP莫属,不少企业通过直播视频手机软件获得了巨大的成功,也就使得后期不少企业进入视频直赔软件开发的行业,可是开发一个直播视频APP并不是那么简单的,虽 ...
最新文章
- 早在公元前五百年,孙子就参透了数据库分区的真谛
- MySQL索引类型一览 让MySQL高效运行起来
- 【IT职场生存手册】他山之石,可以攻玉【51CTO技术论坛】
- JSONAssert Spring Boot Test
- Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现
- opencv 读取CV_16U图像 c++
- Python基础——字符串、列表、元组
- 全国各省市县统计年鉴/中国环境统计年鉴/中国工业企业数据库/中国专利数据库/污染排放数据库
- java textarea 自动滚动条,textarea根据内容自动延伸,不显示滚动条
- 销售合同管理系统,发票统计。 Excel表格,自带公式,简单操作
- limeSurvey资料
- 超级超级实用的整个网页截图技巧
- Java3:数组和字符串
- 面试时我们应该问面试官什么问题?
- activity已经销毁判断
- C++对象的底层原理都在这儿了,还敢说学不会?
- 《ucore lab1 练习5》实验报告
- 平安科技:人工智能推动行业发展和变革
- 用Visio绘制switch-case流程图
- Protobuf自动反射消息类型的网络传输方案
热门文章
- 电脑照片太大怎么压缩?如何调整照片kb?
- java中to date_Java Date toInstant()用法及代码示例
- python中multiprocessing.Manger()支持类型
- android谷歌dns设置在哪,安卓手机怎么设置DNS Android手机修改DNS图文教程
- Mathorcup数学建模竞赛第六届-【妈妈杯】B题:车位分布的优化设计与评价(附一等奖获奖论文和matlab代码)
- VuePress 博客之 SEO 优化(一) sitemap 与搜索引擎收录
- java图片改变分辨率并保存
- 【机器学习入门到精通系列】OVR SVMs
- Oculus内下游戏报错,OVR40779122解决办法
- 国庆拥堵现象说明了什么?