summaryrefslogtreecommitdiffstats
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
parent2ff540a0fe02c2d2588a7d2aa7820e66a615de95 (diff)
downloadffmpeg-streaming-0d2f4eedc8a46892471c51cbc7a78cd9a489771a.zip
ffmpeg-streaming-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.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavformat/mpjpeg.c b/libavformat/mpjpeg.c
index 46a98b3..dce53ce 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;
OpenPOWER on IntegriCloud