Python / Ubuntu多播损坏的数据包

时间:2014-12-29 12:49:54

标签: python opencv udp multicast

基本上我有一个通过多播接收UDP流的应用程序,但是当我尝试每秒钟将接收的mpeg格式保存到块中然后我使用opencv2库读取第一帧以每秒保存为图像时,我遇到了问题,但是问题是当我将相同的电缆连接到我的Dell inspiron(Ubuntu桌面)时,它可以完美地保存每一帧而不会丢失或损坏,但是当我尝试在服务器上运行我的python代码(Dell Poweredge with Ubuntu Server)时,每8帧一次10个都被损坏了。我真的不明白是什么问题,当我将视频文件转储1小时时,例如视频播放器打开它,似乎一切正常但是当我尝试提取图像时我又遇到了同样的问题。任何人都可以帮助我理解为什么dell 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)

0 个答案:

没有答案