почему клиент отображает движение jpeg на один кадр позади с multipart / x-mixed-replace - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть небольшой сервер, написанный на 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);

После реализации проблемы «один кадр за кадром», это имеет смысл, потому что тег границы отправляется перед изображением;следовательно, браузер действительно не знает, где находится конец изображения;поэтому он не отвечает до следующего кадра.Таким образом, кажется логичным, что граничный тег должен быть отправлен после изображения;однако это выталкивает первое изображение как следует, но все после этого терпит неудачу (изображение не отображается).

Любые идеи о том, что я мог бы сделать здесь неправильно?

...