From 5e85a7e80764e1a1eae39c8ce9bafed29d8773a9 Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期二, 23 七月 2019 19:57:27 +0800 Subject: [PATCH] 增加支持推流的代码,并替换librtspclient.so --- csrc/wrapper.cpp | 29 ++++++++++++++++++++++++++++- 1 files changed, 28 insertions(+), 1 deletions(-) diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp index ec891ab..06eff0e 100644 --- a/csrc/wrapper.cpp +++ b/csrc/wrapper.cpp @@ -218,6 +218,9 @@ pkt.id = id++; } pkt.data = data; + if(data != nullptr) { + cacheAVPacket(data->getAVPacket()); + } run_worker(in.get(), pkt); if(!data){ @@ -334,6 +337,30 @@ auto p = list_pic_.front(); *data = p.data; *w = p.w; *h = p.h; list_pic_.pop_front(); + } + + void Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){ + std::lock_guard<std::mutex> l(mutex_avpkt_); + if(list_avpkt_.empty()){ + return; + } + auto pkt = list_avpkt_.front(); + *key = pkt.flags & AV_PKT_FLAG_KEY; + *size = pkt.size; + *pktData = (unsigned char *)malloc(*size); + memcpy(*pktData, pkt.data, pkt.size); + + list_avpkt_.pop_front(); + } + void Wrapper::cacheAVPacket(const AVPacket &pkt){ + std::lock_guard<std::mutex> l(mutex_pic_); + while(list_avpkt_.size() > 10){ +// printf("cacheAVPacket drop packets!!!!!!!!!!\n"); + for(int i = 0; i < 5; i++){ + list_avpkt_.pop_front(); + } + } + list_avpkt_.emplace_back(pkt); } void Wrapper::run_worker(ffwrapper::FormatIn *in, avpacket &pkt){ @@ -523,7 +550,7 @@ } *size = pkt.size + extradata_size; *out = (unsigned char *)malloc(*size); - + memcpy(*out, extra, extradata_size); memcpy(*out + extradata_size, pkt.data, pkt.size); -- Gitblit v1.8.0