Hola, la consulta es sobre el uso de la librería pickle para codificar y decodificar los frames para el envio y recepción de las mismas. Es posible utilizar dicha librería?
Hola.
No. Deben ustedes diseñar e implementar un mecanismo de codificación.
Saludos
Hola.
No entiendo porque no se podría, si lo único que hace es transformar un objeto a string, igual que tostring(), y esto es necesario debido a que los socket solo aceptan strings y byte en el sendto.
pickle.
dumps
(obj[, protocol])Return the pickled representation of the object as a string, instead of writing it to a file.
Hola.
De acuerdo, había entendido que lo querían usar para hacer el "framing" que es necesario en el caso de TCP. Para el caso del framing, es decir, para diferenciar los distintos frames dentro del buffer de recepción deben diseñar ustedes la solución.
Entonces, para aclarar:
Los sockets transmiten bytes, por eso es que no se les puede pasar un objeto de python para transmitir, sino que se deben pasar a bytes (serializar).
Algo de suma importancia es que los bytes a transmitir sean solo los bytes que representan el frame codificado en jpg. Con esto quiero decir que está mal transmitir un objeto de python (o java o c++). Un servidor correctamente implementado debe poder transmitir datos que puedan ser entendidos por cualquier cliente, programado en cualquier lenguaje.
Es decir, tu servidor en python debe poder funcionar con un cliente en C que lo único que asume es que recibe un frame codificado en jpg.
No tengo claro como es la API de opencv en python, pero seguramente la función imencode (que se usa para codificar el frame en jpg) les devuelva un buffer con los bytes que representan el frame en jpg. Eso es lo que deben transmitir. Si para obtener esos bytes querés usar pickle esta bien, pero de nuevo, tengan cuidado de no estar serializando un objeto de python que luego un cliente no pueda entender.
Espero haber aclarado.
Saludos
Re: Uso de librerias en python
Buenas,
Nosotros no necesitamos codificar los bytes del frame, resolvimos el problema de señalizar cada frame de otra forma. Como dice el compañero, simplemente necesitamos pasarlo a String para que lo lea el socket.
Creo que en este caso, no aporta nada tener que hacerlo a mano.
Re: Uso de librerias en python
Del lado del servidor, como le pasas el "frame" al cliente sin usar pickle?
Re: Uso de librerias en python
Nosotros usamos el pickle si.