文章目录

  • 直播APP流程技术
    • 1.音视频采集
    • 2.视频过滤
    • 3.音视频编码
    • 4.音视频推流
    • 5.流媒体处理数据
    • 6.拉流
    • 7.音视频解码
    • 8.播放
    • 9.聊天互动
  • 流媒体知识核心概念

直播APP流程技术


把主播录制的视频,推送到服务器,在由服务器分发给观众观看。

推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)

1.音视频采集


AVFoundation:是用来播放和创建实时的视听媒体数据的框架,同时提供Objective-C接口来操作这些视听数据,比如编辑,旋转,重编码

CCD:图像传感器: 用于图像采集和处理的过程,把图像转换成电信号。

拾音器:声音传感器: 用于声音采集和处理的过程,把声音转换成电信号。

音频采样数据:一般都是PCM格式

视频采样数据: 一般都是YUV,或RGB格式,采集到的原始音视频的体积是非常大的,需要经过压缩技术处理来提高传输效率

2.视频过滤


metal是iOS 的底层框架。GPUImage支持100多种滤镜,如果项目需要的滤镜,它没有。第三方框架不支持的时候,就需要自研或者基于GPUImage去自定义。
视频处理原理:因为视频最终也是通过GPU,一帧一帧渲染到屏幕上的,所以我们可以利用OpenGL ES,对视频帧进行各种加工,从而视频各种不同的效果,就好像一个水龙头流出的水,经过若干节管道,然后流向不同的目标。

现在的各种美颜和视频添加特效的app都是利用GPUImage这个框架实现的。
GPU主要是做一些复杂的大量的并行运算。
CPU主要是在逻辑运算上占优势。

视频处理的框架

GPUImage : GPUImage是一个基于OpenGL ES的一个强大的图像/视频处理框架,封装好了各种滤镜同时也可以编写自定义的滤镜,其本身内置了多达120多种常见的滤镜效果。

OpenGL:OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。

OpenGL ES:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。

openGL主要做图像处理。openCV主要做图像识别。

3.音视频编码




直播APP(实时播放)是不能用到B帧,但是小视频(下载完成后播放)的开发可以用到B帧,
硬编码:最主流的方式,硬件加速器。比如玩游戏特别需要好的显卡,显卡又分为独立显卡和集成显卡->GPU芯片
视频压缩编码标准:
对视频进行压缩(视频编码)或者解压缩(视频解码)的编码技术,比如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流程和相关技术介绍相关推荐

  1. iOS直播app原理

    一.个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通 ...

  2. iOS直播APP—原理篇

    原文:http://www.jianshu.com/p/bd42bacbe4cc 作者:@袁峥Seemygo 一.使用的三方SDK 直播:七牛云 即时通讯:环信 视频滤镜:GPUImage 二.直播环 ...

  3. 开发一个完整的iOS直播app必须技能

    今年,直播行业火了,当然也诞生了一大批网红,甚至明星也开始直播了,因此现在都要搞直播了!由于第一次接触,花了很多时间了解直播,目前整理了直播的原理(因为项目汇报的需要就整理了一下),现在只是展示一下从 ...

  4. (转)【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文链接:https://www.jianshu.com/p/bd42bacbe4cc [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](原理篇) ...

  5. 如何快速的开发一个完整的iOS直播app(原理篇)

    本文转自袁峥Seemygo的博客分享.觉得很不错.特意粘来给大家分享. 1.一个完整直播app功能(来自落影loyinglin分享) 1.聊天 私聊.聊天室.点亮.推送.黑名单等; 2.礼物 普通礼物 ...

  6. 如何快速开发一个完整的ios直播app

    如何快速开发一个完整的iOS直播app 一.个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形 ...

  7. 如何快速的开发一个完整的iOS直播app(美颜篇)

    1.前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主 ...

  8. 【如何快速的开发一个完整的iOS直播app】(美颜篇)

    前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲 ...

  9. 【如何快速的开发一个完整的iOS直播app】(采集篇)

    前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,首先需要采集主播的视频和音频,然后传入流媒体服务器,本篇主要讲解如何采 ...

最新文章

  1. ios架构篇-2 国际化多语言
  2. 聊聊Spring Boot中的优雅停机
  3. 2018年企业运维开发经典面试题
  4. Linux文件权限一共10位长度,分成四段,每段的含义
  5. 日本专家给出的存钱高招(图)
  6. JAVA正则表达式及常用类
  7. 【Servlet】web.xml中url-pattern的用法
  8. ibavformat.so.57: cannot open shared object file: No such file or directory
  9. 全国计算机二级c题库在线,全国计算机二级c语言考试题库
  10. 正则表达式随记(3)常用的正则表达式
  11. JPA中could not insert: 的解决办法
  12. Win11调整分区大小的方法有哪些?
  13. 基于新浪云的微信公众号开发配置过程
  14. 无人机云台电机用的是哪种?
  15. 杯子倒水问题 -python
  16. 银河麒麟V10操控系统Qt安装
  17. 小米扫地机器人充电座指示灯不亮_小米扫地机器人充电多久可以用 怎么充电?...
  18. WifiDisplay开启流程
  19. 如何学习IPv6安全
  20. i.mx6ull移植mosquitto gateway-bridge

热门文章

  1. java对外接口安全问题_怎么保证对外暴露接口的安全性(调用频率限制)
  2. C++STL容器的比较
  3. 浅谈四层交换机技术原理
  4. freeictclas java_天书般的ICTCLAS分词系统代码(一)
  5. Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by se
  6. 可以玩所有游戏的计算机配置,什么样的电脑配置才可以玩各种3A巨作游戏?
  7. 你知道PaaS平台的P有多少种写法?
  8. MFC 中 如何屏蔽Esc和Ente
  9. 康考迪亚大学 计算机科学,康考迪亚大学 Concordia University
  10. 【诺奖-1】2018年诺贝尔生理学或医学奖