本文最后更新于:2020年11月10日 晚上
流媒体协议
视频有客户端上传至服务器在由另一客户端下载播放的流程大致如下:客户端(采样、编码、推流)-服务器(接流、流处理、分发)-客户端(拉流、解码、播放)
视频传输过程中,数据量过大,需要进行压缩处理;常用的对视频流中图片的压缩方法有1、空间冗余;2、时间冗余;3、视觉冗余;4、编码冗余。
完整的视频流由很多帧图片组成,每一帧又分成多个片,每个片的信息都使用一个网络提取层单元(NALU)保存,最终组成一个NALU序列,为传输做准备
排列好的二进制流需要使用基于TCP的RTMP协议进行分块传输
当视频流推送到客户端时,客户端再通过RTMP协议拉取数据,读取chunk中的message,组合为NALU序列,再解码成视频格式播放
P2P协议
下载一个文件有HTTP和FTP两种方式,但这两种都是集中下载的方式,而 P2P 则换了一种思路,采取非中心化下载的方式;
P2P 两种,一种是依赖于 tracker 的,也即元数据集中,文件数据分散;另一种是基
于分布式的哈希算法,元数据和文件数据全部分散。
依赖tracker :
下载时,BT 客户端首先解析.torrent 文件得到 tracker 地址,再由 tracker 服务器将其他下载者(包括发布者)的 IP 提供给下载者。下载者再连接其他下载者,根据.torrent 文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,并分散了单个线路上的数据流量,因此减轻了服务器的负担。
去中心化网络(DHT):
Kademlia 协议是著名的DHT协议,在 DHT 网络里面,每一个 DHT node 都有一个 ID。这个 ID 是一个很长的串。每个 DHT node 都有责任掌握一些知识,也就是文件索引,每个 DHT node 使用哈希算法计算出需要保存的文件索引。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!