Mercurial > libavformat.hg
annotate librtmp.c @ 6260:5c17c20dd67a libavformat
In ogg muxer, use dyn buffer to compute crc of the page, fix muxing with pipe
when page buffer is bigger than default buffer size. Max page is 65k.
| author | bcoudurier |
|---|---|
| date | Wed, 14 Jul 2010 23:21:18 +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 }; |
