Mercurial > libavformat.hg
annotate librtmp.c @ 6258:2d397bb856a4 libavformat
Pass the composition and ancillary ID for DVB subtitles via extradata instead
of sub_id, this allows detecting when that information is not available and
just decode everything.
In addition extradata is required for many codecs and thus in contrast to
sub_id generally already passed on by any programs using libav*.
Also ask for a sample if we encounter a stream with multiple/changing IDs.
author | reimar |
---|---|
date | Wed, 14 Jul 2010 17:28:40 +0000 |
parents | 24d0c5dec55a |
children |
rev | line source |
---|---|
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
1 /* |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
2 * RTMP network protocol |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
3 * Copyright (c) 2010 Howard Chu |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
4 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
5 * This file is part of FFmpeg. |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
6 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
11 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
16 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
20 */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
21 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
22 /** |
5969
178de7695c6c
Remove explicit filename from Doxygen @file commands.
diego
parents:
5963
diff
changeset
|
23 * @file |
5951 | 24 * RTMP protocol based on http://rtmpdump.mplayerhq.hu/ librtmp |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
25 */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
26 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
27 #include "avformat.h" |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
28 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
29 #include <librtmp/rtmp.h> |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
30 #include <librtmp/log.h> |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
31 |
5952 | 32 static void rtmp_log(int level, const char *fmt, va_list args) |
33 { | |
34 switch (level) { | |
35 default: | |
36 case RTMP_LOGCRIT: level = AV_LOG_FATAL; break; | |
37 case RTMP_LOGERROR: level = AV_LOG_ERROR; break; | |
38 case RTMP_LOGWARNING: level = AV_LOG_WARNING; break; | |
39 case RTMP_LOGINFO: level = AV_LOG_INFO; break; | |
40 case RTMP_LOGDEBUG: level = AV_LOG_VERBOSE; break; | |
41 case RTMP_LOGDEBUG2: level = AV_LOG_DEBUG; break; | |
42 } | |
43 | |
44 av_vlog(NULL, level, fmt, args); | |
45 av_log(NULL, level, "\n"); | |
46 } | |
47 | |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
48 static int rtmp_close(URLContext *s) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
49 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
50 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
51 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
52 RTMP_Close(r); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
53 av_free(r); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
54 return 0; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
55 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
56 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
57 /** |
6199 | 58 * Open RTMP connection and verify that the stream can be played. |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
59 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
60 * URL syntax: rtmp://server[:port][/app][/playpath][ keyword=value]... |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
61 * where 'app' is first one or two directories in the path |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
62 * (e.g. /ondemand/, /flash/live/, etc.) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
63 * and 'playpath' is a file name (the rest of the path, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
64 * may be prefixed with "mp4:") |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
65 * |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
66 * Additional RTMP library options may be appended as |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
67 * space-separated key-value pairs. |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
68 */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
69 static int rtmp_open(URLContext *s, const char *uri, int flags) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
70 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
71 RTMP *r; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
72 int rc; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
73 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
74 r = av_mallocz(sizeof(RTMP)); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
75 if (!r) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
76 return AVERROR(ENOMEM); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
77 |
5951 | 78 switch (av_log_get_level()) { |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
79 default: |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
80 case AV_LOG_FATAL: rc = RTMP_LOGCRIT; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
81 case AV_LOG_ERROR: rc = RTMP_LOGERROR; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
82 case AV_LOG_WARNING: rc = RTMP_LOGWARNING; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
83 case AV_LOG_INFO: rc = RTMP_LOGINFO; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
84 case AV_LOG_VERBOSE: rc = RTMP_LOGDEBUG; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
85 case AV_LOG_DEBUG: rc = RTMP_LOGDEBUG2; break; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
86 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
87 RTMP_LogSetLevel(rc); |
5952 | 88 RTMP_LogSetCallback(rtmp_log); |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
89 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
90 RTMP_Init(r); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
91 if (!RTMP_SetupURL(r, s->filename)) { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
92 rc = -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
93 goto fail; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
94 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
95 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
96 if (flags & URL_WRONLY) |
6203
24d0c5dec55a
Use new librtmp APIs instead of grubbing around in RTMP struct
hyc
parents:
6199
diff
changeset
|
97 RTMP_EnableWrite(r); |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
98 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
99 if (!RTMP_Connect(r, NULL) || !RTMP_ConnectStream(r, 0)) { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
100 rc = -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
101 goto fail; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
102 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
103 |
5951 | 104 s->priv_data = r; |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
105 s->is_streamed = 1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
106 return 0; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
107 fail: |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
108 av_free(r); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
109 return rc; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
110 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
111 |
6068 | 112 static int rtmp_write(URLContext *s, const uint8_t *buf, int size) |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
113 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
114 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
115 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
116 return RTMP_Write(r, buf, size); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
117 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
118 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
119 static int rtmp_read(URLContext *s, uint8_t *buf, int size) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
120 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
121 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
122 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
123 return RTMP_Read(r, buf, size); |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
124 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
125 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
126 static int rtmp_read_pause(URLContext *s, int pause) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
127 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
128 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
129 |
6203
24d0c5dec55a
Use new librtmp APIs instead of grubbing around in RTMP struct
hyc
parents:
6199
diff
changeset
|
130 if (!RTMP_Pause(r, pause)) |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
131 return -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
132 return 0; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
133 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
134 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
135 static int64_t rtmp_read_seek(URLContext *s, int stream_index, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
136 int64_t timestamp, int flags) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
137 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
138 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
139 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
140 if (flags & AVSEEK_FLAG_BYTE) |
5962 | 141 return AVERROR(ENOSYS); |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
142 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
143 /* seeks are in milliseconds */ |
5963 | 144 if (stream_index < 0) |
145 timestamp = av_rescale_rnd(timestamp, 1000, AV_TIME_BASE, | |
146 flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP); | |
147 | |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
148 if (!RTMP_SendSeek(r, timestamp)) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
149 return -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
150 return timestamp; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
151 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
152 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
153 static int rtmp_get_file_handle(URLContext *s) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
154 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
155 RTMP *r = s->priv_data; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
156 |
6203
24d0c5dec55a
Use new librtmp APIs instead of grubbing around in RTMP struct
hyc
parents:
6199
diff
changeset
|
157 return RTMP_Socket(r); |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
158 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
159 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
160 URLProtocol rtmp_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
161 "rtmp", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
162 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
163 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
164 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
165 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
166 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
167 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
168 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
169 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
170 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
171 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
172 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
173 URLProtocol rtmpt_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
174 "rtmpt", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
175 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
176 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
177 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
178 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
179 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
180 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
181 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
182 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
183 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
184 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
185 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
186 URLProtocol rtmpe_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
187 "rtmpe", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
188 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
189 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
190 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
191 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
192 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
193 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
194 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
195 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
196 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
197 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
198 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
199 URLProtocol rtmpte_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
200 "rtmpte", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
201 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
202 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
203 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
204 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
205 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
206 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
207 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
208 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
209 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
210 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
211 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
212 URLProtocol rtmps_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
213 "rtmps", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
214 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
215 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
216 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
217 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
218 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
219 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
220 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
221 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
222 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
223 }; |