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