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