[FFmpeg-devel] rtsp/rdt streaming from bbc (was: ask for advie of doing Qualification task -- M95 Playback System)
Steven Woolley
woobert
Wed Apr 1 18:35:19 CEST 2009
HI Ronald,
> Is it streaming over UDP? I've been told the iPhone blocks UDP
> traffick altogether. To force TCP, add a line "if (lower_transport !=
> RTSP_LOWER_TRANSPORT_TCP) return 1;" at the top of
> make_setup_request() in libavformat/rtsp.c, that will force TCP as
> lower transport and should make any form of RTSP work on the iPhone.
>
Thanks for the suggestion... but it's still not working (so it's not just
the UDP transport).
Here's where it's "hanging"..
in rtsp.c:
static int url_readbuf(URLContext *h, unsigned char *buf, int size)
{
int ret, len;
len = 0;
while (len < size) {
ret = url_read(h, buf+len, size-len); //<----- HERE
if (ret < 1)
return ret;
len += ret;
}
return len;
}
which is hanging here in avio.c:
int url_read(URLContext *h, unsigned char *buf, int size)
{
int ret;
if (h->flags & URL_WRONLY)
return AVERROR(EIO);
ret = h->prot->url_read(h, buf, size); // <----- HERE
return ret;
}
So, I'm out of my element here to be sure... but in order to get libmms to
work on the iPhone I had to add a socket timeout to get it to not block (in
a similar fashion).... basically this (in the read from socket function
before doing the actual read):
struct timeval tv;
tv.tv_sec = 20;
tv.tv_usec = 0;
if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
printf("error setting socket read timeout\n");
}
So, is this something that maybe needs to be done with the rtsp code
perhaps?
Steve
More information about the ffmpeg-devel
mailing list