You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python UDP同步观影项目Errno 10040与base64解码错误解决方案咨询

问题1:Errno 10040 UDP报文大小超限解决方案

原因

UDP协议本身存在传输大小限制:理论最大报文长度为65535字节,但实际网络链路层MTU通常为1500字节,扣除IP、UDP报文头后,实际安全传输的UDP payload大小仅为1472字节左右。你当前直接发送整帧编码后的JPG数据,超过了系统或者网络的限制,就会触发该报错。另外你仅配置了服务端接收缓冲区,未配置发送缓冲区也是诱因之一。

修复方案

  • 首先补充服务端发送缓冲区配置,在服务端socket初始化部分添加一行:
server_socket_main.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, BUFFOR_SIZE_DATA)
  • 降低单帧数据大小:
    1. 调低JPG编码质量,将[cv2.IMWRITE_JPEG_QUALITY, 80]中的80调整为30~60区间
    2. 缩小帧分辨率,把WIDTH = 1024下调为720或者更低
  • 拆包传输:将base64编码后的帧数据切分为1400字节以内的分片,每个分片增加序号、帧ID、结束标识,客户端接收完同一帧的所有分片后重组再解码,避免单包过大
  • 若对传输稳定性要求高,建议直接改用TCP协议传输,UDP本身存在丢包、乱序问题,不适合对帧完整性要求高的视频传输场景

问题2:base64.b85decode 报错解决方案

原因

  1. 编解码算法不匹配:服务端使用base64.b64encode编码数据,客户端错误调用了base64.b85decode解码,b64和b85是完全不同的base编码算法,完全不兼容
  2. 参数使用错误:Python标准库的base64.b85decode仅支持1个入参,你传入的第二个参数' /'属于无效参数,直接触发类型错误
  3. 额外语法错误:你代码中dtype=np.unit8是拼写错误,正确写法为np.uint8;np.fromstring已被废弃,建议改用np.frombuffer避免警告

修复后的客户端核心代码:

while True:
    packet,_ = client_socket_main.recvfrom(BUFFOR_SIZE_DATA)
    # 改用b64decode和服务端编码匹配,删除无效第二个参数
    data = base64.b64decode(packet)
    # 修正类型拼写错误,改用frombuffer
    npdata = np.frombuffer(data, dtype=np.uint8)
    frame = cv2.imdecode(npdata, 1)
    cv2.imshow('Currently watching ', frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord('c'):
        client_socket_main.close()
        break

内容的提问来源于stack exchange,提问作者JUANOOO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:03