Mercurial > libavformat.hg
annotate librtmp.c @ 5982:f74198942337 libavformat
Mark av_metadata_set() as deprecated, and use av_metadata_set2()
in its place.
av_metadata_set() is going to be dropped at the next major bump.
author | stefano |
---|---|
date | Sun, 25 Apr 2010 14:27:42 +0000 |
parents | 178de7695c6c |
children | 7fdda2416684 |
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 /** |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
58 * Opens RTMP connection and verifies that the stream can be played. |
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) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
97 r->Link.protocol |= RTMP_FEATURE_WRITE; |
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 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
112 static int rtmp_write(URLContext *s, uint8_t *buf, int size) |
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 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
130 if (pause) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
131 r->m_pauseStamp = |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
132 r->m_channelTimestamp[r->m_mediaChannel]; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
133 if (!RTMP_SendPause(r, pause, r->m_pauseStamp)) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
134 return -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
135 return 0; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
136 } |
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 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
|
139 int64_t timestamp, int flags) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
140 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
141 RTMP *r = s->priv_data; |
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 if (flags & AVSEEK_FLAG_BYTE) |
5962 | 144 return AVERROR(ENOSYS); |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
145 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
146 /* seeks are in milliseconds */ |
5963 | 147 if (stream_index < 0) |
148 timestamp = av_rescale_rnd(timestamp, 1000, AV_TIME_BASE, | |
149 flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP); | |
150 | |
5904
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
151 if (!RTMP_SendSeek(r, timestamp)) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
152 return -1; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
153 return timestamp; |
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 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
156 static int rtmp_get_file_handle(URLContext *s) |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
157 { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
158 RTMP *r = s->priv_data; |
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 return r->m_sb.sb_socket; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
161 } |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
162 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
163 URLProtocol rtmp_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
164 "rtmp", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
165 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
166 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
167 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
168 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
169 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
170 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
171 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
172 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
173 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
174 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
175 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
176 URLProtocol rtmpt_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
177 "rtmpt", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
178 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
179 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
180 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
181 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
182 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
183 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
184 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
185 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
186 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
187 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
188 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
189 URLProtocol rtmpe_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
190 "rtmpe", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
191 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
192 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
193 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
194 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
195 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
196 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
197 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
198 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
199 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
200 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
201 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
202 URLProtocol rtmpte_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
203 "rtmpte", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
204 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
205 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
206 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
207 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
208 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
209 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
210 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
211 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
212 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
213 }; |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
214 |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
215 URLProtocol rtmps_protocol = { |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
216 "rtmps", |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
217 rtmp_open, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
218 rtmp_read, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
219 rtmp_write, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
220 NULL, /* seek */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
221 rtmp_close, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
222 NULL, /* next */ |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
223 rtmp_read_pause, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
224 rtmp_read_seek, |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
225 rtmp_get_file_handle |
5564d7f2ed5a
Implement support to RTMP, RTMPT, RTMPE, RTMPTE, RTMPS protocols via
stefano
parents:
diff
changeset
|
226 }; |