随着各种盒子的涌现,高清的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分享数据
在整个数据层取已生产的数据,目的是分享给其它用户,他不影响序列,不影响游标,不影响状态
按以上设计思路,设计了一个环形队列,经测试,简单大方,实用可靠
请大牛斧正
一种用于直播缓冲的环形队列设想
原创wx5eb55b1d0e873 ©著作权
©著作权归作者所有:来自51CTO博客作者wx5eb55b1d0e873的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Linux文件锁flock
下一篇:无聊试试各牛B语言: 求回文数
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一种极致性能的缓冲队列
为了追求极致性能,拼了。
数据 线程安全 环形队列 -
环形缓冲区:环形缓冲队列学习
项目中需要线程之间共享一个缓冲FIFO队列,一个线程往队列中添数据,另一个线程取数据(经典的生产者-消费者问题)。
数据一致性 数据 数组 结点 #endif -
解除头文件环形依赖的一种途径
解除C++头文件环形包含的方法,主要用声明替换包含的头文件。
C++ 职场 休闲 头文件 -
CycleMLP:一种用于密集预测的mlp架构
CycleMLP由香港大学、商汤科技研究院和上海人工智能实验室共同开发,在2022年ICLR上发布。MLP-Mixer, ResMLP和gML
深度学习 人工智能 计算机视觉 神经网络 transformers