как с одного пользователя отправлять два потока видео на сервер?

У меня есть не большой код на питоне дге один сервер делиться на две и он один клиент который отправляет видео и текст и мне нужно что бы отправка видео и текста было одно временно что бы два процесса не зависели друг от друга ...

Вот код сервера

import cv2
import imutils
import socket
import numpy as np
import time
import base64
from multiprocessing import Process
from threading import Thread

class class_func1(Thread):
    def __init__(self):
        super().__init__()

    def run(self):
        BUFF_SIZE = 65536
        LOCALHOST = socket.gethostbyname(socket.gethostname())
        PORT = 2022

        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind((LOCALHOST, PORT))

        server.listen()

        print("Сервер запущен!")

        while True:
            user, addr = server.accept()
            packet, _ = user.recvfrom(BUFF_SIZE)
            data = base64.b64decode(packet, ' /')
            npdata = np.frombuffer(data, dtype=np.uint8)
            frame = cv2.imdecode(npdata, 1)
            cv2.imshow("Test 1 server", frame)
            key = cv2.waitKey(1) & 0xFF
            if key == ord('q'):
                server.close()
                break

class class_func2(Thread):
    def __init__(self):
        super().__init__()

    def run(self):

        LOCALHOST = socket.gethostbyname(socket.gethostname())
        PORT = 2023

        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind((LOCALHOST, PORT))

        server.listen()

        print("Сервер запущен!")

        while True:
            user, add = server.accept()
            data = user.recv(1024).decode("UTF-8")
            print("date: ", data)
            user.send(data.encode("UTF-8"))

if __name__ == '__main__':
    p1 = class_func1()
    p2 = class_func2()
    p1.start()
    p2.start()
    p1.join()
    p2.join()

Вот код клиента

import cv2, imutils, socket
import numpy as np
import time
import base64
import socket 
from multiprocessing import Process


def func_1():
    BUFF_SIZE = 65536
    LOCALHOST = socket.gethostbyname(socket.gethostname())
    PORT = 2022

    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((LOCALHOST, PORT))

    vid = cv2.VideoCapture(0) #  replace 'rocket.mp4' with 0 for webcam
    fps,st,frames_to_count,cnt = (0,0,20,0)

    while True:
        WIDTH = 400
        while(vid.isOpened()):
            _, frame = vid.read()
            frame = imutils.resize(frame, width=WIDTH)
            encoded, buffer = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 80])
            message = base64.b64encode(buffer)
            client.send(message)
            cv2.imshow("Test 1 client", frame)
            key = cv2.waitKey(1) & 0xFF
            if key == ord('q'):
                client.close()
                break


def func_2():
    LOCALHOST = socket.gethostbyname(socket.gethostname())
    PORT = 2023

    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((LOCALHOST, PORT))

    while True:
        client.send("llo".encode("UTF-8"))
        data = client.recv(1024).decode("UTF-8")
        print("data: ", data)


if __name__ == '__main__':
    p1 = Process(target=func_1)
    p1.start()
    p2 = Process(target=func_2)
    p2.start()
    p1.join()
    p2.join()

Ответы (0 шт):