基本上我有一个通过多播接收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)