diff options
author | Zalewa PL <zalewapl@gmail.com> | 2012-03-10 18:32:02 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-10 18:32:02 +0100 |
commit | 0d2f4eedc8a46892471c51cbc7a78cd9a489771a (patch) | |
tree | 41ba22871572ef0b876da35381cd4cd52bbcf73e | |
parent | 2ff540a0fe02c2d2588a7d2aa7820e66a615de95 (diff) | |
download | ffmpeg-0d2f4eedc8a46892471c51cbc7a78cd9a489771a.tar.gz |
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.
-rw-r--r-- | libavformat/mpjpeg.c | 9 |
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; |