[FFmpeg-trac] #4840(undetermined:new): MJPEG streaming issues

FFmpeg trac at avcodec.org
Thu Sep 10 05:43:28 CEST 2015

#4840: MJPEG streaming issues
             Reporter:  w3sip         |                     Type:  defect
               Status:  new           |                 Priority:  normal
            Component:  undetermined  |                  Version:  2.7
             Keywords:                |               Blocked By:
             Blocking:                |  Reproduced by developer:  0
Analyzed by developer:  0             |
 - mpjpeg demux is not selected, resulting in multipart MIME headers to be
 read as part of the frame
 - when selected, it fails to parse the headers in some cases
 - when it provides a jpg frame, the frame fails to be decoded

 - test environment consists of ffserver serving 2 jpg files over HTTP
 - client code reads the input via HTTP URI and reads compressed frames
 using av_read_frame (no decoding is performed at that stage)
 - frame data is passed further down the pipeline, where it is decoded
 using avcodec_decode_video2
 - version of the library used: 2.8

 My take on what is going on:
 1) When matching based on MIME type occurs in libavformat/format.c, two
 strings are compared literally. So, if MIME type is provided as
 'multipart/x-mixed-replace;boundary=ffserver', it will never match the
 'multipart/x-mixed-replace;boundary', which is part of MPJPEG demux
 2) Multipart header parsing will fail for a few reasons:
 - trailing/leading space within HTTP header will throw the parser off
 - empty line following the MIME headers will be parsed as a header, and
 cause a failure
 3) decoding seems to fail because of how EOI (d9) marker is handled. I
 have little knowledge of JPG structure, but the attached change makes a
 difference between failure and success. Doesn't make the change correct,
 but at least it pinpoints the cause.

 I'm attaching two files:
 1) Proposed patch -- if needed, can be submitted via pull request.
 2) x.jpg -- saved JPG frame which fails to decode

Ticket URL: <https://trac.ffmpeg.org/ticket/4840>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list