隆昌市住房和城乡建设厅网站,怎么查工程中标单位,网站相册优化,php连接wordpress数据库一、直播APP原理 二、直播APP架构 三、直播APP实现流程 四、流媒体开发 流媒体模块架构 流媒体相关基础知识 帧#xff1a;每一帧代表一幅静止的图像 GOP#xff1a;Group of Pictures#xff0c;画面组#xff0c;一个GOP就是一组连续的画面#xff0c;很多帧的集合 码率… 一、直播APP原理 二、直播APP架构 三、直播APP实现流程 四、流媒体开发 流媒体模块架构 流媒体相关基础知识 帧每一帧代表一幅静止的图像 GOPGroup of Pictures画面组一个GOP就是一组连续的画面很多帧的集合 码率比特率单位时间内视频或音频的数据量 帧率每秒显示的图片数量帧率越大画面越流畅。帧率大于16人眼就会认为是连贯的 压缩比压缩前的码率/压缩后码率 视频文件格式文件的后缀.wmv、.mp4、.mov、.avi 视频封装格式存储视频信息的容器流式封装TS、FLV、索引式封装MP4、MOV、AVI 五、直播基础知识、原理 1音视频采集 1.1 音视频采集编码框架 AVFoundation用于处理音频、视频和图像的捕获、播放、编辑和导出等功能提供一套强大的API接口来操作这些视听数据。 1.2 音视频硬件设备 CCD图像传感器用于图像采集和处理的过程把图像转换成电信号。 拾音器声音传感器用于声音采集和处理的过程把声音转换成电信号。 音频采样数据一般为PCM格式。 视频采样数据一般为YUV或RGB格式。YUV 主要用于视频压缩和传输通过减少色度分量的采样来实现较好的压缩效果而 RGB 主要用于图像处理和显示能够准确表示每个像素的颜色。 2视频处理美颜水印 视频处理原理视频是通过GPU一帧一帧渲染到屏幕上的所以我们可以利用OpenGL ES对视频帧进行各种加工从而视频各种不同的效果。美颜和视频添加特效可以利用GPUImage这个框架实现的。 GPUImageGPUImage是一个基于OpenGL ES的一个强大的图像/视频处理框架封装好了各种滤镜同时也可以编写自定义的滤镜。 OpenGLOpen Graphics Library是个定义了一个跨编程语言、跨平台的编程接口的规格它用于二维、三维图象。OpenGL是个专业的图形程序接口是一个功能强大调用方便的底层图形库。 OpenGL ESOpenGL for Embedded Systems是 OpenGL三维图形 API 的子集针对手机、PDA和游戏主机等嵌入式设备而设计。 3视频编码解码 3.1 视频编码框架 FFmpeg是一个跨平台的开源视频框架能实现视频编码、解码、转码、串流、播放等丰富 的功能。其几乎支持包含了所有音视频编解码、封装格式以及播放协议。 x264开源的高性能视频编码器把视频原数据YUV编码压缩成H.264格式。 VideoToolbox苹果自带的视频硬编解码API在iOS8之后才开放。 AudioToolbox苹果自带的音频硬编解码API在iOS8之后才开放。 3.2 视频编码技术 视频压缩编码标准对视频进行压缩或者解压缩的编码技术如MPEG、H.264。 主要作用将视频像素数据压缩成为视频码流从而降低视频的数据量。如果视频不经过压缩 编码的话体积通常是非常大的一部电影可能就要上百G的空间。 MPEG它采用了帧间压缩仅存储连续帧之间有差别的地方 从而达到较大的压缩比。 H.264/AVC采用事先预测和与MPEG中的P-B帧一样的帧预测方法压缩它可以根据需要产生适合网络情况传输的视频流还有更高的压缩比有更好的图像质量 。 MPEG和H.264对比如果是从单个画面清晰度比较MPEG4有优势从动作连贯性上的清晰度H.264有优势H.264的算法较复杂需要更多的处理器和内存资源。 H.265/HEVC基于H.264保留原来的某些技术同时对一些相关的技术加以改进以改善码流、编码质量、延时和算法复杂度之间的关系达到最优化设置。 H.265 是一种更为高效的编码标准能够在同等画质效果下将内容的体积压缩得更小传输时更快更省带宽。 H.264和H.265对比H.265 相对于 H.264 在压缩效率和视频质量方面有较大的优势尤其在高分辨率和大带宽环境下表现更为出色。然而由于 H.265 存在处理复杂度和兼容性问题。 直播的数据就是一组图片包括I帧、P帧、B帧。 用户第一次观看的时候播放器会到服务器寻找最近的I帧反馈给用户。 I帧关键帧保留一副完整的画面解码时只需要本帧数据就可以完成。 P帧差别帧保留这一帧跟之前帧的差别解码时需要用之前缓存的画面叠加上本帧定义的差别生成最终画面。P帧没有完整画面数据只有与前一帧的画面差别的数据 B帧双向差别帧保留的是本帧与前后帧的差别解码B帧不仅要取得之前的缓存画面还要解码之后的画面通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高但是解码时更加消耗CPU。 帧内压缩当压缩一帧图像时仅考虑本帧的数据而不考虑相邻帧之间的冗余信息。帧内一般采用有损压缩算法。 帧间压缩时间压缩它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的。 muxing合成将视频流、音频流甚至是字幕流封装到一个文件中容器格式FLV、TS作为一个信号进行传输。 3.3 音频编码技术 常见的音频编码格式MP3、AAC、Speex、Opux等。 特点 MP3 AAC Opus 压缩效率 中等 较高 非常高 音频质量 中等 较好 很好 支持比特率范围 较窄中等、较高 较窄中等、较高 广泛低、中、高 主要应用 音乐、广播等 各种音频应用 流媒体、视频会议 兼容性 非常高 高 相对较低 3.4 码率控制 多码率观众所处的网络情况是非常复杂的有可能是WiFi有可能5G、4G、甚至3G那么怎么满足多方需求呢多定义几条线路根据当前网络环境自定义码率。 例如高清标清流畅等指的就是各种码率。 3.5 视频封装格式 TS一种流媒体封装格式流媒体封装有一个好处就是不需要加载索引再播放大大减少了首次载入的延迟如果片子比较长mp4文件的索引相当大影响用户体验。而且两个TS片段可以无缝拼接播放器能连续播放。 FLV一种流媒体封装格式由于它形成的文件极小、加载速度极快使得在线观看视频文件成为可能因此FLV格式成为了当今主流视频格式。 4推流 4.1 数据传输框架 librtmp一个开源的 C 库用于实现 RTMP协议的客户端功能包括 RTMP 连接建立、握手过程、数据交互、音视频传输等。 4.2 流媒体数据传输协议 RTMPReal-Time Messaging Protocol实时消息传输协议由Adobe公司开发基于TCP 协议用于对象、视频、音频的传输。 RTMP工作原理 握手客户端和服务器之间进行握手以建立连接。握手过程中包括版本协商和密钥交换等步骤确保双方能够正常通信。 建立流客户端发送一个命令给服务器请求建立一个流Stream。一个流可以包含一个或多个音视频轨道。 数据交互客户端和服务器通过建立的流进行音视频数据的传输。RTMP 会将音视频数据分割成小的消息进行传输每个消息包含一个时间戳和有效负载。 控制信息RTMP 还支持发送控制信息用于控制音视频的播放、暂停、快进等操作。这些控制信息被封装在特定的消息类型中如 SetChunkSize、Play、Pause 等。 5流媒体服务器 5.1 常用服务器 NGINX-RTMP基于 Nginx 服务器的一个第三方模块支持直播和点播。 Microsoft Azure Media Services微软提供的云端流媒体解决方案。 腾讯云云直播Cloud Live、点播VOD、直播连麦RTC。 5.2 数据分发 CDNContent Delivery Network内容分发网络是一种分布式的网络架构它将内容缓存到离用户最近的节点服务器上可以帮助加速音视频内容的传输减少加载时间提高用户访问网站的响应速度和观看体验另外CDN 还能分担源站点的负载压力提高系统的可扩展性和稳定性。 CDN工作原理代理服务器相当于一个中介。例如请求流媒体数据时 5.3 CDN链路 传统CND链路——树形网络拓扑 Cache 系统是整个 CDN 系统中的成本所在设计树形结构可以最大化的节省 Cache 系统的资本投入。因为只有中心节点需要保持所有的 Cache 副本向下逐级减少到了边缘节点只需要少量的热点 Cache 就可以命中大部分 CDN 访问请求这样极大的降低了 CDN 网络的成本。 网状网络拓扑结构 直播业务是流式业务很少涉及到 Cache 系统播完就可以释放掉存储资源对于存储的投入相对非常低而且不要求存储在所有节点中只要保证数据可回溯即可。 用户的可选择链路变为无向图的指定两点间的所有路径数量非常大。 回源当有用户访问某一个URL的时候如果被解析到的那个CDN节点没有缓存响应的内容或者是缓存已经到期就会回源站去获取搜索。如果没有访问那么CDN节点不会主动去源站拿。 带宽在固定的时间可传输的数据总量 比如64位、800MHz的前端总线它的数据传输率就等于64bit×800MHz÷8(Byte)6.4GB/s。 QoS带宽管理限制每一个组群的带宽让有限的带宽发挥最大的效用。 集群、分布式、负载均衡由多台服务器以对称的方式组成一个服务器集合每台服务器都具有等价的地位都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术将外部发送来的请求均匀分配到对称结构中的某一台服务器上而接收到请求的服务器独立地回应客户的请求。解决大量并发访问服务问题。 6拉流 6.1 RTMP 1RTMP协议 RTMP协议是基于TCP长连接既可推流又可以拉流的协议地址是rtmp://开头的并且推流地址和播放地址是一样的高并发下可能会出现一些不稳定的问题所以一般只用作直播源推流、推流到CDN等场景。 2RTMP强制切片 强制切片也一定程度上保证了实时性有一定的弱网抵抗能力因为每个数据包都不会太大当数据包校验失败时重新发送的成本不会太大但合并数据包需要CPU的性能消耗。 6.2 HTTP-FLV 1HTTP-FLV协议 HTTP-FLV协议基于HTTP长连接可以看作是RTMP的HTTP版本与RTMP的工作原理相似延迟为1-3s比RTMP协议延迟略高HTTP-FLV协议一般只用作客户端拉流观看。 2HTTP-FLV播放 3HTTP-FLV流媒体播放器 4流行的方案 6.3 HLS 1HLS协议 HLS基于HTTP短连接一般只用于拉流观看但严格地说HLS协议并不是流式协议工作原理是通过HTTP协议下载静态文件HLS协议的文件由两部分组成一是多个几秒长度的ts碎片视频文件另一个是记录这些视频文件地址的m3u8索引文件这些静态文件都是直接写入磁盘的。 HLS观看地址是以https://开头.m3u8结尾的实际上这个地址就是索引文件地址客户端获取到索引文件后就可以下载对应的碎片视频并开始播放了由于HLS协议实际上是通过HTTP协议请求文件的且HLS相关文件是直接写入磁盘的所以不需要特殊的流媒体服务软件使用Nginx的HTTP服务就可以了网页加入HLS的js插件就可以播放了。 苹果设备是原生支持HLS协议的点播的情况也就是普通网络视频观看的场景下m3u8索引文件会记录所有的碎片视频文件地址。 2点播场景 HLS在点播的情况下优势更加明显由于HLS的相关文件是无状态的静态文件且每个文件的大小是有限的所以负载均衡、CDN加速的效果更佳明显HLS的点播视频会比mp4、FLV的视频更快的播放出来并且在加载中跳转视频也会更佳顺滑。 3直播场景 直播的场景下转码软件可以直接生成HLS相关文件到磁盘客户端通过HTTP服务下载文件即可另外可以在Nginx加入RTMP插件转码软件以及RTMP协议推流到Nginx再由Nginx生成HLS相关文件第2种方案对于前期研发和后期对接直播CND的过度更加顺滑。 4直播的HLS文件 直播场景下的HLS文件与点播有些不同视频流数据每几秒会打包成一个以ts为后缀的碎片视频文件每生成一个新的视频文件都会同步更新m3u8索引文件且碎片视频文件的个数是有上限的当达到上限后默认将最旧的视频文件删除且更新m3u8索引文件所以在直播的场景下客户端也需要不断定时重新获取m3u8索引文件。 5HLS协议的优缺点 HLS由于要生成静态文件延迟很大5-30s也可能会有1分钟延迟。 HLS的直播优势是ts视频碎片文件可以一直保留不删除不需要花额外的性能保存录像直播转点播、录播都是更加简单的只需要修改m3u8索引文件即可不需要重新花费性能编解码。 6二级索引 m3u8索引文件支持二级索引就是高清、标清、流畅、等多个观看地址可以整合到一个索引文件中播放器可以根据带宽自动切换不同的观看地址很多网页播放器的“自动”也是因为这个。 7缓解磁盘压力 由于HLS协议的视频文件、索引文件都是直接写入磁盘的如果长时间且多个直播流同时处理会造成磁盘写入压力过大机械磁盘可能出现磁盘损坏固态硬盘寿命衰减最好挂载一段内存空间作为HLS相关文件的写入位置。 挂载一段内存空间作为写入位置 Linux命令mount -t tmpfs -o size10g tmpfs /data 把文件写入/data即可写入内存而非磁盘 重启数据会消失但可以做一些定时保存的措施 6.4 WebRTC 1WebRTC协议 WebRTC是一种点对点的视频/语音通话协议基于UDP建立通信后会不断的以流式发送数据延迟要比RTMP还要低1s内再一些交互型较高的直播场景例如直播带货。 2WebRTC服务器 Webrtc地址一般是webrtc:/开头的推流和拉流地址一般也是一样的它是点对点的协议用在直播中需要搭建WebRTC服务器。 例如一个基于 WebRTC 协议实现多方实时通讯。 6.5 RTSP RTSP实时流传输协议,定义了一对多应用程序如何有效地通过IP网络传送多媒体数据一般用在摄像头、监控等硬件设备的实时视频流观看、推送上。 RTSP协议有诸多优点TCP/UDP切换支持推流/拉流支持点播/直播但是Web领域一般不使用RTSP现代浏览器不支持播放。 7解码 7.1 解封装 Demultiplexing分离将复合音视频流(容器格式FLV、TS)中的多个单独的音频、视频、字幕或其他媒体流分离出来各自进行解码的过程。 7.2 音频编码框架 FDK-AAC出色的音频编解码器PCM音频数据和AAC音频数据互转高音质、低延迟。 7.3 解码方式对比 特点 硬解码 软解码 原理 利用专用的硬件解码器GPU 来解码视频数据 使用通用的软件算法CPU 来解码视频数据 性能 高性能播放流畅 性能较低在播放高分辨率、高比特率的视频时可能出现卡顿 解码速度 快 慢 资源消耗 CPU占用低 CPU占用较高 兼容性 较差受硬件平台限制 较好 适用场景 适用于资源有限的移动设备和嵌入式系统等 适用于处理能力较为强大的计算机或服务器等 8播放 ijkplayer基于FFmpeg开源多媒体框架的跨平台视频播放器。 简单易用支持跨平台良好的兼容性支持多种音视频格式的解码和播放编译配置可裁剪方便控制安装包大小支持硬件加速解码。 9互动系统 IMInstant Messaging即时通讯是一个实时通信系统允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。 腾讯云WNS的IM及时消息推送服务。