[Ffmpeg-devel] single jpeg stream

Otávio Ribeiro otavio
Sun Jun 18 13:07:08 CEST 2006


Hi again,

i've looked at bug's database and find the bug n. 801459. It's a very
old bug and still oppend. Maybe i can put this patch there as a comment.
Is that ok?

regards,
Ot?vio Ribeiro

Em Dom, 2006-06-18 ?s 07:55 -0300, Ot?vio Ribeiro escreveu:
> Hi for all,
> 
> i started using ffmpeg to broadcast an image from a webcam. It's
> perfect, but, when a try to get a single jpeg image (thumbnail) the
> browser keep downloading it forever.
> 
> So i've made a patch to correct this. In my solution a new flag has been
> created at FFStream structure to indicate that this is a single frame
> stream. With this is possible to close the connection after a frame
> transmission. I've also corrected the mime-type at libavformat.
> 
> I don't known if this is a good way to solve this but decide to share
> it. Maybe can be used by someone.
> 
> tanks and waiting for suggestions,
> Ot?vio Ribeiro
> 
> 
> Follow the patch:
> 
> *** ./ffmpeg/ffserver.c 2006-06-18 10:44:19.297702512 -0300
> --- ./ffmpeg_novo/ffserver.c    2006-06-18 10:48:30.583501264 -0300
> *************** typedef struct FFStream {
> *** 211,216 ****
> --- 211,218 ----
>       int multicast_port; /* first port used for multicast */
>       int multicast_ttl;
>       int loop; /* if true, send the stream in loops (only meaningful if
> file) */
> +
> +     char single_frame; /* only single frame */
> 
>       /* feed specific */
>       int feed_opened;     /* true if someone is writing to the feed */
> *************** static int handle_connection(HTTPContext
> *** 863,868 ****
> --- 865,875 ----
>           }
>           if (http_send_data(c) < 0)
>               return -1;
> +
> +         //Check if it is a single jpeg frame 123
> +         if(c->stream->single_frame && c->data_count >
> c->cur_frame_bytes && c->cur_frame_bytes > 0){
> +             close_connection(c);
> +         }
>           break;
>       case HTTPSTATE_RECEIVE_DATA:
>           /* no need to read if no events */
> *************** static int parse_ffconfig(const char *fi
> *** 3979,3985 ****
> --- 3986,3992 ----
>                   stream->stream_type = STREAM_TYPE_LIVE;
>                   /* jpeg cannot be used here, so use single frame jpeg
> */
>                   if (!strcmp(arg, "jpeg"))
> -                     strcpy(arg, "mjpeg");
> +                     stream->single_frame=1;
>                   stream->fmt = guess_stream_format(arg, NULL, NULL);
>                   if (!stream->fmt) {
>                       fprintf(stderr, "%s:%d: Unknown Format: %s\n",
> 
> 
> *** ./ffmpeg/libavformat/raw.c  2006-06-18 10:44:19.241711024 -0300
> --- ./ffmpeg_novo/libavformat/raw.c     2006-06-17 19:30:57.000000000
> -0300
> *************** AVInputFormat ingenient_iformat = {
> *** 648,653 ****
> --- 648,666 ----
>   };
> 
>   #ifdef CONFIG_MUXERS
> + AVOutputFormat jpeg_oformat = {
> +     "jpeg",
> +     "JPEG single image",
> +     "image/jpeg",
> +     "jpg,jpeg",
> +     0,
> +     0,
> +     CODEC_ID_MJPEG,
> +     raw_write_header,
> +     raw_write_packet,
> +     raw_write_trailer,
> + };
> +
>   AVOutputFormat mjpeg_oformat = {
>       "mjpeg",
>       "MJPEG video",
> *************** int raw_init(void)
> *** 854,859 ****
> --- 867,873 ----
> 
>       av_register_input_format(&mjpeg_iformat);
>       av_register_output_format(&mjpeg_oformat);
> +     av_register_output_format(&jpeg_oformat);
> 
>       av_register_input_format(&ingenient_iformat);
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel





More information about the ffmpeg-devel mailing list