Bueno, si quiere que su cliente vea el flujo de mjpeg, debe enviar toda la respuesta http. cliente HTTP como el navegador o reproductor multimedia como VLC necesita un flujo MJPEG que parece:
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=myboundary
--myboundary
Content-Type: image/jpeg
Content-length: 12345
[image 1 encoded jpeg data]
--myboundary
Content-Type: image/jpeg
Content-length: 45678
[image 2 encoded jpeg data]
...
NOTA: Como dijo Ergousha en una respuesta, debe tener una línea en blanco después de que el campo Content-Length.
Por cierto, ¿por qué no redirigir a su cliente directamente al flujo de mjpeg?
Puede usar cámaras IP AXIS de http://ipcam/mjpg/video.mjpg por ejemplo.
Si solo necesita la imagen a través de HTTP, debe establecer el encabezado correcto y el tipo de contenido MIME image/jpeg. Para decodificar la imagen, debe obtener los datos de bytes y obtendrá la codificación jpeg. Luego tendrá que decodificar jpeg para obtener una imagen en un formato específico (algo así como yuv420p, creo). Revisé mi cámara ip y creo que su transmisión no está codificada en base64.
Precise sus necesidades, intentaré ayudar más.
MY2C
EDIT:
Bueno, supongo que hacer algo como:
client : connect to proxy,
get example.com/camera1.mjpg,
while not the end
recv
yourproxy : wait connection
connect to camera,
get 10.0.0.123/camera1.mjpg
while not the end
recv buffer
copy buffer
send buffer to client
Eso quiere decir que usted debe enviar la cabecera correcta para su cliente. Para estar seguro, utilice una herramienta como wireshark para espiar el paquete y asegúrese de que después de que su cliente haya emitido un HTTP GET, le envíe la secuencia correcta de MJPEG (como la que describo al comienzo de mi publicación ...)
m2c
eso es exactamente lo que quiero hacer. No puedo redirigir al usuario directamente a la secuencia de mjpeg ya que mi aplicación funciona como un proxy inverso. Entonces necesito recibir la transmisión de la cámara y luego enviarla como respuesta a una URL en mi aplicación. Entonces el cliente HTTP llama a http://example.com/camera1.mjpg mi servidor analiza la solicitud y llama a camera1 en http://10.1.1.240/mjpg/video.mjpg Luego necesito transmitir la respuesta al cliente. Así que aquí es donde he estado teniendo dificultades para averiguar cómo volver a transmitir el mjpg al cliente sin modificaciones. –
Sea más preciso acerca de sus dificultades. Al mirar el fragmento de código, parece que solo lees parte de la respuesta. Con HTTP/MJPEG tiene que leer continuamente los paquetes TCP y volver a enviarlos, de ahí el pseudo código en mi respuesta. Supongo que la llamada GetByteArrayFromStream leyó parcialmente los datos, por lo que devuelve a su cliente solo datos parciales. ¡Tienes que leer en el canal TCP hasta que se cierre! Comprueba lo que recibes/lo que envías con wireshark, tendrás la verdad sobre el terreno. Si no entiendo bien su problema, precisalo, por favor ... – neuro
Sí, estoy bastante seguro de que tendremos que profundizar un poco más y usar algo menos abstracto como 'TcpClient'. ¡Actualmente estoy tratando de hacer lo mismo que @ arri.me! –