Я пытаюсь снимать видео продолжительностью 59 минут 59 секунд, но создаваемое видео всегда имеет меньшую продолжительность. - PullRequest
1 голос
/ 08 мая 2020

Я хочу создавать видео для нескольких камер, хранящихся в базе данных MySQL. С интервалом в 1 час продолжительность видео должна составлять 59 минут 59 секунд. Затем видео следует загрузить в azure хранилище BLOB-объектов.

Однако каждый раз, когда создается видео, оно имеет меньшую продолжительность (например, 44 или 45 минут). Я не получаю ошибок. Что я делаю не так? любое предложение будет большим подспорьем. Спасибо.

from threading import Thread
import threading
import cv2
import pymysql
import time
import datetime
import os
from azure.storage.blob import BlockBlobService, PublicAccess

def accessCamera(user_id, location_id, user_name, cursor):
    fix_path = '/home/****/****/'
    container_name = user_name

    block_blob_service = BlockBlobService(account_name='******', account_key='*****+*****+****+/******')

    try:
        block_blob_service.create_container(container_name)
    except:
        pass

    block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container)

    cursor.execute('SELECT * FROM xxxxx where user_id = ' + str(user_id) + ' and location_id = ' + str(location_id) + '')
    cameras = cursor.fetchall()
    camera = {}
    counter = 0
    out = {}
    hour = str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H'))

    for x in cameras:
        try:
            os.makedirs(fix_path + x['ip_address'] + '_' + str(x['rtsp_port']) + '/videos/')
        except:
            pass
        rtsp_stream_link = 'rtsp://' + x['username'] + ':' + x['password'] + '@' + x['ip_address'] + ':' 
     + str(x['rtsp_port']) + '/stream=1'
        out[counter] = cv2.VideoWriter(fix_path + x['ip_address'] + '_' + str(x['rtsp_port']) + 
    '/videos/' + str(hour) + '.avi',cv2.VideoWriter_fourcc(*'DIVX'), 1, (1920,1080))
        camera[counter] = cv2.VideoCapture(rtsp_stream_link)
        counter = counter + 1

    print("    #==================================================")
    print("    #-- Loaded Cameras Now Saving Video for Location " + str(location_id) + " - " + 
     str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
    print("    #==================================================")
    framecount = 0    
    while True:

        counter = 0
        for x in cameras:
            check,frame=camera[counter].read()

            if check == True:
                out[counter].write(frame)
            else:
                continue

            minutes = str(datetime.datetime.fromtimestamp(time.time()).strftime('%M'))
            if int(minutes) == 59 and framecount >= 3599:
                out[counter].release()
                block_blob_service.create_blob_from_path(container_name, fixpath + x['ip_address'] + '_' 
     + str(x['rtsp_port']) + '/videos/' + hour + '.avi', x['ip_address'] + '_' + x['rtsp_port'] + 
     '/videos/' + hour + '.avi')
                print("#==================================================")
                print("#-- Video Saved - " + 
     str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
                print("#==================================================")
                threading.Thread._stop(self)
                exit(1)
            counter = counter + 1
        framecount = framecount + 1

#===========================================================================
# -- Main function
#===========================================================================
if __name__ == '__main__':
    print("Time - " + str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
    flag  = 1
    while True:
        if (str(datetime.datetime.fromtimestamp(time.time()).strftime('%S')) == '54' and 
     str(datetime.datetime.fromtimestamp(time.time()).strftime('%M')) == '59') or flag == 1:
            print("#======================================================")
            print("#-- Get All Users and Locations to create Threads - " + 
     str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
            print("#======================================================")

            db = pymysql.connect('xxxxxxx', 'xxxxxx', 'password', 'xxxxxx')
            cursor = db.cursor(pymysql.cursors.DictCursor)
            cursor1 = db.cursor(pymysql.cursors.DictCursor)
            cursor.execute('select locations.id,locations.user_id,users.username from locations inner 
     join users on users.id = locations.user_id')
            user = cursor.fetchall()

            for x in user:
                thread = threading.Thread(target=accessCamera,args= 
     (int(x['user_id']),int(x['id']),x['username'],cursor1,))
                print("    #==================================================")
                print('    #-- Thread created for location ' + str(x['id']) + ' - ' + 
     str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
                print("    #==================================================")
                thread.daemon = True
                thread.start()

            time.sleep(1)
            flag = 0
            # print("    #==================================================")
            # print("    #-- Sleeping Current Thread for 1 minutes - " + 
    str(datetime.datetime.fromtimestamp(time.time()).strftime('%d-%m-%Y_%H-%M-%S')))
            # print("    #==================================================")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...