MP4 : 6256 | None : 189
2.9325058184639256 % corrupted files
< /code>
Wie mein Prozess funktioniert < /h4>
Ich habe eine TCP -Verbindung auf dem Speicher -Raspberry Pi eingerichtet. Jedes X -Mal stellt der Camera Raspberry Pi eine Verbindung zum Speicher -PI her und sendet die Videodatei. Sobald die Datei gesendet und geschrieben wurde, ist die Verbindung geschlossen. /> Ich habe die Dateigrößen nach dem Transfer mit dem Original auf der Kamera pi verglichen, aber diese Methode hat zu 100% beschädigten Dateien geführt (ich vermute, dass das Problem in meinem Code liegt, aber ich bin mir nicht sicher, wo es schief gelaufen ist). Ich strebe < /h4>
Ich möchte wirklich 0% beschädigte Dateien erreichen. Ich denke darüber nach, einen Überprüfungsschritt nach dem Schreiben zu implementieren, indem ich das Dateiformat überprüfe. Wenn es sich um einen Nicht -Einsatz -Typen handelt, würde ich eine Wiederherstellung anfordern. [url=viewtopic.php?t=14917]Ich möchte[/url] jedoch mein Programm optimieren, um unnötige Wiederversendungs -Iterationen zu minimieren.def receive_file(self, client_socket, file_name):
with open(file_name+"/"+datetime.now().strftime("%y_%m_%d_%H_%M_%S"), 'wb') as f:
while True:
chunk = client_socket.recv(1500)
if not chunk:
break
f.write(chunk)
if chunk == b'END':
print("End Key, conenction will be closed")
break
def start_serv(self):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((self.server_host, self.server_port))
server_socket.listen(3)
print("[TCP] Server Started")
while True:
read, _, _ = select.select(self.connected + [server_socket], [], [])
for sock in read:
if sock == server_socket:
client_socket, addr = server_socket.accept()
self.connected.append(client_socket)
print(f"[TCP] New connection : {client_socket}")
print(f"[TCP] Currently in queue : {self.connected} ")
else:
try:
self.receive_file(sock, self.video_path+"/"+addr[0])
sock.close()
self.connected.remove(sock)
print(f"[TCP] Video stored in {self.video_path +'/'+ addr[0]}")
except Exception as e:
print(f"[TCP] Erreur lors de la réception : {e}")
self.connected.remove(sock)
sock.close()
< /code>
vor der Kamera PI: < /p>
def send_file(self, file_path: str):
"""Envoie un fichier au serveur via TCP."""
if not self.client_socket:
print("[ERROR] TCP not linked anymore.")
return
if not os.path.exists(file_path):
print(f"[ERROR] wrong file path : {file_path}")
return
try:
with open(file_path, "rb") as file:
while chunk := file.read(1500):
self.client_socket.sendall(chunk)
self.client_socket.sendall(b'END')
print(f"[TCP] file '{file_path}' sent.")
os.remove(file_path)
except Exception as e:
print(f"[ERROR] Hu, something wrong happend : {e}")
< /code>
(Ich schließe es in einer anderen Funktion) < /p>
Weitere Untersuchung < /h4>
Ich habe den Endschlüssel entfernt. Tatsächlich hat es keinen großen Zweck erfüllt. Die Methode zum Hinzufügen von Chunks mit +=
ist nicht lebensfähig und verursacht viele Fehler. Also füge ich die Teile jetzt an eine Liste hinzu und verwende B '' .Join (Chunk) bevor ich sie schreibe. Nachdem ich die Datei 1000 -mal gesendet hatte, habe ich zunächst Dateien mit Größen in der Nähe oder gleich der Referenzdatei erhalten, jedoch ohne Erweiterung. (Ich vermutete, dass es nicht so einfach wäre ...)
Ich habe dann versucht zu sehen, ob die Dateierweiterung vor dem Schreiben identifiziert werden könnte, und dafür habe ich die Magic Library mit Magic.from_buffer (Datei in Bytes, mime = true) verwendet. Leider konnte die Erweiterung das Dateiformat nicht erkennen. Dann hatte ich die Idee, die ersten 10 Zeilen zwischen der empfangenen Datei und der gesendeten Datei zu vergleichen, Bingo!
Ich habe ein Problem mit MP4-Dateiübertragungen über TCP. 2,93% beschädigte Dateien.[code]MP4 : 6256 | None : 189 2.9325058184639256 % corrupted files < /code> Wie mein Prozess funktioniert < /h4> Ich habe eine TCP -Verbindung auf dem Speicher -Raspberry Pi eingerichtet. Jedes X -Mal stellt der Camera Raspberry Pi eine Verbindung zum Speicher -PI her und sendet die Videodatei. Sobald die Datei gesendet und geschrieben wurde, ist die Verbindung geschlossen. /> Ich habe die Dateigrößen nach dem Transfer mit dem Original auf der Kamera pi verglichen, aber diese Methode hat zu 100% beschädigten Dateien geführt (ich vermute, dass das Problem in meinem Code liegt, aber ich bin mir nicht sicher, wo es schief gelaufen ist). Ich strebe < /h4> Ich möchte wirklich 0% beschädigte Dateien erreichen. Ich denke darüber nach, einen Überprüfungsschritt nach dem Schreiben zu implementieren, indem ich das Dateiformat überprüfe. Wenn es sich um einen Nicht -Einsatz -Typen handelt, würde ich eine Wiederherstellung anfordern. [url=viewtopic.php?t=14917]Ich möchte[/url] jedoch mein Programm optimieren, um unnötige Wiederversendungs -Iterationen zu minimieren.def receive_file(self, client_socket, file_name): with open(file_name+"/"+datetime.now().strftime("%y_%m_%d_%H_%M_%S"), 'wb') as f: while True: chunk = client_socket.recv(1500) if not chunk: break f.write(chunk) if chunk == b'END': print("End Key, conenction will be closed") break
for sock in read: if sock == server_socket: client_socket, addr = server_socket.accept() self.connected.append(client_socket) print(f"[TCP] New connection : {client_socket}") print(f"[TCP] Currently in queue : {self.connected} ") else: try: self.receive_file(sock, self.video_path+"/"+addr[0]) sock.close() self.connected.remove(sock)
print(f"[TCP] Video stored in {self.video_path +'/'+ addr[0]}") except Exception as e: print(f"[TCP] Erreur lors de la réception : {e}") self.connected.remove(sock) sock.close() < /code> vor der Kamera PI: < /p> def send_file(self, file_path: str): """Envoie un fichier au serveur via TCP.""" if not self.client_socket: print("[ERROR] TCP not linked anymore.") return
if not os.path.exists(file_path): print(f"[ERROR] wrong file path : {file_path}") return
try: with open(file_path, "rb") as file: while chunk := file.read(1500): self.client_socket.sendall(chunk) self.client_socket.sendall(b'END') print(f"[TCP] file '{file_path}' sent.") os.remove(file_path) except Exception as e: print(f"[ERROR] Hu, something wrong happend : {e}") < /code> (Ich schließe es in einer anderen Funktion) < /p> Weitere Untersuchung < /h4> Ich habe den Endschlüssel entfernt. Tatsächlich hat es keinen großen Zweck erfüllt. Die Methode zum Hinzufügen von Chunks mit += [/code] ist nicht lebensfähig und verursacht viele Fehler. Also füge ich die Teile jetzt an eine Liste hinzu und verwende B '' .Join (Chunk) bevor ich sie schreibe. Nachdem ich die Datei 1000 -mal gesendet hatte, habe ich zunächst Dateien mit Größen in der Nähe oder gleich der Referenzdatei erhalten, jedoch ohne Erweiterung. (Ich vermutete, dass es nicht so einfach wäre ...) Ich habe dann versucht zu sehen, ob die Dateierweiterung vor dem Schreiben identifiziert werden könnte, und dafür habe ich die Magic Library mit Magic.from_buffer (Datei in Bytes, mime = true) verwendet. Leider konnte die Erweiterung das Dateiformat nicht erkennen. Dann hatte ich die Idee, die ersten 10 Zeilen zwischen der empfangenen Datei und der gesendeten Datei zu vergleichen, Bingo![code]raspberry@raspberrypi:~ $ hexdump -C /home/raspberry/Tcp/25_04_11_13_22_54 | head -n 10 00000000 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 |............@...| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 02 00 00 02 32 |...............2| 00000030 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 00 00 03 |trak...\tkhd....| 00000040 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................| * 00000080 00 00 00 00 40 00 00 00 0c a8 00 00 08 70 00 00 |....@........p..| 00000090 00 00 00 24 65 64 74 73 00 00 00 1c 65 6c 73 74 |...$edts....elst| < /code> Datei mit manueller Erweiterung: < /p> raspberry@raspberrypi:~ $ hexdump -C /home/raspberry/Tcp/25_04_11_13_22_54.mp4 | head -n 10 00000000 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 |............@...| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 02 00 00 02 32 |...............2| 00000030 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 00 00 03 |trak...\tkhd....| 00000040 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................| * 00000080 00 00 00 00 40 00 00 00 0c a8 00 00 08 70 00 00 |....@........p..| 00000090 00 00 00 24 65 64 74 73 00 00 00 1c 65 6c 73 74 |...$edts....elst| < /code> Originaldatei: < /p> raspberry@raspberrypi:~ $ hexdump -C /home/raspberry/Tcp/reference.mp4 | head -n 10 00000000 00 00 00 1c 66 74 79 70 69 73 6f 35 00 00 02 00 |....ftypiso5....| 00000010 69 73 6f 35 69 73 6f 36 6d 70 34 31 00 00 03 30 |iso5iso6mp41...0| 00000020 6d 6f 6f 76 00 00 00 6c 6d 76 68 64 00 00 00 00 |moov...lmvhd....| 00000030 00 00 00 00 00 00 00 00 00 00 03 e8 00 00 00 00 |................| 00000040 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................| 00000050 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000070 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |@...............| 00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 |................| 00000090 00 00 02 32 74 72 61 6b 00 00 00 5c 74 6b 68 64 |...2trak...\tkhd| < /code> Das Problem ist, dass die ersten 5 Zeilen fehlen und der 6. teilweise da ist. Wenn ich es gut verstanden habe, das alles verursacht, einschließlich der Dateierweiterung, zu verschieben.import socket import select from datetime import datetime import magic server_host="192.168.1.100" server_port=8000 video_path = "/home/raspberry/Tcp"
connected = []
def receive_file(client_socket, file_name): Transfer_size = client_socket.recv(100) Transfer_size = int.from_bytes(Transfer_size,'big') print(f"[TCP] Fichier video de {Transfer_size}") sending=True vid = []
while sending: chunk = client_socket.recv(1500) vid.append(chunk) if not chunk: break contenu = b''.join(vid) mime = magic.from_buffer(contenu,mime=True) print(f"Extension detected : {mime}")
with open(file_name+"/"+datetime.now().strftime("%y_%m_%d_%H_%M_%S"), 'wb') as f:
print(f"Transfert end : {len(chunk)/Transfer_size}") f.write(b''.join(vid))
for sock in read: if sock == server_socket: client_socket, addr = server_socket.accept() client_socket.recv(100) connected.append(client_socket) print(f"[TCP] New connection : {client_socket}") print(f"[TCP] Currently in queue : {connected} ") else: try: receive_file(sock, video_path) sock.close() connected.remove(sock)
print(f"[TCP] Video stored in {video_path}") except Exception as e: print(f"[TCP] Erreur lors de la réception : {e}") connected.remove(sock) sock.close()
def send_file( file_path: str,client_socket,taille = taille): compteur_envoi = 0 client_socket.send(taille.to_bytes(100,'big')) if not client_socket: print("[ERROR] TCP not linked anymore.") return if not os.path.exists(file_path): print(f"[ERROR] wrong file path : {file_path}") return try: with open(file_path, "rb") as file: while chunk := file.read(1500): client_socket.sendall(chunk) compteur_envoi += len(chunk) print(f"[TCP] file '{file_path}' sent.") except Exception as e: print(f"[ERROR] Hu, something wrong happend : {e}")
def close(client_socket): if client_socket: client_socket.close() print("[TCP] Link closed.") i =0 while i < 1000: client_socket = connect() send_file(path,client_socket ) close(client_socket) i+=1 print(i) [/code]
Ich versuche, DOCX -Dateien mit dem folgenden Code in PDF zu konvertieren:
import os
import time
import datetime
import win32com.client
import traceback
import zoneinfo
import gc
Wenn ein Bild zu HTML als IMG -Tag hinzugefügt wird und diese HTML dann mit DOCX4J als Altchunk in eine DOCX -Datei eingebettet wird. Das Bild überläuft die hier gezeigten DOCX-Seitengrenzen:...
Ich schreibe einen Socket -Proxy -Dienst und verwende epoll () zum Empfangen von Ereignissen von Sockets. Manchmal werden die Daten in Teilen übergeben, wodurch EPOLL () mehrmals auf demselben Socket...
Ich habe eine Fastapi-Anwendung und möchte einen anderen Prozess mit einem Python-Skript auf nicht blockierende Weise starten:
process = subprocess.Popen(
,
stdout=subprocess.DEVNULL,...