From 93f44a10e2e8942e57e62bb210a2ca7d206a51b7 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 24 九月 2019 11:26:44 +0800
Subject: [PATCH] add rec audio;

---
 csrc/worker/stream.cpp |   42 +++++++++++++++++++-----------------------
 1 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/csrc/worker/stream.cpp b/csrc/worker/stream.cpp
index 1828304..9fe11da 100644
--- a/csrc/worker/stream.cpp
+++ b/csrc/worker/stream.cpp
@@ -1,7 +1,11 @@
 #include "stream.hpp"
 
-#include "../ffmpeg/data/CodedData.hpp"
+extern "C"{
+#include <libavcodec/avcodec.h>
+}
+
 #include "../ffmpeg/format/FormatIn.hpp"
+#include "../ffmpeg/data/CodedData.hpp"
 
 namespace cffmpeg_wrap{
     stream::stream(ffwrapper::FormatIn *in, const int maxSize)
@@ -12,50 +16,42 @@
 
     stream::~stream(){
         std::lock_guard<std::mutex> locker(mutex_avpkt_);
-        list_avpkt_.clear();
+        list_pkt_.clear();
     }
 
-    int stream::SetPacket(std::shared_ptr<ffwrapper::CodedData> data){
+    int stream::SetPacket(std::shared_ptr<ffwrapper::CodedData> data, int64_t &id){
         if (data){
 
-            auto audio = streamRef_->isAudioPkt(data->getAVPacket());
             // 濡傛灉鍖呮槸闊抽鍖�,浣嗘槸涓嶄娇鐢ㄩ煶棰�,鐩存帴杩斿洖
-            if (!audio_ && audio){
+            if (!audio_ && streamRef_->isAudioPkt(&data->getAVPacket())){
                 return 0;
             }
             
             std::lock_guard<std::mutex> locker(mutex_avpkt_);
-            list_avpkt_.push_back(data);
+            list_pkt_.push_back({data, id});
             
-            while(list_avpkt_.size() > max_size_){
-                list_avpkt_.pop_front();
-                while(!list_avpkt_.empty()){
-                    auto &cache = list_avpkt_.front();
-                    AVPacket &avpkt = cache->getAVPacket();
-                    if (!(avpkt.flags & AV_PKT_FLAG_KEY)){
-                        list_avpkt_.pop_front();
-                    }else{
-                        break;
-                    }
-                }
+            while(list_pkt_.size() > max_size_/2*3){
+                list_pkt_.pop_front();
             }
-            return list_avpkt_.size();
+
+            return list_pkt_.size();
         }
         return 0;
     }
 
     void stream::GetPacket(unsigned char **pktData, int *size, int *key){
         std::lock_guard<std::mutex> l(mutex_avpkt_);
-        if(list_avpkt_.empty()){
+        if(list_pkt_.empty()){
             return;
         }
-        auto data = list_avpkt_.front();
-        auto pkt = data->getAVPacket();
+
+        auto data = list_pkt_.front();
+        list_pkt_.pop_front();
+
+        auto pkt = data.data->getAVPacket();
         *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();
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0