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 /libavformat/mpjpeg.c | |
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.
Diffstat (limited to 'libavformat/mpjpeg.c')
-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; |