Mercurial > mplayer.hg
annotate stream/stream_ffmpeg.c @ 34410:bb440bfcade9
configure: Simplify Theora check.
The Theora check does some very elaborate tests to account for issues in
old libtheora versions. Nowadays libtheora is stable and easy to test
for, so there is no longer a need for the extra complexity.
Also drop the Theora check that linked against tremor/bitwise.c.
Its purpose is now lost in the mists of time.
author | diego |
---|---|
date | Wed, 04 Jan 2012 10:39:38 +0000 (2012-01-04) |
parents | 30f5e5cd3676 |
children | 36ef1a75aa48 |
rev | line source |
---|---|
30426
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
1 /* |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
2 * This file is part of MPlayer. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
3 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
7 * (at your option) any later version. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
8 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
12 * GNU General Public License for more details. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
13 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
17 */ |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30190
diff
changeset
|
18 |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
19 #include "config.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
20 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
21 #include "libavformat/avformat.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
22 #include "libavformat/avio.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
23 #include "mp_msg.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
24 #include "stream.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
25 #include "m_option.h" |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
26 #include "m_struct.h" |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
32794
diff
changeset
|
27 #include "av_helpers.h" |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
28 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
29 static int fill_buffer(stream_t *s, char *buffer, int max_len) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
30 { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
31 int r = url_read_complete(s->priv, buffer, max_len); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
32 return (r <= 0) ? -1 : r; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
33 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
34 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
35 static int write_buffer(stream_t *s, char *buffer, int len) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
36 { |
32794
77d81e27a176
Fix stream_write_buffer to make sure all requested bytes are written
ranma
parents:
31161
diff
changeset
|
37 /* url_write retries internally on short writes and EAGAIN */ |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
38 int r = url_write(s->priv, buffer, len); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
39 return (r <= 0) ? -1 : r; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
40 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
41 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
42 static int seek(stream_t *s, off_t newpos) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
43 { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
44 s->pos = newpos; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
45 if (url_seek(s->priv, s->pos, SEEK_SET) < 0) { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
46 s->eof = 1; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
47 return 0; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
48 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
49 return 1; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
50 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
51 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
52 static int control(stream_t *s, int cmd, void *arg) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
53 { |
31161
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
54 int64_t size, ts; |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
55 double pts; |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
56 switch(cmd) { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
57 case STREAM_CTRL_GET_SIZE: |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
58 size = url_filesize(s->priv); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
59 if(size >= 0) { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
60 *(off_t *)arg = size; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
61 return 1; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
62 } |
31161
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
63 break; |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
64 case STREAM_CTRL_SEEK_TO_TIME: |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
65 pts = *(double *)arg; |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
66 ts = pts * AV_TIME_BASE; |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
67 ts = av_url_read_seek(s->priv, -1, ts, 0); |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
68 if (ts >= 0) |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
69 return 1; |
0255b5679645
Add support for STREAM_CTRL_SEEK_TO_TIME in ffmpeg streams
hyc
parents:
30457
diff
changeset
|
70 break; |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
71 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
72 return STREAM_UNSUPPORTED; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
73 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
74 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
75 static void close_f(stream_t *stream) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
76 { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
77 url_close(stream->priv); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
78 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
79 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
80 static const char prefix[] = "ffmpeg://"; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
81 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
82 static int open_f(stream_t *stream, int mode, void *opts, int *file_format) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
83 { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
84 int flags = 0; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
85 const char *filename; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
86 URLContext *ctx = NULL; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
87 int res = STREAM_ERROR; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
88 int64_t size; |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
89 int dummy; |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
90 |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
32794
diff
changeset
|
91 init_avformat(); |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
92 if (mode == STREAM_READ) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
93 flags = URL_RDONLY; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
94 else if (mode == STREAM_WRITE) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
95 flags = URL_WRONLY; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
96 else { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
97 mp_msg(MSGT_OPEN, MSGL_ERR, "[ffmpeg] Unknown open mode %d\n", mode); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
98 res = STREAM_UNSUPPORTED; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
99 goto out; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
100 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
101 |
30189
787bcd39e929
Simplify ffmpeg stream support, we (so far) do not need any special option parsing.
reimar
parents:
29886
diff
changeset
|
102 if (stream->url) |
787bcd39e929
Simplify ffmpeg stream support, we (so far) do not need any special option parsing.
reimar
parents:
29886
diff
changeset
|
103 filename = stream->url; |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
104 else { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
105 mp_msg(MSGT_OPEN, MSGL_ERR, "[ffmpeg] No URL\n"); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
106 goto out; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
107 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
108 if (!strncmp(filename, prefix, strlen(prefix))) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
109 filename += strlen(prefix); |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
110 dummy = !strncmp(filename, "rtsp:", 5); |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
111 mp_msg(MSGT_OPEN, MSGL_V, "[ffmpeg] Opening %s\n", filename); |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
112 |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
113 if (!dummy && url_open(&ctx, filename, flags) < 0) |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
114 goto out; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
115 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
116 stream->priv = ctx; |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
117 size = dummy ? 0 : url_filesize(ctx); |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
118 if (size >= 0) |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
119 stream->end_pos = size; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
120 stream->type = STREAMTYPE_FILE; |
29886
988c42cb595a
Fall back to read-based seeking for ffmpeg:// URLs when is_streamed is set
reimar
parents:
29881
diff
changeset
|
121 stream->seek = seek; |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
122 if (dummy || ctx->is_streamed) { |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
123 stream->type = STREAMTYPE_STREAM; |
29886
988c42cb595a
Fall back to read-based seeking for ffmpeg:// URLs when is_streamed is set
reimar
parents:
29881
diff
changeset
|
124 stream->seek = NULL; |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
125 } |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
126 if (!dummy) { |
30457 | 127 stream->fill_buffer = fill_buffer; |
128 stream->write_buffer = write_buffer; | |
129 stream->control = control; | |
130 stream->close = close_f; | |
30456
0eee9d2e7a1d
Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme.
reimar
parents:
30426
diff
changeset
|
131 } |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
132 res = STREAM_OK; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
133 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
134 out: |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
135 return res; |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
136 } |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
137 |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
138 const stream_info_t stream_info_ffmpeg = { |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
139 "FFmpeg", |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
140 "ffmpeg", |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
141 "", |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
142 "", |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
143 open_f, |
30190
561453831add
Support rtmp:// URLs directly instead of requiring ffmpeg://rtmp://
reimar
parents:
30189
diff
changeset
|
144 { "ffmpeg", "rtmp", NULL }, |
30189
787bcd39e929
Simplify ffmpeg stream support, we (so far) do not need any special option parsing.
reimar
parents:
29886
diff
changeset
|
145 NULL, |
29881
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
146 1 // Urls are an option string |
5797dc687a8e
Add preliminary support for streaming via FFmpeg's URProtocol functions.
reimar
parents:
diff
changeset
|
147 }; |