随着各种盒子的涌现,高清的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分享数据
在整个数据层取已生产的数据,目的是分享给其它用户,他不影响序列,不影响游标,不影响状态
按以上设计思路,设计了一个环形队列,经测试,简单大方,实用可靠
请大牛斧正