Prefix non-static RTSP functions with ff_.
Originally committed as revision 21974 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
fc5607f862
commit
3307e6ea86
@ -2693,7 +2693,7 @@ static int rtsp_parse_request(HTTPContext *c)
|
|||||||
len = sizeof(line) - 1;
|
len = sizeof(line) - 1;
|
||||||
memcpy(line, p, len);
|
memcpy(line, p, len);
|
||||||
line[len] = '\0';
|
line[len] = '\0';
|
||||||
rtsp_parse_line(header, line);
|
ff_rtsp_parse_line(header, line);
|
||||||
p = p1 + 1;
|
p = p1 + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
|
|||||||
while (*p && *p == ' ') p++; // strip trailing spaces.
|
while (*p && *p == ' ') p++; // strip trailing spaces.
|
||||||
|
|
||||||
/* loop on each attribute */
|
/* loop on each attribute */
|
||||||
while (rtsp_next_attr_and_value
|
while (ff_rtsp_next_attr_and_value
|
||||||
(&p, attr, sizeof(attr), value, sizeof(value))) {
|
(&p, attr, sizeof(attr), value, sizeof(value))) {
|
||||||
/* grab the codec extra_data from the config parameter of the fmtp line */
|
/* grab the codec extra_data from the config parameter of the fmtp line */
|
||||||
sdp_parse_fmtp_config_h264(stream, h264_data, attr, value);
|
sdp_parse_fmtp_config_h264(stream, h264_data, attr, value);
|
||||||
|
@ -192,7 +192,7 @@ struct RTPDemuxContext {
|
|||||||
extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
|
extern RTPDynamicProtocolHandler *RTPFirstDynamicPayloadHandler;
|
||||||
void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler);
|
void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler);
|
||||||
|
|
||||||
int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers.
|
int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers.
|
||||||
|
|
||||||
void av_register_rtp_dynamic_payload_handlers(void);
|
void av_register_rtp_dynamic_payload_handlers(void);
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ static int amr_parse_sdp_line(AVFormatContext *s, int st_index,
|
|||||||
while (*p && *p != ' ') p++; /* eat protocol identifier */
|
while (*p && *p != ' ') p++; /* eat protocol identifier */
|
||||||
while (*p && *p == ' ') p++; /* strip trailing spaces */
|
while (*p && *p == ' ') p++; /* strip trailing spaces */
|
||||||
|
|
||||||
while (rtsp_next_attr_and_value(&p, attr, sizeof(attr), value, sizeof(value))) {
|
while (ff_rtsp_next_attr_and_value(&p, attr, sizeof(attr), value, sizeof(value))) {
|
||||||
if (!strcmp(attr, "octet-align"))
|
if (!strcmp(attr, "octet-align"))
|
||||||
octet_align = atoi(value);
|
octet_align = atoi(value);
|
||||||
else if (!strcmp(attr, "crc"))
|
else if (!strcmp(attr, "crc"))
|
||||||
|
@ -250,7 +250,7 @@ static const AttrNameMap attr_names[]=
|
|||||||
/* parse the attribute line from the fmtp a line of an sdp resonse. This
|
/* parse the attribute line from the fmtp a line of an sdp resonse. This
|
||||||
* is broken out as a function because it is used in rtp_h264.c, which is
|
* is broken out as a function because it is used in rtp_h264.c, which is
|
||||||
* forthcoming. */
|
* forthcoming. */
|
||||||
int rtsp_next_attr_and_value(const char **p, char *attr, int attr_size,
|
int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size,
|
||||||
char *value, int value_size)
|
char *value, int value_size)
|
||||||
{
|
{
|
||||||
skip_spaces(p);
|
skip_spaces(p);
|
||||||
@ -279,7 +279,7 @@ static void sdp_parse_fmtp(AVStream *st, const char *p)
|
|||||||
RTPPayloadData *rtp_payload_data = &rtsp_st->rtp_payload_data;
|
RTPPayloadData *rtp_payload_data = &rtsp_st->rtp_payload_data;
|
||||||
|
|
||||||
/* loop on each attribute */
|
/* loop on each attribute */
|
||||||
while (rtsp_next_attr_and_value(&p, attr, sizeof(attr),
|
while (ff_rtsp_next_attr_and_value(&p, attr, sizeof(attr),
|
||||||
value, sizeof(value))) {
|
value, sizeof(value))) {
|
||||||
/* grab the codec extra_data from the config parameter of the fmtp
|
/* grab the codec extra_data from the config parameter of the fmtp
|
||||||
* line */
|
* line */
|
||||||
@ -572,7 +572,7 @@ static int sdp_parse(AVFormatContext *s, const char *content)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* close and free RTSP streams */
|
/* close and free RTSP streams */
|
||||||
void rtsp_close_streams(AVFormatContext *s)
|
void ff_rtsp_close_streams(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
RTSPState *rt = s->priv_data;
|
RTSPState *rt = s->priv_data;
|
||||||
int i;
|
int i;
|
||||||
@ -819,7 +819,7 @@ static void rtsp_parse_transport(RTSPMessageHeader *reply, const char *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf)
|
void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf)
|
||||||
{
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
@ -881,7 +881,7 @@ static void rtsp_skip_packet(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
||||||
unsigned char **content_ptr,
|
unsigned char **content_ptr,
|
||||||
int return_on_interleaved_data)
|
int return_on_interleaved_data)
|
||||||
{
|
{
|
||||||
@ -932,7 +932,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
|||||||
get_word(buf1, sizeof(buf1), &p);
|
get_word(buf1, sizeof(buf1), &p);
|
||||||
reply->status_code = atoi(buf1);
|
reply->status_code = atoi(buf1);
|
||||||
} else {
|
} else {
|
||||||
rtsp_parse_line(reply, p);
|
ff_rtsp_parse_line(reply, p);
|
||||||
av_strlcat(rt->last_reply, p, sizeof(rt->last_reply));
|
av_strlcat(rt->last_reply, p, sizeof(rt->last_reply));
|
||||||
av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply));
|
av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply));
|
||||||
}
|
}
|
||||||
@ -968,7 +968,7 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
||||||
const char *cmd,
|
const char *cmd,
|
||||||
const unsigned char *send_content,
|
const unsigned char *send_content,
|
||||||
int send_content_length)
|
int send_content_length)
|
||||||
@ -1000,30 +1000,30 @@ void rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
|||||||
rt->last_cmd_time = av_gettime();
|
rt->last_cmd_time = av_gettime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd)
|
void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *cmd)
|
||||||
{
|
{
|
||||||
rtsp_send_cmd_with_content_async(s, cmd, NULL, 0);
|
ff_rtsp_send_cmd_with_content_async(s, cmd, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtsp_send_cmd(AVFormatContext *s,
|
void ff_rtsp_send_cmd(AVFormatContext *s,
|
||||||
const char *cmd, RTSPMessageHeader *reply,
|
const char *cmd, RTSPMessageHeader *reply,
|
||||||
unsigned char **content_ptr)
|
unsigned char **content_ptr)
|
||||||
{
|
{
|
||||||
rtsp_send_cmd_async(s, cmd);
|
ff_rtsp_send_cmd_async(s, cmd);
|
||||||
|
|
||||||
rtsp_read_reply(s, reply, content_ptr, 0);
|
ff_rtsp_read_reply(s, reply, content_ptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtsp_send_cmd_with_content(AVFormatContext *s,
|
void ff_rtsp_send_cmd_with_content(AVFormatContext *s,
|
||||||
const char *cmd,
|
const char *cmd,
|
||||||
RTSPMessageHeader *reply,
|
RTSPMessageHeader *reply,
|
||||||
unsigned char **content_ptr,
|
unsigned char **content_ptr,
|
||||||
const unsigned char *send_content,
|
const unsigned char *send_content,
|
||||||
int send_content_length)
|
int send_content_length)
|
||||||
{
|
{
|
||||||
rtsp_send_cmd_with_content_async(s, cmd, send_content, send_content_length);
|
ff_rtsp_send_cmd_with_content_async(s, cmd, send_content, send_content_length);
|
||||||
|
|
||||||
rtsp_read_reply(s, reply, content_ptr, 0);
|
ff_rtsp_read_reply(s, reply, content_ptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1162,7 +1162,7 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
|
|||||||
"RealChallenge2: %s, sd=%s\r\n",
|
"RealChallenge2: %s, sd=%s\r\n",
|
||||||
rt->session_id, real_res, real_csum);
|
rt->session_id, real_res, real_csum);
|
||||||
}
|
}
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code == 461 /* Unsupported protocol */ && i == 0) {
|
if (reply->status_code == 461 /* Unsupported protocol */ && i == 0) {
|
||||||
err = 1;
|
err = 1;
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -1282,7 +1282,7 @@ static int rtsp_read_play(AVFormatContext *s)
|
|||||||
rt->control_uri,
|
rt->control_uri,
|
||||||
(double)rt->seek_timestamp / AV_TIME_BASE);
|
(double)rt->seek_timestamp / AV_TIME_BASE);
|
||||||
}
|
}
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK) {
|
if (reply->status_code != RTSP_STATUS_OK) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1313,7 +1313,7 @@ static int rtsp_setup_input_streams(AVFormatContext *s)
|
|||||||
"Require: com.real.retain-entity-for-setup\r\n",
|
"Require: com.real.retain-entity-for-setup\r\n",
|
||||||
sizeof(cmd));
|
sizeof(cmd));
|
||||||
}
|
}
|
||||||
rtsp_send_cmd(s, cmd, reply, &content);
|
ff_rtsp_send_cmd(s, cmd, reply, &content);
|
||||||
if (!content)
|
if (!content)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
if (reply->status_code != RTSP_STATUS_OK) {
|
if (reply->status_code != RTSP_STATUS_OK) {
|
||||||
@ -1351,7 +1351,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
|
|||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
av_log(s, AV_LOG_INFO, "SDP:\n%s\n", sdp);
|
av_log(s, AV_LOG_INFO, "SDP:\n%s\n", sdp);
|
||||||
rtsp_send_cmd_with_content(s, cmd, reply, NULL, sdp, strlen(sdp));
|
ff_rtsp_send_cmd_with_content(s, cmd, reply, NULL, sdp, strlen(sdp));
|
||||||
av_free(sdp);
|
av_free(sdp);
|
||||||
if (reply->status_code != RTSP_STATUS_OK)
|
if (reply->status_code != RTSP_STATUS_OK)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
@ -1378,7 +1378,7 @@ static int rtsp_setup_output_streams(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtsp_connect(AVFormatContext *s)
|
int ff_rtsp_connect(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
RTSPState *rt = s->priv_data;
|
RTSPState *rt = s->priv_data;
|
||||||
char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128];
|
char host[1024], path[1024], tcpname[1024], cmd[2048], auth[128];
|
||||||
@ -1478,7 +1478,7 @@ redirect:
|
|||||||
"CompanyID: KnKV4M4I/B2FjJ1TToLycw==\r\n"
|
"CompanyID: KnKV4M4I/B2FjJ1TToLycw==\r\n"
|
||||||
"GUID: 00000000-0000-0000-0000-000000000000\r\n",
|
"GUID: 00000000-0000-0000-0000-000000000000\r\n",
|
||||||
sizeof(cmd));
|
sizeof(cmd));
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK) {
|
if (reply->status_code != RTSP_STATUS_OK) {
|
||||||
err = AVERROR_INVALIDDATA;
|
err = AVERROR_INVALIDDATA;
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -1522,7 +1522,7 @@ redirect:
|
|||||||
rt->seek_timestamp = 0; /* default is to start stream at position zero */
|
rt->seek_timestamp = 0; /* default is to start stream at position zero */
|
||||||
return 0;
|
return 0;
|
||||||
fail:
|
fail:
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
if (reply->status_code >=300 && reply->status_code < 400 && s->iformat) {
|
if (reply->status_code >=300 && reply->status_code < 400 && s->iformat) {
|
||||||
av_strlcpy(s->filename, reply->location, sizeof(s->filename));
|
av_strlcpy(s->filename, reply->location, sizeof(s->filename));
|
||||||
@ -1542,7 +1542,7 @@ static int rtsp_read_header(AVFormatContext *s,
|
|||||||
RTSPState *rt = s->priv_data;
|
RTSPState *rt = s->priv_data;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = rtsp_connect(s);
|
ret = ff_rtsp_connect(s);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -1550,7 +1550,7 @@ static int rtsp_read_header(AVFormatContext *s,
|
|||||||
/* do not start immediately */
|
/* do not start immediately */
|
||||||
} else {
|
} else {
|
||||||
if (rtsp_read_play(s) < 0) {
|
if (rtsp_read_play(s) < 0) {
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
@ -1611,7 +1611,7 @@ static int udp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
|
|||||||
if (tcp_fd != -1 && FD_ISSET(tcp_fd, &rfds)) {
|
if (tcp_fd != -1 && FD_ISSET(tcp_fd, &rfds)) {
|
||||||
RTSPMessageHeader reply;
|
RTSPMessageHeader reply;
|
||||||
|
|
||||||
rtsp_read_reply(s, &reply, NULL, 0);
|
ff_rtsp_read_reply(s, &reply, NULL, 0);
|
||||||
/* XXX: parse message */
|
/* XXX: parse message */
|
||||||
if (rt->state != RTSP_STATE_STREAMING)
|
if (rt->state != RTSP_STATE_STREAMING)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1635,7 +1635,7 @@ redo:
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
RTSPMessageHeader reply;
|
RTSPMessageHeader reply;
|
||||||
|
|
||||||
ret = rtsp_read_reply(s, &reply, NULL, 1);
|
ret = ff_rtsp_read_reply(s, &reply, NULL, 1);
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return -1;
|
return -1;
|
||||||
if (ret == 1) /* received '$' */
|
if (ret == 1) /* received '$' */
|
||||||
@ -1751,7 +1751,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
"SET_PARAMETER %s RTSP/1.0\r\n"
|
"SET_PARAMETER %s RTSP/1.0\r\n"
|
||||||
"Unsubscribe: %s\r\n",
|
"Unsubscribe: %s\r\n",
|
||||||
rt->control_uri, rt->last_subscription);
|
rt->control_uri, rt->last_subscription);
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK)
|
if (reply->status_code != RTSP_STATUS_OK)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
rt->need_subscription = 1;
|
rt->need_subscription = 1;
|
||||||
@ -1787,7 +1787,7 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
av_strlcatf(cmd, sizeof(cmd), "%s\r\n", rt->last_subscription);
|
av_strlcatf(cmd, sizeof(cmd), "%s\r\n", rt->last_subscription);
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK)
|
if (reply->status_code != RTSP_STATUS_OK)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
rt->need_subscription = 0;
|
rt->need_subscription = 0;
|
||||||
@ -1809,9 +1809,9 @@ static int rtsp_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
snprintf(cmd, sizeof(cmd) - 1,
|
snprintf(cmd, sizeof(cmd) - 1,
|
||||||
"GET_PARAMETER %s RTSP/1.0\r\n",
|
"GET_PARAMETER %s RTSP/1.0\r\n",
|
||||||
rt->control_uri);
|
rt->control_uri);
|
||||||
rtsp_send_cmd_async(s, cmd);
|
ff_rtsp_send_cmd_async(s, cmd);
|
||||||
} else {
|
} else {
|
||||||
rtsp_send_cmd_async(s, "OPTIONS * RTSP/1.0\r\n");
|
ff_rtsp_send_cmd_async(s, "OPTIONS * RTSP/1.0\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1833,7 +1833,7 @@ static int rtsp_read_pause(AVFormatContext *s)
|
|||||||
snprintf(cmd, sizeof(cmd),
|
snprintf(cmd, sizeof(cmd),
|
||||||
"PAUSE %s RTSP/1.0\r\n",
|
"PAUSE %s RTSP/1.0\r\n",
|
||||||
rt->control_uri);
|
rt->control_uri);
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK) {
|
if (reply->status_code != RTSP_STATUS_OK) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1882,9 +1882,9 @@ static int rtsp_read_close(AVFormatContext *s)
|
|||||||
snprintf(cmd, sizeof(cmd),
|
snprintf(cmd, sizeof(cmd),
|
||||||
"TEARDOWN %s RTSP/1.0\r\n",
|
"TEARDOWN %s RTSP/1.0\r\n",
|
||||||
s->filename);
|
s->filename);
|
||||||
rtsp_send_cmd_async(s, cmd);
|
ff_rtsp_send_cmd_async(s, cmd);
|
||||||
|
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1964,13 +1964,13 @@ static int sdp_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
fail:
|
fail:
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sdp_read_close(AVFormatContext *s)
|
static int sdp_read_close(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,7 +315,7 @@ typedef struct RTSPStream {
|
|||||||
//@}
|
//@}
|
||||||
} RTSPStream;
|
} RTSPStream;
|
||||||
|
|
||||||
void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf);
|
void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf);
|
||||||
|
|
||||||
#if LIBAVFORMAT_VERSION_INT < (53 << 16)
|
#if LIBAVFORMAT_VERSION_INT < (53 << 16)
|
||||||
extern int rtsp_default_protocols;
|
extern int rtsp_default_protocols;
|
||||||
@ -323,9 +323,6 @@ extern int rtsp_default_protocols;
|
|||||||
extern int rtsp_rtp_port_min;
|
extern int rtsp_rtp_port_min;
|
||||||
extern int rtsp_rtp_port_max;
|
extern int rtsp_rtp_port_max;
|
||||||
|
|
||||||
int rtsp_pause(AVFormatContext *s);
|
|
||||||
int rtsp_resume(AVFormatContext *s);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a command to the RTSP server without waiting for the reply.
|
* Send a command to the RTSP server without waiting for the reply.
|
||||||
*
|
*
|
||||||
@ -335,7 +332,7 @@ int rtsp_resume(AVFormatContext *s);
|
|||||||
* @param send_content_length the length of the send_content data, or 0 if
|
* @param send_content_length the length of the send_content data, or 0 if
|
||||||
* send_content is null
|
* send_content is null
|
||||||
*/
|
*/
|
||||||
void rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
void ff_rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
||||||
const char *cmd,
|
const char *cmd,
|
||||||
const unsigned char *send_content,
|
const unsigned char *send_content,
|
||||||
int send_content_length);
|
int send_content_length);
|
||||||
@ -344,7 +341,7 @@ void rtsp_send_cmd_with_content_async(AVFormatContext *s,
|
|||||||
*
|
*
|
||||||
* @see rtsp_send_cmd_with_content_async
|
* @see rtsp_send_cmd_with_content_async
|
||||||
*/
|
*/
|
||||||
void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd);
|
void ff_rtsp_send_cmd_async(AVFormatContext *s, const char *cmd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a command to the RTSP server and wait for the reply.
|
* Send a command to the RTSP server and wait for the reply.
|
||||||
@ -358,7 +355,7 @@ void rtsp_send_cmd_async(AVFormatContext *s, const char *cmd);
|
|||||||
* @param send_content_length the length of the send_content data, or 0 if
|
* @param send_content_length the length of the send_content data, or 0 if
|
||||||
* send_content is null
|
* send_content is null
|
||||||
*/
|
*/
|
||||||
void rtsp_send_cmd_with_content(AVFormatContext *s,
|
void ff_rtsp_send_cmd_with_content(AVFormatContext *s,
|
||||||
const char *cmd,
|
const char *cmd,
|
||||||
RTSPMessageHeader *reply,
|
RTSPMessageHeader *reply,
|
||||||
unsigned char **content_ptr,
|
unsigned char **content_ptr,
|
||||||
@ -370,7 +367,7 @@ void rtsp_send_cmd_with_content(AVFormatContext *s,
|
|||||||
*
|
*
|
||||||
* @see rtsp_send_cmd_with_content
|
* @see rtsp_send_cmd_with_content
|
||||||
*/
|
*/
|
||||||
void rtsp_send_cmd(AVFormatContext *s, const char *cmd,
|
void ff_rtsp_send_cmd(AVFormatContext *s, const char *cmd,
|
||||||
RTSPMessageHeader *reply, unsigned char **content_ptr);
|
RTSPMessageHeader *reply, unsigned char **content_ptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -394,7 +391,7 @@ void rtsp_send_cmd(AVFormatContext *s, const char *cmd,
|
|||||||
* @returns 1 if a data packets is ready to be received, -1 on error,
|
* @returns 1 if a data packets is ready to be received, -1 on error,
|
||||||
* and 0 on success.
|
* and 0 on success.
|
||||||
*/
|
*/
|
||||||
int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
||||||
unsigned char **content_ptr,
|
unsigned char **content_ptr,
|
||||||
int return_on_interleaved_data);
|
int return_on_interleaved_data);
|
||||||
|
|
||||||
@ -407,13 +404,13 @@ int rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
|||||||
* @returns 0 on success, < 0 on error. Cleans up all allocations done
|
* @returns 0 on success, < 0 on error. Cleans up all allocations done
|
||||||
* within the function on error.
|
* within the function on error.
|
||||||
*/
|
*/
|
||||||
int rtsp_connect(AVFormatContext *s);
|
int ff_rtsp_connect(AVFormatContext *s);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close and free all streams within the RTSP (de)muxer
|
* Close and free all streams within the RTSP (de)muxer
|
||||||
*
|
*
|
||||||
* @param s RTSP (de)muxer context
|
* @param s RTSP (de)muxer context
|
||||||
*/
|
*/
|
||||||
void rtsp_close_streams(AVFormatContext *s);
|
void ff_rtsp_close_streams(AVFormatContext *s);
|
||||||
|
|
||||||
#endif /* AVFORMAT_RTSP_H */
|
#endif /* AVFORMAT_RTSP_H */
|
||||||
|
@ -39,7 +39,7 @@ static int rtsp_write_record(AVFormatContext *s)
|
|||||||
"Range: npt=%0.3f-\r\n",
|
"Range: npt=%0.3f-\r\n",
|
||||||
s->filename,
|
s->filename,
|
||||||
(double) 0);
|
(double) 0);
|
||||||
rtsp_send_cmd(s, cmd, reply, NULL);
|
ff_rtsp_send_cmd(s, cmd, reply, NULL);
|
||||||
if (reply->status_code != RTSP_STATUS_OK)
|
if (reply->status_code != RTSP_STATUS_OK)
|
||||||
return -1;
|
return -1;
|
||||||
rt->state = RTSP_STATE_STREAMING;
|
rt->state = RTSP_STATE_STREAMING;
|
||||||
@ -51,12 +51,12 @@ static int rtsp_write_header(AVFormatContext *s)
|
|||||||
RTSPState *rt = s->priv_data;
|
RTSPState *rt = s->priv_data;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = rtsp_connect(s);
|
ret = ff_rtsp_connect(s);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (rtsp_write_record(s) < 0) {
|
if (rtsp_write_record(s) < 0) {
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
if (FD_ISSET(tcp_fd, &rfds)) {
|
if (FD_ISSET(tcp_fd, &rfds)) {
|
||||||
RTSPMessageHeader reply;
|
RTSPMessageHeader reply;
|
||||||
|
|
||||||
if (rtsp_read_reply(s, &reply, NULL, 0) < 0)
|
if (ff_rtsp_read_reply(s, &reply, NULL, 0) < 0)
|
||||||
return AVERROR(EPIPE);
|
return AVERROR(EPIPE);
|
||||||
/* XXX: parse message */
|
/* XXX: parse message */
|
||||||
if (rt->state != RTSP_STATE_STREAMING)
|
if (rt->state != RTSP_STATE_STREAMING)
|
||||||
@ -108,9 +108,9 @@ static int rtsp_write_close(AVFormatContext *s)
|
|||||||
snprintf(cmd, sizeof(cmd),
|
snprintf(cmd, sizeof(cmd),
|
||||||
"TEARDOWN %s RTSP/1.0\r\n",
|
"TEARDOWN %s RTSP/1.0\r\n",
|
||||||
s->filename);
|
s->filename);
|
||||||
rtsp_send_cmd_async(s, cmd);
|
ff_rtsp_send_cmd_async(s, cmd);
|
||||||
|
|
||||||
rtsp_close_streams(s);
|
ff_rtsp_close_streams(s);
|
||||||
url_close(rt->rtsp_hd);
|
url_close(rt->rtsp_hd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user