video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2022-07-21 f346559ee07016172cab40b7fca5b2c5e09df899
bug fixed
2个文件已修改
42 ■■■■■ 已修改文件
csrc/thirdparty/gb28181/include/PsToEs.hpp 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/wrapper.cpp 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
csrc/thirdparty/gb28181/include/PsToEs.hpp
@@ -7,20 +7,23 @@
#include <unistd.h>
#include "librtsp.h"
#include <sys/time.h>
#include <errno.h>
using namespace std;
template<typename T>
class MyQueue {
public:
    MyQueue():mtx(PTHREAD_MUTEX_INITIALIZER), cond(PTHREAD_COND_INITIALIZER){
        t.tv_sec = 0;
        t.tv_nsec = 0;
    MyQueue():mtx(PTHREAD_MUTEX_INITIALIZER){
        pthread_condattr_t attr;
        pthread_condattr_init(&attr);
        pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
        pthread_cond_init(&cond, &attr);
        pthread_condattr_destroy(&attr);
    }
    ~MyQueue() {
        pthread_cond_destroy(&cond);
    }
public:
@@ -40,14 +43,22 @@
    }
    T pop() {
        struct timespec now, end;
        clock_gettime(CLOCK_MONOTONIC, &now);
        static uint64_t waitS = 12; // wait
        end.tv_sec = now.tv_sec + waitS;
        end.tv_nsec = now.tv_nsec;
        // printf("======>>wait stream data\n");
        pthread_mutex_lock(&mtx);
        if (q.empty()) {
            gettimeofday(&now, NULL);
            t.tv_sec = now.tv_sec + 12;
            t.tv_nsec = now.tv_usec * 1000;
//            pthread_cond_wait(&cond, &mtx);
            pthread_cond_timedwait(&cond, &mtx, &t);
        while(q.empty()){
            if(pthread_cond_timedwait(&cond, &mtx, &end) == ETIMEDOUT){
                printf("======>>timeout quit\n");
                break;
            }
        }
        // printf("======>>queue size %lu\n", q.size());
        if (q.empty()) {
            pthread_mutex_unlock(&mtx);
            return 0;
@@ -91,8 +102,6 @@
    deque<T> q;
    pthread_mutex_t mtx;
    pthread_cond_t cond;
    timespec t;
    struct timeval now;
};
typedef struct _buffInfo {
@@ -290,7 +299,7 @@
    void deleteCamera(){
        printf("RTSPSTREAM_Close\n");
        if(handle != -1){
        if(handle > -1){
            RTSPSTREAM_Close(handle);
        }
csrc/wrapper.cpp
@@ -211,7 +211,10 @@
        string url = input_url_;
        while(!stop_stream_.load()){
            if (gb_){
                url = input_url_ + gb_suffix[gs_idx];
                if (input_url_.find("/StreamType=") == string::npos)
                    url = input_url_ + gb_suffix[gs_idx];
                logIt("======>>input real url %s\n", url.c_str());
            }
            auto in = init_reader(url.c_str());