У меня есть приложение 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;
Ну, если вы хотите, чтобы ваш клиент увидел поток 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
Как сказал Спарр, нет способа сортировать их с использованием . Сортировать
напрямую, но вы все равно можете переместить их вручную с чем-то вроде:
$("#mylist li:eq(1)").insertAfter($("#mylist li:eq(2)"));
-121 3064102- Что такое кодировка данных изображения? Это Base64?
В основном вам придется анализировать данные изображения из ответа, Base64 декодирует его в байты, а затем отправлять изображение клиенту.
Хорошее объяснение того, как выглядит поток mjpeg. Я хотел бы добавить совет: всегда есть 2 символа новой строки перед фактическими данными. Если вы сделаете это одной строкой, это не сработает.
string header =
"--myboundary\r\n" +
"Content-Type:image/jpeg\r\n" +
"Content-Length:" + length.ToString() + "\r\n\r\n";