[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