void Gb28181RTPSession::ProcessRTPPacket(const jrtplib::RTPSourceData &srcdat, const jrtplib::RTPPacket &rtppack)
{
// You can inspect the packet and the source's info here
//std::cout << "Got packet " << rtppack.GetExtendedSequenceNumber() << " from SSRC " << srcdat.GetSSRC() << std::endl;
if(rtppack.HasMarker())
{
Buf->Write2SingleBuf(rtppack.GetPayloadData(), rtppack.GetPayloadLength());
unsigned char* data = NULL;
unsigned int datalen = 0;
Buf->ReadFromSingleBuf(&data, &datalen);
for(std::list<std::tr1::weak_ptr<Gb28181RTPSessionSlot> >::iterator iter = m_WatcherS.begin(); iter!=m_WatcherS.end(); ++iter)
{
std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot = (*iter).lock();
if(Slot)
Slot->OnGetData(data, datalen);
}
}
else
{
Buf->Write2SingleBuf(rtppack.GetPayloadData(), rtppack.GetPayloadLength());
}
rtppack.GetExtendedSequenceNumber();
rtppack.GetPayloadData();
rtppack.GetPayloadLength();
rtppack.GetSSRC();
rtppack.HasMarker();
}
void Gb28181RTPSession::SetSlot(std::tr1::weak_ptr<Gb28181RTPSessionSlot> &Watcher)
{
m_WatcherS.push_back(Watcher);
}
void Gb28181RTPSession::UnsetSlot(std::tr1::weak_ptr<Gb28181RTPSessionSlot> &Watcher)
{
for(std::list<std::tr1::weak_ptr<Gb28181RTPSessionSlot> >::iterator iter = m_WatcherS.begin(); iter!=m_WatcherS.end(); ++iter)
{
std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot1 = (*iter).lock();
std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot2 = Watcher.lock();
if(Slot1==Slot2)
{
m_WatcherS.erase(iter);
break;
}
}
}
share_ptr的一点片段
最新推荐文章于 2022-04-23 12:43:23 发布