Python/Ubuntu多播受损包

2024-10-02 02:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我有一个通过多播接收UDP流的应用程序,但是当我尝试每秒钟将接收到的mpeg格式保存为块,然后每秒钟使用opencv2库读取第一帧以另存为图像时,我遇到了问题,但问题是,当我将同一根电缆连接到我的Dell inspiron(Ubuntu桌面)时,它可以完美地保存每一帧而不会丢失或损坏,但当我尝试在服务器(带有Ubuntu服务器的Dell Poweredge)上运行python代码时,从10帧到8帧每一帧都会损坏一次。我真的不明白是什么问题,当我转储了一个小时的视频文件,例如视频播放器打开它,似乎一切正常,但再次当我试图提取图像,我得到同样的问题。任何人都可以帮助我理解为什么戴尔inspiron与Ubuntu桌面接收多播流没有损失,而Ubuntu服务器没有?我们尝试了4台不同的机器和相同的问题,但再次从我的笔记本电脑它的工作。你知道吗

我不知道是什么问题,第一次我以为是sysctl配置问题,udp缓冲区大小。。。但每次的结果都是一样的。你知道吗

以下是多播套接字侦听器:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((args.ip_address, args.port))
mreq = struct.pack(">4sl", socket.inet_aton(args.ip_address), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

以及opencv从区块文件(区块文件大小约为2mb的1秒视频)中的第一个帧转储程序:

 def run(self):
        try:
            cv2c = cv2.VideoCapture(self.base_file.name)

            if cv2c.isOpened():
                success, image = cv2c.read()
            else:
                success = False

            cap2c = os.path.basename(self.base_file.name)
            cap2c = os.path.splitext(cap2c)[0]

            if success:
                success, image = cv2c.read()
                cv2.imwrite(image_dir + cap2c + ".jpg", image)

            cv2c.release()
        except ValueError:
            pass
        except OSError as error:
            sys.stderr.write('Error dumping image frame error:' + error.message)

Tags: 图像imageself服务器ubuntuargserrorsocket

热门问题