From 1d4d1bff82f70c7cde37b1beaf1b55c72b3d6618 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Fri, 23 Apr 2010 22:57:25 +0300 Subject: [PATCH] stream_ffmpeg, demux_lavf: Use flv demuxer for rtmp streams Use lavf's flv demuxer for rtmp/rtmps/... stream types. Letting generic format probing handle this could work, but with the current probing implementation it'd at least depend on not-really-guaranteed details of the stream layer (probing different formats and then decoding depends on seeking back in between; rtmp streams don't support such seeking directly so would need to rely on details of caching behavior). --- libmpdemux/demux_lavf.c | 12 +++++++----- stream/stream.h | 1 + stream/stream_ffmpeg.c | 7 +++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 3140b5459f..1222673d87 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -135,15 +135,17 @@ static int lavf_check_file(demuxer_t *demuxer){ av_register_all(); - if (lavfdopts->format) { - if (strcmp(lavfdopts->format, "help") == 0) { + char *format = lavfdopts->format; + if (!format) + format = demuxer->stream->lavf_type; + if (format) { + if (strcmp(format, "help") == 0) { list_formats(); return 0; } - priv->avif= av_find_input_format(lavfdopts->format); + priv->avif = av_find_input_format(format); if (!priv->avif) { - mp_msg(MSGT_DEMUX,MSGL_FATAL,"Unknown lavf format %s\n", - lavfdopts->format); + mp_msg(MSGT_DEMUX, MSGL_FATAL, "Unknown lavf format %s\n", format); return 0; } mp_msg(MSGT_DEMUX,MSGL_INFO,"Forced lavf %s demuxer\n", priv->avif->long_name); diff --git a/stream/stream.h b/stream/stream.h index 523da2ce00..62a2ee8d4e 100644 --- a/stream/stream.h +++ b/stream/stream.h @@ -160,6 +160,7 @@ typedef struct stream { void* cache_data; void* priv; // used for DVD, TV, RTSP etc char* url; // strdup() of filename/url + char *lavf_type; // name of expected demuxer type for lavf struct MPOpts *opts; #ifdef CONFIG_NETWORK streaming_ctrl_t *streaming_ctrl; diff --git a/stream/stream_ffmpeg.c b/stream/stream_ffmpeg.c index 30d63001d0..fe8df9446d 100644 --- a/stream/stream_ffmpeg.c +++ b/stream/stream_ffmpeg.c @@ -24,6 +24,7 @@ #include "stream.h" #include "m_option.h" #include "m_struct.h" +#include "libmpdemux/demuxer.h" static int fill_buffer(stream_t *s, char *buffer, int max_len) { @@ -102,6 +103,12 @@ static int open_f(stream_t *stream, int mode, void *opts, int *file_format) if (!dummy && url_open(&ctx, filename, flags) < 0) goto out; + mp_msg(MSGT_OPEN, MSGL_V, "[ffmpeg] libavformat URL type: %s\n", + ctx->prot->name); + if (!strncmp("rtmp", ctx->prot->name, 4)) { + *file_format = DEMUXER_TYPE_LAVF; + stream->lavf_type = "flv"; + } stream->priv = ctx; size = dummy ? 0 : url_filesize(ctx); if (size >= 0)