LinuxC/C++编程基础(33) 视频包缓存的实现(续1)
来源:互联网 发布:3d蓝光网络机顶盒 编辑:程序博客网 时间:2024/05/29 19:45
相关结构的定义,见前一篇文字:http://blog.csdn.net/linyanwen99/article/details/8485475
一.updateVideoCache方法的实现,如下:
void updateVideoCache( VideoPkt *spProto) {
Poco::SharedPtr<VideoPkt> pProto(spProto);
VideoUidMap::Iterator itr = VideoUidMap.find(pProto->_from);//查找连接对象
if(itr == VideoUidMap.end()) {
if(VideoUidMap.size() < MAX_SPEAKERS) {
VideoSeqMap amap;
VideoUidMap.insert(std::make_pair(pProto->_from, amap));
itr = VideoUidMap.find(pProto->_from);
} else {
return;
}
}
VideoSeqMap seqMap = itr->second;
if(seqMap.find(pProto->_seq) == seqMap.end()) {
if(seqMap.size() == MAX_PKTS) {
seqMap.erase(itr->second.begin());
}
seqMap.insert(std::make_pair(pProto->_seq, pProto));
}
VideoSeqMap::iterator it = seqMap.find(pProto->_seq);
if(it != seqMap.begin() && (--it)->second->_seq != pProto->_seq - 2) {//根据视频包的序号判断前一个包是否丢失了
ReSendVoice reSendVoice(pProto->_from, pProto->_seq - 2);//如果丢失了,则直接重新请求
std::string packStr;
reSendVoice.serialTo(packStr);
sendData(MEDIA_UDP, packStr); //发送请求包
}
}
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8543267
- LinuxC/C++编程基础(33) 视频包缓存的实现(续1)
- LinuxC/C++编程基础(30) 视频包缓存的实现
- LinuxC/C++编程基础(18) 视频关键帧长度和宽度的解析(续)
- LinuxC/C++编程基础(5) 排序二叉树的实现
- LinuxC/C++编程基础(6) 堆排序的实现
- LinuxC/C++编程基础(9) 二叉查找树的实现
- LinuxC/C++编程基础(10) quicksort的简单实现
- LinuxC/C++编程基础(12) 红黑树的实现
- LinuxC/C++编程基础(36) Poco::BinaryReader的实现
- LinuxC/C++编程基础(37) Cumulus::BinaryReader的实现
- LinuxC/C++编程基础(1) 函数指针实现复数的加减乘除
- linuxc编程一站式学习(c基础)
- LinuxC/C++编程基础(17) 视频关键帧长度和宽度的解析
- linuxC编程基础
- LinuxC基础编程
- LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例
- LinuxC/C++编程基础(19) 不可复制类的原理及实现
- LinuxC/C++编程基础(4) 基于泛型实现vector
- 测试杀毒软件
- SQL Server 之 datalength函数
- POJ1011“木棒”终于解出来了
- Project Euler 54 Poker hands(模拟+hash)
- 把一元兑换成1分、2分、5分的硬币,有几种换法?
- LinuxC/C++编程基础(33) 视频包缓存的实现(续1)
- linux下LED驱动(转载)
- 正则表达式
- vc消息大全
- 层次分析法 插值与拟合
- Android中全屏或者取消标题栏
- 嵌入式开发第一天-----设置VMware实现fedora无线上网(IMUDGES)
- 递归算法详细分析-> C
- 类图关系详解