HttpWebResponse с MJPEG и multipart/x-mixed-replace; граница = - myboundary тип контента ответа от камеры видеонаблюдения, не работающей

У меня есть приложение ASP.NET, что я должен показать видео канал от камеры видеонаблюдения. Видео канал имеет тип контента 'multipart/x-mixed-replace; граница = - myboundary' с данными изображения между границами. Мне нужна помощь передать тот поток данных до моей страницы так, чтобы клиентский плагин, который я имею, мог использовать поток, как это было бы, если я просмотрел к веб-интерфейсу камеры непосредственно. Следующий код не работает:

//Get response data
byte[] data = HtmlParser.GetByteArrayFromStream(response.GetResponseStream());
if (data != null)
{
 HttpContext.Current.Response.OutputStream.Write(data, 0, data.Length);
}
return;
7
задан arri.io 13 January 2010 в 22:59
поделиться

3 ответа

Ну, если вы хотите, чтобы ваш клиент увидел поток mjpeg, вам нужно отправить весь http-ответ. HTTP-клиенту, такому как браузер или медиаплеер, такой как VLC, нужен поток mjpeg, который выглядит так:

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]

...

ПРИМЕЧАНИЕ: Как сказал Ergousha в ответе, у вас должна быть пустая строка после поля Content-length.

Кстати, почему бы не перенаправить клиента непосредственно на поток mjpeg?

Например, вы можете использовать http://ipcam/mjpg/video.mjpg IP-камеры AXIS.

Если вам просто нужно изображение через HTTP, вы должны установить правильный заголовок и MIME content-type image/jpeg. Чтобы декодировать изображение, нужно получить байтовые данные, и вы получите кодировку jpeg. Затем вам нужно декодировать jpeg, чтобы получить изображение в определенном формате (что-то вроде yuv420p, я думаю). Я проверил на своей ip-камере, и ее поток не кодируется base64, я думаю.

Уточните ваши потребности, я постараюсь помочь больше.

my2c

EDIT:

Ну, я полагаю, что вы делаете что-то вроде :

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

Чтобы сказать, что вы должны послать правильный заголовок клиенту. Чтобы быть уверенным, используйте инструмент типа wireshark, чтобы шпионить за пакетом и убедитесь, что после того, как ваш клиент выдал HTTP GET, вы посылаете ему правильный поток MJPEG (как тот, который я описал в начале своего поста ...)

m2c

13
ответ дан 6 December 2019 в 12:51
поделиться

Как сказал Спарр, нет способа сортировать их с использованием . Сортировать напрямую, но вы все равно можете переместить их вручную с чем-то вроде:

$("#mylist li:eq(1)").insertAfter($("#mylist li:eq(2)"));
-121 3064102-

Что такое кодировка данных изображения? Это Base64?

В основном вам придется анализировать данные изображения из ответа, Base64 декодирует его в байты, а затем отправлять изображение клиенту.

0
ответ дан 6 December 2019 в 12:51
поделиться

Хорошее объяснение того, как выглядит поток mjpeg. Я хотел бы добавить совет: всегда есть 2 символа новой строки перед фактическими данными. Если вы сделаете это одной строкой, это не сработает.

        string header =
            "--myboundary\r\n" +
            "Content-Type:image/jpeg\r\n" +
            "Content-Length:" + length.ToString() + "\r\n\r\n";
3
ответ дан 6 December 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: