У меня есть небольшой сервер, написанный на C, который отправляет Motion-JPEG в браузер.Это было хорошо в течение многих лет, но теперь мне нужно отправлять очень медленные обновления (1 кадр каждые несколько секунд), и я замечаю, что, как у меня сейчас, N-й кадр отображается в браузере только после того, как я отправляю (N + 1) й кадр.Я провел день, пытаясь изменить порядок вещей, пытаясь заставить кадр отображаться при отправке, но мне не повезло.Отсюда мой вопрос ... В ответ на HTTP GET я делаю следующее:
В первом отправляемом кадре:
socPrintf(sfd,
"HTTP/1.1 200 OK\r\n" \
"Cache-Control: no-cache\r\n" \
"Pragma: no-cache\r\n" \
"Connection: keep-alive\r\n" \
"Content-Type: multipart/x-mixed-replace; boundary=nextframe\r\n\r\n");
socPrintf(sfd,"--nextframe\r\nContent-Type: image/jpeg\r\n\r\n");
socWrite(sfd, jpgimage, imagesize);
, затем для всех последующих отправляемых кадров:
socPrintf(sfd,"--nextframe\r\nContent-Type: image/jpeg\r\n\r\n");
socWrite(sfd, jpgimage, imagesize);
После реализации проблемы «один кадр за кадром», это имеет смысл, потому что тег границы отправляется перед изображением;следовательно, браузер действительно не знает, где находится конец изображения;поэтому он не отвечает до следующего кадра.Таким образом, кажется логичным, что граничный тег должен быть отправлен после изображения;однако это выталкивает первое изображение как следует, но все после этого терпит неудачу (изображение не отображается).
Любые идеи о том, что я мог бы сделать здесь неправильно?