1、禁播、隐藏、审核等;一个完整直播 app 原理直播原理:把主播录制的视频,推送到服务器,在由服务器 分发给观众观看直播环节:推流端(采集、美颜处理、编码、推流)、服务 端处理(转码、 录制、截图、鉴黄) 、播放器(拉流、解码、 渲染)、互动系统(聊天室、礼物系统、赞) 一个完整直播 app 实现流程1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、 8.播放、 9.聊天互动 一个完整直播 app 架构 一个完整直播 app 技术点 一、流媒体(直播需要用到流媒体)?流媒体开发:网络层(socket或st)负责传输,协议层(rtmp或his) 负责网络打包,封装层(
2、flv、ts)负责编解码数据的封装, 编码层(h.264和aac)负责图像,音频压缩。 帧 : 每帧代表一幅静止的图像GOP: ( Group of Pictures )画面组,一个 GOP就是一组连续的画面,每个画面都是一帧,一个GOP就是很多帧的集 合 直播的数据,其实是一组图片,包括I帧、P帧、B帧, 当用户第一次观看的时候,会寻找 I帧,而播放器会到服务器寻找到最近的I帧反馈给用户。因此, GOP Cache增加了端到端延迟,因为它必须要拿到 最近的 I 帧GOP Cache的长度越长,画面质量越好码率:图片进行压缩后每秒显示的数据量。帧率:每秒显示的图片数。影响画面流畅度,与画面流畅
3、 度成正比:帧率越大,画面越流畅;帧率越小,画面越 有跳动感。由于人类眼睛的特殊生理结构,如果所看画面之帧率 高于16的时候,就会认为是连贯的,此现象称之 为视觉暂留。并且当帧速达到一定数值后,再增 长的话,人眼也不容易察觉到有明显的流畅度提 升了。分辨率: (矩形 )图片的长度和宽度,即图片的尺寸压缩前的每秒数据量:帧率X分辨率(单位应该是若干个字 节)压缩比 :压缩前的每秒数据量 /码率 (对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量 越差。) 视频文件格式: 文件的后缀, 比如 .wmv,.mov,.mp4,.mp3,.avi, ? 主要用处,根据文件格式,系统会自
4、动判断用什么软件打开, 注意 : 随意修改文件格式,对文件的本身不会造成太大的影响,比如把avi改成mp4,文件还是avi. 视频封装格式:一种储存视频信息的容器,流式封装可以有TS、FLV等,索引式的封装有 MP4,M0V,AVI等, 主要作用:一个视频文件往往会包含图像和音频,还 有一些配置信息 (如图像和音频的关联,如何解码 它们等 ):这些内容需要按照一定的规则组织、封 装起来 . 注意:会发现封装格式跟文件格式一样,因为一般视 频文件格式的后缀名即采用相应的视频封装格式 的名称 ,所以视频文件格式就是视频封装格式。视频封装格式和视频压缩编码标准:就好像项目工程和编 程语言, 封装格式
5、就是一个项目的工程, 视频编码方式 就是编程语言,一个项目工程可以用不同语言开发。 二、直播所用到的基础知识:1.采集视频、音频1.1采集视频、音频编码框架AVFoundation:AVFoundation 是用来播放和创建实时的视听 媒体数据的框架,同时提供 Objective-C 接口来操作这些视听 数据,比如编辑,旋转,重编码1.2视频、音频硬件设备CCD: 图像传感器: 用于图像采集和处理的过程,把图像 转换成电信号。 拾音器 : 声音传感器: 用于声音采集和处理的过程,把声 音转换成电信号。音频采样数据:一般都是PCM格式视频采样数据:一般都是YUV,或RGB格式,采集到的原始音视频
6、的体积是非常大的, 需要经过压缩技术处理来提 高传输效率2.视频处理(美颜,水印)视频处理原理:因为视频最终也是通过 GPU, 帧一帧渲染 到屏幕上的,所以我们可以利用 OpenGL ES,对视频帧进行 各种加工,从而视频各种不同的效果,就好像一个水龙头流 出的水,经过若干节管道,然后流向不同的目标现在的各种美颜和视频添加特效的 app都是利用GPUImage这个框架实现的。视频处理框架 GPUImage : GPUImage 是一个基于 OpenGL ES 的一个强大 的图像 /视频处理框架 ,封装好了各种滤镜同时也可以编 写自定义的滤镜 ,其本身内置了多达 120多种常见的滤 镜效果。 ?
7、OpenGL:OpenGL (全写 Open Graphics Library)是个定义了 一个跨编程语言、 跨平台的编程接口的规格, 它用于三 维图象(二维的亦可)。OpenGL是个专业的图形程序 接口,是一个功能强大,调用方便的底层图形库。OpenGL ES:OpenGL ES (OpenGL for Embedded Systems)是OpenGL三维图形 API的子集,针对手机、 PDA和游戏主机等嵌入式设备而设计。3.视频编码解码3.1视频编码框架 FFmpeg:是一个跨平台的开源视频框架 ,能实现如视频编码解码,转码 ,串流 ,播放等丰富的功能。其支持的视频格式 以及播放协议非常丰
8、富 ,几乎包含了所有音视频编解码、 封装格式以及播放协议。 -Libswresample: 可以对音频进行重采样 ,rematrixing 以及转换采样格式等操 作。 -Libavcodec: 提供了一个通用的编解码框架 ,包含了许多视频,音频,字幕流 等编码/解码器。 -Libavformat: 用于对视频进行封装 /解封装。 -Libavutil: 包含一些共用的函数 ,如随机数生成 ,数据结构,数学运算等。 -Libpostproc: 用于进行视频的一些后期处理。 -Libswscale: 用于视频图像缩放 ,颜色空间转换等。 -Libavfilter: 提供滤镜功能。 X264: 把视
9、频原数据 YUV 编码压缩成 H.264 格式 VideoToolbox:苹果自带的视频硬解码和硬编码 API,但是在iOS8之后才开放。AudioToolbox: 苹果自带的音频硬解码和硬编码 API3.2视频编码技术 视频压缩编码标准: 对视频进行压缩 (视频编码 )或者解压缩(视频解码)的编码技术,比如MPEG, H.264,这些视频编码技术是压缩编码视频的 ? 主要作用 :是将视频像素数据压缩成为视频码流, 从而 降低视频的数据量。如果视频不经过压缩编码的 话,体积通常是非常大的,一部电影可能就要上 百G的空间。 注意 :最影响视频质量的是其视频编码数据和音频编码数据,跟封装格式没有多
10、大关系 ?MPEG: 一种视频压缩方式,它采用了帧间压缩,仅存储连 续帧之间有差别的地方 ,从而达到较大的压缩比 ?H.264/AVC: 种视频压缩方式,采用事先预测和与 MPEG中 的P-B帧一样的帧预测方法压缩,它可以根据需要产生 适合网络情况传输的视频流 ,还有更高的压缩比,有更 好的图象质量 ? 注意1:如果是从单个画面清晰度比较, MPEG4有优势;从动作连贯性上的清晰度, H.264有优势 注意 2:由于 264的算法更加复杂, 程序实现烦琐, 运行它需要更多的处理器和内存资源。因此,运行 264 对系统要求是比较高的。 注意 3:由于 264的实现更加灵活, 它把一些实现留给了厂
11、商自己去实现,虽然这样给实现带来了很多好 处,但是不同产品之间互通成了很大的问题,造 成了通过 A 公司的编码器编出的数据,必须通过 A 公司的解码器去解这样尴尬的事情 ? H.265/HEVC: 一种视频压缩方式 ,基于 H.264 ,保留原来的某 些技术,同时对一些相关的技术加以改进, 以改善码流、 编码质量、 延时和算法复杂度之间的关系, 达到最优化 设置。 H.265 是一种更为高效的编码标准,能够在同等画质 效果下将内容的体积压缩得更小,传输时更快更 省带宽 I帧:(关键帧)保留一副完整的画面,解码时只需要本帧数据就可以完成(因为包含完整画面) ? P帧:(差别帧)保留这一帧跟之前帧
12、的差别, 解码时需要用之 前缓存的画面叠加上本帧定义的差别,生成最终画面。(P帧没有完整画面数据,只有与前一帧的画面差别的 数据) ?B帧:(双向差别帧)保留的是本帧与前后帧的差别,解码 B帆 不仅要取得之前的缓存画面, 还要解码之后的画面, 通 过前后画面的与本帧数据的叠加取得最终的画面 压缩率高,但是解码时 CPU会比较累? 帧内( Intraframe )压缩 : 当压缩一帧图像时,仅考虑本帧的 数据而不考虑相邻帧之间的冗余信息 ,帧内一般采用有 损压缩算法 ?帧间( Interframe )压缩:时间压缩( Temporal compression ), 它通过比较时间轴上不同帧之间的
13、数据进行压缩。 帧间 压缩一般是无损的 ? muxing (合成):将视频流、音频流甚至是字幕流封装到 一个文件中 (容器格式( FLV ,TS) ),作为一个信号进 行传输。3.3音频编码技术AAC , mp3 :这些属于音频编码技术,压缩音频用3.4码率控制多码率 :观众所处的网络情况是非常复杂的,有可能是 WiFi ,有可能4G、3G、甚至2G,那么怎么满足多方需求呢?多搞 几条线路,根据当前网络环境自定义码率。列如:常常看见 视频播放软件中的 1024, 720,高清,标清,流畅等,指的 就是各种码率。3.5 视频封装格式TS : 一种流媒体封装格式,流媒体封装有一个好处,就是 不需要
14、加载索引再播放,大大减少了首次载入的延迟, 如果片子比较长,mp4文件的索引相当大,影响用户体 验?FLV: 一种流媒体封装格式 ,由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能 ,因此 FLV格式成为了当今主流视频格式4.推流4.1数据传输框架librtmp: 用来传输 RTMP 协议格式的数据4.2流媒体数据传输协议RTMP:实时消息传输协议,Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,因为 是开放协议所以都可以使用了。chunk: 消息包 RTMP 协议用于对象、视频、音频的传输。 这个协议建立在TCP协议或者轮询HTTP协议之上。 RTMP 协议就像一个用来装数据包的容器,这些数据可以是 FLV 中的视音频数据。 一个单一的连接可以 通过不同的通道传输多路网络流,这些通道中的 包都是按照固定大小的包传输的5.流媒体服务器
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1