From 0d2f4eedc8a46892471c51cbc7a78cd9a489771a Mon Sep 17 00:00:00 2001 From: Zalewa PL Date: Sat, 10 Mar 2012 18:32:02 +0100 Subject: mpjpeg: video streaming will no longer break and stop on Firefox mpjpeg video streamings would break and stop on Firefox after 1 - 30 seconds. In order to fix this, two changes were made: 1. Replaced all occurrences of '\n' character in mjpeg metadata with occurences of "\r\n". 2. Added "Content-length: " metadata entry for each sent frame. The change has been tested on Google Chrome 17.0.963.78 and Firefox 10.0.2 on lubuntu 11.10 and the streaming seems to work fine now. --- libavformat/mpjpeg.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'libavformat/mpjpeg.c') diff --git a/libavformat/mpjpeg.c b/libavformat/mpjpeg.c index 46a98b3d44..dce53ce3de 100644 --- a/libavformat/mpjpeg.c +++ b/libavformat/mpjpeg.c @@ -28,7 +28,7 @@ static int mpjpeg_write_header(AVFormatContext *s) { uint8_t buf1[256]; - snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG); + snprintf(buf1, sizeof(buf1), "--%s\r\n", BOUNDARY_TAG); avio_write(s->pb, buf1, strlen(buf1)); avio_flush(s->pb); return 0; @@ -38,11 +38,14 @@ static int mpjpeg_write_packet(AVFormatContext *s, AVPacket *pkt) { uint8_t buf1[256]; - snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\n\n"); + snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\r\n"); + avio_write(s->pb, buf1, strlen(buf1)); + + snprintf(buf1, sizeof(buf1), "Content-length: %d\r\n\r\n", pkt->size); avio_write(s->pb, buf1, strlen(buf1)); avio_write(s->pb, pkt->data, pkt->size); - snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG); + snprintf(buf1, sizeof(buf1), "\r\n--%s\r\n", BOUNDARY_TAG); avio_write(s->pb, buf1, strlen(buf1)); avio_flush(s->pb); return 0; -- cgit v1.2.3