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