首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    P2P技术原理及应用[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。 P2P技术原理及应用 作 者:金海 廖小飞 摘要:对等网络(P2P)有3种主要的组织结构:分布式哈希表(DHT)结构、树形结构、网状结构。P2P技术已经延伸到几乎所有的网络应用领域,如分布式科学计算、文件共享、流媒体直播与点播、语音通信及在线游戏支撑平台等方面。现在人们已经开始将重心转入到覆盖层网络的节点延时聚集研究、覆盖网之间(Inter-Overlay)优化研究、P2P支撑平台研究以及P2P安全研究等方面。 关键词:对等网络;分布式哈希表;覆盖层网络 Abstract:ThePeer-to-peer(P2P)network has three main structures: Distributed Hash Table (DHT) structure, tree structure, and mesh structure. P2P technology has been extended to almost all areas of network applications, including distributed scientific computing, file sharing, streaming media on-demand and live broadcast, voice communications, and online gaming support platform. Now, study areas such as node latency aggregation for overlay network, Inter-Overlay optimization, P2P supporting platform, and P2P security are receiving more attention. Keywords:P2P;distributedHash table; overlay network 1 P2P技术原理 什么是对等网络(P2P)技术?P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式。在C/S模式中,数据的分发采用专门的服务器,多个客户端都从此服务器获取数据。这种模式的优点是:数据的一致性容易控制,系统也容易管理。但是此种模式的缺点是:因为服务器的个数只有一个(即便有多个也非常有限),系统容易出现单一失效点;单一服务器面对众多的客户端,由于CPU能力、内存大小、网络带宽的限制,可同时服务的客户端非常有限,可扩展性差。P2P技术正是为了解决这些问题而提出来的一种对等网络结构。在P2P网络中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。这样,庞大的终端资源被利用起来,一举解决了C/S模式中的两个弊端。 P2P网络有3种比较流行的组织结构,被应用在不同的P2P应用中。 (1)DHT结构 分布式哈希表(DHT)[1]是一种功能强大的工具,它的提出引起了学术界一股研究DHT的热潮。虽然DHT具有各种各样的实现方式,但是具有共同的特征,即都是一个环行拓扑结构,在这个结构里每个节点具有一个唯一的节点标识(ID),节点ID是一个128位的哈希值。每个节点都在路由表里保存了其他前驱、后继节点的ID。如图1(a)所示。通过这些路由信息,可以方便地找到其他节点。这种结构多用于文件共享和作为底层结构用于流媒体传输[2]。 (2)树形结构 P2P网络树形结构如图1(b)所示。在这种结构中,所有的节点都被组织在一棵树中,树根只有子节点,树叶只有父节点,其他节点既有子节点也有父节点。信息的流向沿着树枝流动。最初的树形结构多用于P2P流媒体直播[3-4]。 (3)网状结构

    01

    Go语言实现的流媒体服务器开发框架

    市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称Flash Communication Server),后来改名为FMS(全称Flash Media Server),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻的认识。当时本人痴迷C#,于是乎在业余时间对crtmpServer的代码进行移植,用C#仿照着写了一遍取名为csharprtmp,并且适当的增强了一些功能,于是对rtmp协议了如指掌。后来Adobe推出了RTMFP协议,是一种p2p协议,十分节省带宽。我就又开始研究一款名为OpenRTMFP的开源项目,后来该项目改名为MonaServer。我在起基础上进行了扩展,实现了一些例如录制flv,shareObject等原本FMS有的功能。后开发出了HTML5直播技术(现在命名为Jessibuca,尚未开源),采用的传输协议就是WebSocket传输裸的视频流的方式,属于私有协议。而Server当时就使用的MonaServer。但当时遇到一个问题,C++的内存泄漏问题,这个一直没有很好的解决。遂决定放弃使用MonaServer转而使用srs,而srs要用一个很简单的go写的小程序将http-flv转换成WebSocket的Flv来适配我的Jessibuca,感觉最好能直接修改srs来实现这个功能。对srs的源码研究了一小段时间后放弃了,因为C++代码过于难写,容易出现bug。后来转而使用golang写的gortmp作为server,同样对其进行了扩展,而且进展十分顺利,golang的开发效率令人惊叹,而且其协程的特性很完美的处理了流媒体服务器的并发的场景。所以使用golang写的流媒体服务器项目很多,github上随便一搜就有很多,比如livego、joy4等。期间还接触到一位使用Node.js实现的流媒体服务器Node Media Server,我也和作者交流了许多,收益良多。

    02

    开放式缓存

    开放式缓存是由流媒体视频联盟开发的一个开放的、非专有的架构。简单地说开放式缓存是现有方法的扩展,用于传递互联网内容,可以使用 ISP 网络“最后一英里”的服务器进行传递,开放式缓存架构如图 1 所示。图的右侧是传统互联网流媒体内容来源,无论是来自简单地馈送到互联网上的 CDN, 还是直接连接到 ISP 网络的 CDN, 这是当今典型的流媒体内容来源。开放式缓存的作用是它有一系列规范和 API,在左侧看到的服务器基本上位于 ISP 网络的最后一英里处,可以通过这些现有方法传输内容。最终用户无论是无线或有线宽带接入或移动设备,当他们从内容提供商那里获取内容时,他们将被重定向到位于 ISP 网络内的开放式缓存。

    02

    SkeyeRTSPLive传统视频监控互联网+实现利器解决方案

    随着互联网的发展,传统安防行业已不再满足于仅仅通过一台PC机器,或者一台NVR接入摄像机源进行录像和监控的基本要求,人们迫切的需要利用目前相当便利的网络环境,以便能实现随时随地的观看到适应各种网络环境和各种终端设备的低延时的音视频视频监控,录像取证和应急处理,而不再受到时间和地域的限制。同样,对于互联网服务,PC电脑也不再是唯一选择,智能手机、平板电脑、特定的移动终端等都是可选择的用户终端硬件方式;因此,我们需要一款能将安防协议,电视广播协议以及其他各种格式的流媒体协议接入到互联网上来,通过一种统一格式的协议进行多平台多终端直播。

    01

    流媒体生态系统的分布式请求追踪

    在流媒体视频世界中,慢启动、低码率、高失速率(stall rate)和播放失败可谓是四大“世界末日”,无论这四个中的哪一个发生都会导致糟糕的用户体验。当问题发生的时候,找到根本原因是十分重要的,可能是播放器的问题,也可能是缓冲算法或比特率选择的问题,或者是内容编码或打包的问题。为此,流媒体视频联盟发布了端到端工作流监控的最佳实践,这份文档中提出跨流媒体视频工作流的级联效应可以通过多点监控来观察记录和相互分离,这意味着从各个点(CDN、播放器、源或编码器)收集数据,然后将这些数据整合在一起。然而这些数据往往是孤立的,即使您可以尝试以某种方式连接它,那些从中派生的孤立的日志和指标通常也不足以驱动 QOE 或以真正有效的方式解决问题。

    01

    MP4大文件虚拟HLS分片技术,避免服务器大量文件碎片

    对于大家经常见到和使用到的普通MP4来说,作为电影、电视文件的存储容器,是很好的,不过对于流媒体点播来说,最大的缺点就是它的媒体信息和关键帧索引都集中存放在moov box中,而导致越大的文件,moov box越大,对播放器来说,获取不到moov box,根本无从解码,所以就导致MP4文件点播,需要缓冲很久,加载头部数据。当然常见解决方案,就是文件切分,把大的MP4文件,切为小一点的MP4文件,这样每块的MP4的加载就会快很多,这个也是很多视频网站的解决方式,这样的切分也还好,分片数量不算很多。然而到了HLS时代,为了支持HLS协议,就需要把大的MP4文件,都转换为了更小的HLS-TS分片文件,这就出现问题了,服务器太多碎片一样的TS文件,难以管理,也影响性能。怎么解决呢?那就是虚拟HLS分片技术。

    013
    领券