Browse Source

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.
tags/n0.11
Zalewa PL Michael Niedermayer 14 years ago
parent
commit
0d2f4eedc8
1 changed files with 6 additions and 3 deletions
  1. +6
    -3
      libavformat/mpjpeg.c

+ 6
- 3
libavformat/mpjpeg.c View File

@@ -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;


Loading…
Cancel
Save