From be9c1d1f659b0ff31f656424c478e83a4f7c53b5 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期五, 20 九月 2019 11:44:19 +0800
Subject: [PATCH] update ffmpeg

---
 csrc/buz/recorder.cpp |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/csrc/buz/recorder.cpp b/csrc/buz/recorder.cpp
index af5a1fc..86afe89 100644
--- a/csrc/buz/recorder.cpp
+++ b/csrc/buz/recorder.cpp
@@ -34,6 +34,7 @@
         ,func_rec_info_(nullptr)
         ,thrd_(nullptr)
         ,error_occured_(false)
+        ,audio_(false)
         {
             // logIt("RECODER ID: %s", id_.c_str());
         }
@@ -59,7 +60,7 @@
             
         }
 
-        int Recorder::init_writer(){
+        int Recorder::init_writer(const bool audio){
             if (out_) {
                 delete out_;
             }
@@ -69,10 +70,18 @@
                 return -1;
             }
 
-            out_ = new FormatOut(in_->getStream(), "mp4");
+            out_ = new FormatOut(in_->getFPS(), "mp4");
+            AVStream *vs = in_->getStream(0);
+            AVStream *as = in_->getStream(1);
+            if (!vs) return -1;
+            if (audio && !as) logIt("there is no audio");
+            
+            std::vector<AVStream*> in;
+            in.push_back(vs);
+            if (audio && as) in.push_back(as);
 
             file_path_ = dir_ + "/" + sole::uuid4().base62() + ".mp4";
-            auto ret = out_->JustWriter(in_->getStream(), file_path_.c_str());
+            auto ret = out_->JustWriter(in, file_path_.c_str());
             if (ret){
                 return 0;
             }
@@ -162,10 +171,10 @@
             end_writer();
         }
 
-        int Recorder::Run(const char* output, const int mind, const int maxd){
+        int Recorder::Run(const char* output, const int mind, const int maxd, const bool audio){
 
             dir_ = output;
-            int ret = init_writer();
+            int ret = init_writer(audio);
             if(ret != 0){
                 logIt("recorder init writer error");
                 return -1;
@@ -177,6 +186,8 @@
                 minduration = fps * mind;
                 end_frame = minduration;
             }
+
+            audio_ = audio;
 
             // logIt("minduration %d maxduration %d curduration %d", minduration, maxduration, end_frame);    
 
@@ -221,6 +232,10 @@
 
             if(id_frame_ == -1){
                 //wait I 
+                if (!audio_ && in_->isAudioPkt(pkt.data->getAVPacket())){
+                        return 0;
+                }
+
                 if (list_pkt_.empty()) {
                     AVPacket &avpkt = pkt.data->getAVPacket();
                     if (!(avpkt.flags & AV_PKT_FLAG_KEY)){
@@ -249,6 +264,9 @@
             bool i = false;
             for (auto &p : lst){
                 if (!i){
+                    if (!audio_ && in_->isAudioPkt(p.data->getAVPacket())){
+                        continue;
+                    }
                     AVPacket &avpkt = p.data->getAVPacket();
                     if (!(avpkt.flags & AV_PKT_FLAG_KEY)){
                         continue;

--
Gitblit v1.8.0