summaryrefslogtreecommitdiff
path: root/libavformat/mpjpeg.c
diff options
context:
space:
mode:
authorZalewa PL <zalewapl@gmail.com>2012-03-10 18:32:02 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-03-10 18:32:02 +0100
commit0d2f4eedc8a46892471c51cbc7a78cd9a489771a (patch)
tree41ba22871572ef0b876da35381cd4cd52bbcf73e /libavformat/mpjpeg.c
parent2ff540a0fe02c2d2588a7d2aa7820e66a615de95 (diff)
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: <packet-size>" 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.
Diffstat (limited to 'libavformat/mpjpeg.c')
-rw-r--r--libavformat/mpjpeg.c9
1 files changed, 6 insertions, 3 deletions
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;