summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-23 22:57:25 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-23 22:57:25 +0300
commit1d4d1bff82f70c7cde37b1beaf1b55c72b3d6618 (patch)
tree9840f3aad145d33c9a6cda7ba020dae439123d4d
parent4583c12a2c29c9644acc15837c2f18ba7750bf1e (diff)
downloadmpv-1d4d1bff82f70c7cde37b1beaf1b55c72b3d6618.tar.bz2
mpv-1d4d1bff82f70c7cde37b1beaf1b55c72b3d6618.tar.xz
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).
-rw-r--r--libmpdemux/demux_lavf.c12
-rw-r--r--stream/stream.h1
-rw-r--r--stream/stream_ffmpeg.c7
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)