Mercurial > mplayer.hg
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; |