Mercurial > mplayer.hg
changeset 17332:88adbc28f60b
This patch makes real rtsp tell the server to deliver data at specified
bandwidth, if bandwidth cmdline option is given. Also, if that's given,
it uses it for sdp stream selection. If not given, the behavior is the
same as before.
It's used to implement something like turboplay in realplayer.
Patch by Tomas Janousek >>> tomi (At) nomi (.) cz <<<
author | rtognimp |
---|---|
date | Fri, 06 Jan 2006 14:39:10 +0000 |
parents | 7a718d3fd1fd |
children | b9ee411f5a70 |
files | DOCS/man/en/mplayer.1 libmpdemux/realrtsp/real.c libmpdemux/realrtsp/rtsp.c libmpdemux/realrtsp/rtsp_session.c libmpdemux/realrtsp/rtsp_session.h |
diffstat | 5 files changed, 17 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/man/en/mplayer.1 Fri Jan 06 14:03:51 2006 +0000 +++ b/DOCS/man/en/mplayer.1 Fri Jan 06 14:39:10 2006 +0000 @@ -946,6 +946,8 @@ Specify the maximum bandwidth for network streaming (for servers that are able to send content in different bitrates). Useful if you want to watch live streamed media behind a slow connection. +With Real RTSP streaming, it's also used to set maximum delivery bandwidth +allowing faster cache filling and stream dumping. . .TP .B \-cache <kBytes>
--- a/libmpdemux/realrtsp/real.c Fri Jan 06 14:03:51 2006 +0000 +++ b/libmpdemux/realrtsp/real.c Fri Jan 06 14:39:10 2006 +0000 @@ -706,12 +706,17 @@ char *mrl=rtsp_get_mrl(rtsp_session); unsigned int size; int status; + uint32_t maxbandwidth = bandwidth; /* get challenge */ challenge1=strdup(rtsp_search_answers(rtsp_session,"RealChallenge1")); #ifdef LOG printf("real: Challenge1: %s\n", challenge1); #endif + + /* set a reasonable default to get the best stream, unless bandwidth given */ + if (!bandwidth) + bandwidth = 10485800; /* request stream description */ rtsp_schedule_field(rtsp_session, "Accept: application/sdp"); @@ -811,6 +816,13 @@ rtsp_schedule_field(rtsp_session, subscribe); rtsp_request_setparameter(rtsp_session,NULL); + /* set delivery bandwidth */ + if (maxbandwidth) { + sprintf(buf, "SetDeliveryBandwidth: Bandwidth=%u;BackOff=0", maxbandwidth); + rtsp_schedule_field(rtsp_session, buf); + rtsp_request_setparameter(rtsp_session,NULL); + } + { int s_ss = 0, s_ms = 0, e_ss = 0, e_ms = 0; char *str;
--- a/libmpdemux/realrtsp/rtsp.c Fri Jan 06 14:03:51 2006 +0000 +++ b/libmpdemux/realrtsp/rtsp.c Fri Jan 06 14:39:10 2006 +0000 @@ -877,7 +877,7 @@ file++; mrl = malloc(sizeof(char)*(strlen(stream->streaming_ctrl->url->hostname)+strlen(file)+16)); sprintf(mrl,"rtsp://%s:%i/%s",stream->streaming_ctrl->url->hostname,port,file); - rtsp = rtsp_session_start(fd,&mrl, file, stream->streaming_ctrl->url->hostname, port, &redirected); + rtsp = rtsp_session_start(fd,&mrl, file, stream->streaming_ctrl->url->hostname, port, &redirected, stream->streaming_ctrl->bandwidth); if( redirected == 1) { url_free(stream->streaming_ctrl->url);
--- a/libmpdemux/realrtsp/rtsp_session.c Fri Jan 06 14:03:51 2006 +0000 +++ b/libmpdemux/realrtsp/rtsp_session.c Fri Jan 06 14:39:10 2006 +0000 @@ -71,13 +71,12 @@ }; //rtsp_session_t *rtsp_session_start(char *mrl) { -rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, int port, int *redir) { +rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, int port, int *redir, uint32_t bandwidth) { rtsp_session_t *rtsp_session=malloc(sizeof(rtsp_session_t)); char *server; char *mrl_line = NULL; rmff_header_t *h; - uint32_t bandwidth=10485800; rtsp_session->recv = xbuffer_init(BUF_SIZE);
--- a/libmpdemux/realrtsp/rtsp_session.h Fri Jan 06 14:03:51 2006 +0000 +++ b/libmpdemux/realrtsp/rtsp_session.h Fri Jan 06 14:39:10 2006 +0000 @@ -30,7 +30,7 @@ typedef struct rtsp_session_s rtsp_session_t; -rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, int port, int *redir); +rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, int port, int *redir, uint32_t bandwidth); int rtsp_session_read(rtsp_session_t *session, char *data, int len);