소스 검색

Change RemoteCtrl_h264.

yuchuli 3 년 전
부모
커밋
e409f739bc

+ 9 - 11
src/driver/driver_cloud_grpc_client_h264/grpcclient.cpp

@@ -569,22 +569,20 @@ void grpcclient::threadpicupload(int nCamPos)
             {
                 nalldatasize = nalldatasize + mpicbuf[nCamPos].mvectorframe[j].mDataSize;
             }
-            int nsendpacsize = (npacmax + 1)*sizeof(int) + nalldatasize;
+            int nsendpacsize = (npaccount)*sizeof(int) + nalldatasize;
             pstr_ptr = std::shared_ptr<char>(new char[nsendpacsize]);
-            int * pnpacheader = (int *)pstr_ptr.get();
-            *pnpacheader = npaccount;
-            for(j=0;j<npaccount;j++)
-            {
-                *(pnpacheader+j+1) = mpicbuf[nCamPos].mvectorframe[j].mDataSize;
-            }
-            std::cout<<"pac count "<<npaccount<<std::endl;
             char * pstrvalue = (char * )pstr_ptr.get();
-            pstrvalue = pstrvalue + (npacmax + 1)*sizeof(int);
+            int npos = 0;
             for(j=0;j<npaccount;j++)
             {
-                memcpy(pstrvalue,mpicbuf[nCamPos].mvectorframe[j].mpstrframedata.get(),mpicbuf[nCamPos].mvectorframe[j].mDataSize);
-                pstrvalue = pstrvalue + mpicbuf[nCamPos].mvectorframe[j].mDataSize;
+                int * psize = (int * )(pstrvalue + npos);
+                *psize = mpicbuf[nCamPos].mvectorframe[j].mDataSize;
+                npos = npos + sizeof(int);
+                memcpy(pstrvalue+ npos,mpicbuf[nCamPos].mvectorframe[j].mpstrframedata.get(),mpicbuf[nCamPos].mvectorframe[j].mDataSize);
+                npos = npos + mpicbuf[nCamPos].mvectorframe[j].mDataSize;
             }
+            std::cout<<"pac count "<<npaccount<<std::endl;
+
             for(j=0;j<npaccount;j++)mpicbuf[nCamPos].mvectorframe.erase(mpicbuf[nCamPos].mvectorframe.begin());
             nSize = nsendpacsize;
 //            pstr_ptr = mpicbuf[nCamPos].mvectorframe[0].mpstrframedata;

+ 42 - 8
src/driver/driver_cloud_grpc_server_h264/main.cpp

@@ -132,16 +132,50 @@ class UploadServiceImpl final : public iv::UploadThread::Service {
         int nFrameRate;
         int nres =gcumsgbuf.getPicData(request->strvin(),request->strquerymd5(),pstr_data,ndatasize,request->strclientid(), request->ncampos(),nPicTime,
                                        nPicLatency,nFrameRate);
- //       std::cout<<" reply pic : "<<nres<<std::endl;
-        response->set_nres(nres);
-        if(nres == 1)
+        if(nres == 0)
         {
-            response->set_ncampos(request->ncampos());
-            response->set_npictime(nPicTime);
-            response->set_xdata(pstr_data.get(),ndatasize);
-            response->set_npicframerate(nFrameRate);
-            response->set_npicuplatency(nPicLatency);
+            response->set_nres(nres);
+            return Status::OK;
+        }
+
+        std::vector<std::shared_ptr<char>> mvectorptr;
+        std::vector<int> mvectorsize;
+
+
+        int nallsize = 0;
+
+        int nsendframerate = nFrameRate;
+        int nsendpiclatency = nPicLatency;
+        int nsendPicTime = nPicTime;
+
+
+        while(nres == 1)
+        {
+            mvectorptr.push_back(pstr_data);
+            mvectorsize.push_back(ndatasize);
+            nallsize = nallsize + ndatasize;
+            nsendframerate = nFrameRate;
+            nsendpiclatency = nPicLatency;
+            nsendPicTime = nPicTime;
+            nres =gcumsgbuf.getPicData(request->strvin(),request->strquerymd5(),pstr_data,ndatasize,request->strclientid(), request->ncampos(),nPicTime,
+                                                   nPicLatency,nFrameRate);
         }
+        std::shared_ptr<char> pstr_send = std::shared_ptr<char>(new char[nallsize]);
+        unsigned int i;
+        char * pstrsend = pstr_send.get();
+        int npos = 0;
+        for(i=0;i<mvectorptr.size();i++)
+        {
+            memcpy(pstrsend + npos ,mvectorptr[i].get(),mvectorsize[i]);
+            npos = npos + mvectorsize[i];
+        }
+ //       std::cout<<" reply pic : "<<nres<<std::endl;
+        response->set_nres(1);
+            response->set_ncampos(request->ncampos());
+            response->set_npictime(nsendPicTime);
+            response->set_xdata(pstr_send.get(),nallsize);
+            response->set_npicframerate(nsendframerate);
+            response->set_npicuplatency(nsendpiclatency);
 
         return Status::OK;
   }

+ 18 - 13
src/tool/RemoteCtrl_h264/grpcpc.cpp

@@ -416,11 +416,11 @@ void grpcpc::threadpicdownload(int nCamPos)
             continue;
         }
 
-//        if(abs(xTime.elapsed() - nlastsend)<30)
-//        {
-//            std::this_thread::sleep_for(std::chrono::milliseconds(1));
-//            continue;
-//        }
+        if(abs(xTime.elapsed() - nlastsend)<30)
+        {
+            std::this_thread::sleep_for(std::chrono::milliseconds(1));
+            continue;
+        }
 
 
         request.set_strclientid(strcclientid);
@@ -448,22 +448,27 @@ void grpcpc::threadpicdownload(int nCamPos)
                 mnPicDownLatency[nCamPos] = QDateTime::currentMSecsSinceEpoch() - time1;
 
                 char * pstrdata = (char * )reply.xdata().data();
-                int * np = (int * )reply.xdata().data();
-                int npacsize = np[0];
-                int nmaxpac = 10;
-                int npos = (1+nmaxpac)*sizeof(int) ;
-                for(i=0;i<npacsize;i++)
+                int * pnowsize = (int * )pstrdata;
+                int npos = 0;
+                while((*pnowsize + npos)<=reply.xdata().size())
                 {
+                    npos = npos + sizeof(int);
                     iv::h264rawframedata xframe;
-                    int ndatasize = np[i+1];
+                    int ndatasize = *pnowsize;
                     std::cout<<" i "<<i<<" size: "<<ndatasize<<std::endl;
                     xframe.mdatasize = ndatasize;
                     xframe.mpstr_ptr = std::shared_ptr<char>(new char[ndatasize]);
                     memcpy(xframe.mpstr_ptr.get(),pstrdata + npos,xframe.mdatasize);
                     Produceh264frame(nCamPos,xframe);
                     npos = npos + ndatasize;
+                    if(npos>= reply.xdata().size())
+                    {
+                        break;
+                    }
+                    pnowsize = (int *)(pstrdata + npos);
                 }
 
+
 //                mMutexPic[nCamPos].lock();
 //                iv::modulecomm::ModuleSendMsg(mpaPic[nCamPos],reply.xdata().data(),reply.xdata().size());
 //                mMutexPic[nCamPos].unlock();
@@ -476,8 +481,8 @@ void grpcpc::threadpicdownload(int nCamPos)
             }
             else
             {
-                std::cout<<"  slleeeeeep "<<std::endl;
-                std::this_thread::sleep_for(std::chrono::milliseconds(10));
+ //               std::cout<<"  slleeeeeep "<<std::endl;
+ //               std::this_thread::sleep_for(std::chrono::milliseconds(10));
  //               std::this_thread::sleep_for(std::chrono::milliseconds(10*NUM_THREAD_PERCAM));
             }
         } else {

+ 43 - 25
src/tool/RemoteCtrl_h264/mainwindow.cpp

@@ -346,44 +346,58 @@ void MainWindow::resizeEvent(QResizeEvent *event)
     QSize sizemain = ui->centralwidget->size();
     qDebug("size x = %d y=%d",sizemain.width(),sizemain.height());
 
-    mMapview->setGeometry(10,10,sizemain.width()/2,sizemain.height()*3/5);
+    mMapview->setVisible(false);
+//    mMapview->setGeometry(10,10,sizemain.width()/2,sizemain.height()*3/5);
 
 //    mpbaiduapp->SetGeometry(10,30,sizemain.width()/2,sizemain.height()*3/5);
 
     mmyview->setGeometry(10+sizemain.width()/2+10,10,sizemain.width()/2-30,sizemain.height()*3/5);
 
+    int nfrontpos_x = sizemain.width()/6;
+    int nfrontpos_y = sizemain.height()/3;
+    int nfrontsize_x = sizemain.width()*2/3;
+    int nfrontsize_y = sizemain.height() * 2/3;
+    mmyview->setGeometry(nfrontpos_x,nfrontpos_y,nfrontsize_x,nfrontsize_y);
+
 //    mppicshow->SetGeometry(10+sizemain.width()/2+10,10,sizemain.width()/2-30,sizemain.height()*3/5);
 
-    ui->lineEdit_lat->setGeometry(sizemain.width()-100,10,90,30);
-    ui->lineEdit_lon->setGeometry(sizemain.width()-100,50,90,30);
-    ui->pushButton_test->setGeometry(sizemain.width()-100,90,90,30);
+//    ui->lineEdit_lat->setGeometry(sizemain.width()-100,10,90,30);
+//    ui->lineEdit_lon->setGeometry(sizemain.width()-100,50,90,30);
+//    ui->pushButton_test->setGeometry(sizemain.width()-100,90,90,30);
+
 
+    ui->lineEdit_lat->setVisible(false);
+    ui->lineEdit_lon->setVisible(false);
+    ui->pushButton_test->setVisible(false);
 //    mpWheel->setGeometry(sizemain.width()/2 + 20,10,200,200);
 
-    int grouppos_x = 10;
-    int grouppos_y = 20 + sizemain.height() *3/5;
-    int grouppos_width = sizemain.width()*6/10;
-    int grouppos_height = sizemain.height()*2/5 - 20;
+    int grouppos_x =  sizemain.width()*5/6;
+    int grouppos_y = sizemain.height()/3;
+    int grouppos_width = sizemain.width()*1/6;
+    int grouppos_height = sizemain.height() * 2/3;
 
 
-    int speed_width = grouppos_height-40;
-    if((speed_width*3 + 150)>grouppos_width)speed_width = (grouppos_width - 150)/3;
+//    int speed_width = grouppos_height-40;
+//    if((speed_width*3 + 150)>grouppos_width)speed_width = (grouppos_width - 150)/3;
 
-    mpWheel->setGeometry(100,30,speed_width,speed_width);
-    mpBrake->setGeometry(120 + speed_width,30,speed_width,speed_width);
-    mpAcc->setGeometry(140 + 2*speed_width,30,speed_width,speed_width);
+    int speed_width = grouppos_width;
+    if(speed_width*3 > (sizemain.height()/2))speed_width = sizemain.height()/6;
+    mpWheel->setGeometry(0,sizemain.height()/6 ,speed_width,speed_width);
+    mpBrake->setGeometry(0,sizemain.height()/6 + sizemain.height()/6,speed_width,speed_width);
+    mpAcc->setGeometry(0 ,sizemain.height()/6 + sizemain.height()/3,speed_width,speed_width);
     ui->groupBox_rem->setGeometry(grouppos_x,grouppos_y,grouppos_width,grouppos_height);
 
-    int grouppic_x = 10 + sizemain.width()*6/10 + 10;
-    int grouppic_y = 20 + sizemain.height() *3/5;
-    int grouppic_width = sizemain.width()*4/10 - 30;
-    int grouppic_height = sizemain.height()*1/10;
+//    int grouppic_x = 10 + sizemain.width()*6/10 + 10;
+//    int grouppic_y = 20 + sizemain.height() *3/5;
+//    int grouppic_width = sizemain.width()*4/10 - 30;
+//    int grouppic_height = sizemain.height()*1/10;
 
-    ui->groupBox_picsel->setGeometry(grouppic_x,grouppic_y,grouppic_width,grouppic_height);
+//    ui->groupBox_picsel->setGeometry(grouppic_x,grouppic_y,grouppic_width,grouppic_height);
+    ui->groupBox_picsel->setVisible(false);
 
-    int groupmap_x = 10 + sizemain.width()*6/10 + 10;
-    int groupmap_y = 20 + sizemain.height() *7/10;
-    int groupmap_width = sizemain.width()*4/10 - 30;
+    int groupmap_x = 0;
+    int groupmap_y = sizemain.height()*1/3;
+    int groupmap_width = sizemain.width()/6;
     int groupmap_height = sizemain.height()*1/10;
 
     ui->comboBox_Station->setGeometry(10,30,groupmap_width*3/5,30);
@@ -391,10 +405,10 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 
     ui->groupBox_map->setGeometry(groupmap_x,groupmap_y,groupmap_width,groupmap_height);
 
-    int groupgps_x = 10 + sizemain.width()*6/10 + 10;
-    int groupgps_y = 30 + sizemain.height() *8/10;
-    int groupgps_width = sizemain.width()*4/10 - 30;
-    int groupgps_height = sizemain.height()*2/10 - 30;
+    int groupgps_x = 0;
+    int groupgps_y = sizemain.height()/2;
+    int groupgps_width = sizemain.width()/6;
+    int groupgps_height = sizemain.height()/2;
 
     ui->groupBox_gps->setGeometry(groupgps_x,groupgps_y,groupgps_width,groupgps_height);
 
@@ -427,6 +441,10 @@ void MainWindow::resizeEvent(QResizeEvent *event)
     ui->lineEdit_gpssat->setGeometry(40+2*lablewidth +lewidth,nypos,lewidth,leheight);
 
 
+    double fscale = (sizemain.width()*2/3)/1920.0;
+    double fscale2 = (sizemain.height()*2/3)/1080.0;
+    if(fscale > fscale2) fscale = fscale2;
+    mmyview->viewscaleto(fscale);
 }
 
 

+ 2 - 2
src/tool/RemoteCtrl_h264/mainwindow.ui

@@ -92,8 +92,8 @@
     <widget class="QGroupBox" name="groupBox">
      <property name="geometry">
       <rect>
-       <x>10</x>
-       <y>110</y>
+       <x>210</x>
+       <y>20</y>
        <width>71</width>
        <height>101</height>
       </rect>

+ 8 - 0
src/tool/RemoteCtrl_h264/myview.cpp

@@ -118,3 +118,11 @@ void MyView::mouseDoubleClickEvent(QMouseEvent *event)
 
 //    qDebug("view x is %d view y is %d ",viewx,viewy);
 }
+
+void MyView::viewscaleto(double fratio)
+{
+    double fscale = fratio/beishu;
+    scale(fscale,fscale);
+    beishu *= fscale;
+    centerOn(450, 700 - (200 / beishu));
+}

+ 1 - 0
src/tool/RemoteCtrl_h264/myview.h

@@ -18,6 +18,7 @@ class MyView : public QGraphicsView
 public:
     explicit MyView(QWidget *parent =0);
     qreal x, y, beishu;
+    void viewscaleto(double fratio);
 protected:
     void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
     void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

+ 79 - 0
src/tool/testmpegts/httpserver.cpp

@@ -0,0 +1,79 @@
+#include "httpserver.h"
+
+HttpServer &HttpServer::instance()
+{
+    static HttpServer obj;
+    return obj;
+}
+
+void HttpServer::run(const QHostAddress &address, const quint16 &port)
+{
+    m_httpServer->listen(address,port);
+}
+
+void HttpServer::newConnection()
+{
+    qDebug() << "newConnection";
+    QTcpSocket *m_socket = m_httpServer->nextPendingConnection();
+    QObject::connect(m_socket,&QTcpSocket::readyRead,this,&HttpServer::readyRead);
+}
+
+void HttpServer::readyRead()
+{
+    static int index = 0;
+    QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
+    if(socket){
+        QByteArray request = socket->readAll();
+
+        if(index<10)
+        qDebug() << "Request Data:" << request;
+        index++;
+        if(index>1)
+        {
+            mMutex.lock();
+            mba.append(request);
+            mMutex.unlock();
+        }
+//        qDebug("len: %d ",request.length());
+
+//        static int count = 0;
+//        count++;
+//        QByteArray response = QString("<h1><center>Hello World %1</center></h1>\r\n").arg(count).toUtf8();
+
+
+//        QString http = "HTTP/1.1 200 OK\r\n";
+//        http += "Server: nginx\r\n";
+//        http += "Content-Type: text/html;charset=utf-8\r\n";
+//        http += "Connection: keep-alive\r\n";
+//        http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size()));
+
+//        socket->write(http.toUtf8());
+//        socket->write(response);
+//        socket->flush();
+//        socket->waitForBytesWritten(http.size() + response.size());
+ //       socket->close();
+    }
+}
+
+HttpServer::HttpServer(QObject *parent) : QObject(parent)
+{
+    m_httpServer = new QTcpServer(this);
+    m_httpServer->setMaxPendingConnections(1024);//设置最大允许连接数
+    QObject::connect(m_httpServer,&QTcpServer::newConnection,this,&HttpServer::newConnection);
+}
+
+HttpServer::~HttpServer()
+{
+
+}
+
+QByteArray HttpServer::GetData()
+{
+    QByteArray ba;
+    ba.clear();
+    mMutex.lock();
+    ba = mba;
+    mba.clear();
+    mMutex.unlock();
+    return ba;
+}

+ 36 - 0
src/tool/testmpegts/httpserver.h

@@ -0,0 +1,36 @@
+#ifndef HTTPSERVER_H
+#define HTTPSERVER_H
+
+#include <QObject>
+#include <QtCore>
+#include <QtNetwork>
+
+#include <QMutex>
+class HttpServer : public QObject
+{
+    Q_OBJECT
+public:
+    static HttpServer &instance();
+    void run(const QHostAddress &address = QHostAddress::Any,const quint16 &port = 6122);
+signals:
+
+public slots:
+private slots:
+    void newConnection();
+    void readyRead();
+private:
+    explicit HttpServer(QObject *parent = nullptr);
+    ~HttpServer();
+    Q_DISABLE_COPY(HttpServer)
+private:
+    QTcpServer *m_httpServer;
+
+private:
+    QByteArray mba;
+    QMutex mMutex;
+
+public:
+    QByteArray GetData();
+};
+
+#endif // HTTPSERVER_H