comparison libmpdemux/demux_lavf.c @ 30456:0eee9d2e7a1d

Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme. ffmpeg://rtsp://... will play a rtsp stream via FFmpeg.
author reimar
date Wed, 03 Feb 2010 22:32:48 +0000
parents b636fc3f4960
children 04bdf393175b
comparison
equal deleted inserted replaced
30455:cfebff6a5ef9 30456:0eee9d2e7a1d
153 mp_msg(MSGT_DEMUX,MSGL_INFO,"Forced lavf %s demuxer\n", priv->avif->long_name); 153 mp_msg(MSGT_DEMUX,MSGL_INFO,"Forced lavf %s demuxer\n", priv->avif->long_name);
154 return DEMUXER_TYPE_LAVF; 154 return DEMUXER_TYPE_LAVF;
155 } 155 }
156 156
157 probe_data_size = stream_read(demuxer->stream, priv->buffer, PROBE_BUF_SIZE); 157 probe_data_size = stream_read(demuxer->stream, priv->buffer, PROBE_BUF_SIZE);
158 if(probe_data_size <= 0) 158 if(probe_data_size < 0)
159 return 0; 159 return 0;
160 avpd.filename= demuxer->stream->url; 160 avpd.filename= demuxer->stream->url;
161 if (!strncmp(avpd.filename, "ffmpeg://", 9))
162 avpd.filename += 9;
161 avpd.buf= priv->buffer; 163 avpd.buf= priv->buffer;
162 avpd.buf_size= probe_data_size; 164 avpd.buf_size= probe_data_size;
163 165
164 priv->avif= av_probe_input_format(&avpd, 1); 166 priv->avif= av_probe_input_format(&avpd, probe_data_size > 0);
165 if(!priv->avif){ 167 if(!priv->avif){
166 mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: no clue about this gibberish!\n"); 168 mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: no clue about this gibberish!\n");
167 return 0; 169 return 0;
168 }else 170 }else
169 mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: %s\n", priv->avif->long_name); 171 mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: %s\n", priv->avif->long_name);
456 mp_msg(MSGT_HEADER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", opt_avopt); 458 mp_msg(MSGT_HEADER,MSGL_ERR, "Your options /%s/ look like gibberish to me pal\n", opt_avopt);
457 return NULL; 459 return NULL;
458 } 460 }
459 } 461 }
460 462
461 if(demuxer->stream->url) 463 if(demuxer->stream->url) {
464 if (!strncmp(demuxer->stream->url, "ffmpeg://rtsp:", 14))
465 strncpy(mp_filename, demuxer->stream->url + 9, sizeof(mp_filename)-3);
466 else
462 strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3); 467 strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3);
463 else 468 } else
464 strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3); 469 strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3);
465 470
466 priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0, 471 priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0,
467 demuxer->stream, mp_read, NULL, mp_seek); 472 demuxer->stream, mp_read, NULL, mp_seek);
468 priv->pb->is_streamed = !demuxer->stream->end_pos || (demuxer->stream->flags & MP_STREAM_SEEK) != MP_STREAM_SEEK; 473 priv->pb->is_streamed = !demuxer->stream->end_pos || (demuxer->stream->flags & MP_STREAM_SEEK) != MP_STREAM_SEEK;