Bene, se si desidera che il client visualizzi il flusso mjpeg, è necessario inviare l'intera risposta http. client HTTP come browser o media player come VLC ha bisogno di un flusso MJPEG che assomiglia a:
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: Come ha detto Ergousha in una risposta, è necessario disporre di una riga vuota dopo il campo Content-length.
A proposito, perché non reindirizzare il client direttamente al flusso mjpeg?
È possibile utilizzare le telecamere IP AXIS http://ipcam/mjpg/video.mjpg ad esempio.
Se è sufficiente l'immagine tramite HTTP, è necessario impostare l'intestazione corretta e il tipo di contenuto MIME image/jpeg. Per decodificare l'immagine, devi ottenere i dati di byte e otterrai la codifica jpeg. Quindi dovrai decodificare jpeg per ottenere un'immagine in un formato specifico (come penso a yuv420p). Ho controllato la mia telecamera IP, e il suo stream non è codificato in Base64, penso.
Precisi i vostri bisogni, cercherò di aiutare di più.
MY2C
EDIT:
Bene, suppongo che si fa qualcosa di simile:
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
Questo per dire che è necessario inviare l'intestazione corretta per il vostro cliente. Per essere sicuri di utilizzare uno strumento come wireshark per spiare il pacchetto ed essere sicuri che dopo che il client ha emesso un HTTP GET gli mandi il flusso MJPEG corretto (come quello che descrivo all'inizio del mio post ...)
m2c
è esattamente quello che voglio fare. Non riesco a reindirizzare l'utente direttamente al flusso mjpeg poiché la mia applicazione funziona come proxy inverso. Quindi ho bisogno di ricevere il flusso dalla fotocamera, quindi inviarlo come risposta a un URL nella mia applicazione. Quindi il client HTTP chiama http://example.com/camera1.mjpg il mio server analizza la richiesta e chiama camera1 a http://10.1.1.240/mjpg/video.mjpg Ho quindi bisogno di trasmettere la risposta al client. Quindi questo è dove ho avuto difficoltà a capire come eseguire lo streaming della mjpg sul client non modificato. –
Sii più preciso sulle tue difficoltà. Osservando il tuo snippet di codice, sembra che tu abbia letto solo parte della risposta. Con HTTP/MJPEG devi leggere continuamente i pacchetti TCP e rinviarli, quindi lo pseudo codice nella mia risposta. Suppongo che la chiamata a GetByteArrayFromStream legga parzialmente i dati, quindi rispedisci al tuo cliente solo dati parziali. Devi leggere sul canale TCP fino a quando non si chiude! Controlla quello che ricevi/quello che mandi con wireshark, avrai verità di fondo. Se fraintendiamo il tuo problema, preciso, per favore ... – neuro
Sì, sono abbastanza sicuro che avremo bisogno di andare un po 'più a fondo e usare qualcosa di meno astratto come 'TcpClient'. Attualmente sto cercando di fare la stessa cosa di @arri.me! –