随着各种盒子的涌现,高清的P2P直播研究开始有些返潮;
在技术上,P2P直播分为几大块,一是资源获取,二是资源的缓冲设计,三是用户间的分发、交互处理,四是播放和呈现
其中,二三比较关键,设计的好坏决定了最终效果;
出于对P2P研究的爱好,一直关注这一块的优化设计,参考的文献也较多(此处省略各种大牛文献列表);
网上充斥着各种环形队列的设计理论,个人感觉写得太高大上了,不是从一个码农真正理解的角度去写
参考tvants的缓冲设计,提出一个类似的环形队列
状态 : #已生产  *未生产
---------------------------------------------------------------------------
状态 |#    |#        |*       |#     |#       |#      |*        |*        |n 
---------------------------------------------------------------------------
游标 |       |         |         |        |^       |        |        |          |
---------------------------------------------------------------------------
序列 |1     |2       |3       |4      |5       |6      |7      |8        |n   
---------------------------------------------------------------------------
数据 |0x01 |0x03 |0x5d |0x24 |0x56 |0x11 |0x55 |0x1F | .....

数据进行分块,每一块为固定大小(如64k)
数据层按seq进行存入与取出(环形存取)

消费者(consumer)
    用于直播播放
    顺序消费,按照直播流的码率进行顺序消费,被消费数据的状态可以是已生产的块,也可以是未生产的块
    消费未生产的块时,视频画面可能会黑屏或花屏
生产者(producer)
    P2P下载数据
    乱序生产,生产者生产消费流标之后的数据,可以乱序多线程生产,但越靠近游票的SEQ生产的优化级越高
观察者(peeker)
    P2P分享数据
    在整个数据层取已生产的数据,目的是分享给其它用户,他不影响序列,不影响游标,不影响状态

按以上设计思路,设计了一个环形队列,经测试,简单大方,实用可靠
请大牛斧正