> 技术文档 > python udp视频服务端客户端

python udp视频服务端客户端

import cv2
import socket
import threading
from PIL import ImageFont, ImageDraw, Image
import numpy as np

ca=cv2.VideoCapture(0)

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)

text = \"Hello!\"
position = (50, 50)
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1
color = (0, 255, 0)  # 绿色
thickness = 2

def fun():
    global text
    while(1):
        text=input(\"请输入想发送的内容:\")
    
def recv():
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
    s.bind((\"0.0.0.0\",8000))
    while(1):
        data=s.recvfrom(65536)
        #print(data[1])
        if len(data)>0:
            zip_data=np.frombuffer(data[0],dtype=np.uint8)
            cur_data=cv2.imdecode(zip_data,cv2.IMREAD_COLOR)
            cv2.imshow(\"1111\",cur_data)
            cv2.waitKey(1)

t2=threading.Thread(target=recv)
t2.start()
print(\"视频服务端已准备好!\")
# 视频写入配置
#fourcc = cv2.VideoWriter_fourcc(*\'XVID\')
#out = cv2.VideoWriter(\'output_chinese.avi\', fourcc, 20.0, (640, 480))

# 加载中文字体(Windows 示例)
font_path = \"simhei.ttf\"  # 你可以换成系统其他中文字体
font = ImageFont.truetype(font_path, 32)

ip=input(\"输入对方ip地址:\")

print(\"准备发送\")
t=threading.Thread(target=fun)
t.start()
while(1):
    ret, frame = ca.read()
    if not ret:
        break
        # 转换为 PIL 图像对象
    img_pil = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img_pil)

    # 写入中文文本
    draw.text((50, 50), text, font=font, fill=(255, 0, 0))

    # 转回 OpenCV 格式
    frame = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)

    # 显示窗口
    #cv2.imshow(\'Video with Chinese\', frame)

    # 写入视频文件
    #out.write(frame)
    zip_data=cv2.imencode(\'.jpg\', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 80])[1]
    buffer_data=zip_data.tobytes()
    jj=s.sendto(zip_data,(ip,8000))
    print(jj)
    if cv2.waitKey(1) & 0xFF == 27:  # ESC键退出
        break
    cv2.waitKey(1)