dport = 5004; /* avt-profile-1 port */
/* Try to connect */
- int fd = -1;
+ int fd = -1, rtcp_fd = -1;
switch (tp)
{
case IPPROTO_UDP:
case IPPROTO_UDPLITE:
- fd = net_OpenDgram (obj, dhost, dport, shost, sport, AF_UNSPEC,
- tp);
+ fd = net_OpenDgram (obj, dhost, (dport + 1) & ~1,
+ shost, (sport + 1) & ~1, AF_UNSPEC, tp);
+ if (fd == -1)
+ break;
+ rtcp_fd = net_OpenDgram (obj, dhost, dport | 1, shost,
+ sport ? (sport | 1) : 0, AF_UNSPEC, tp);
break;
case IPPROTO_DCCP:
#endif
#ifdef SOCK_DCCP
var_Create (obj, "dccp-service", VLC_VAR_STRING);
- var_SetString (obj, "dccp-service", "RTPV");
- fd = net_Connect (obj, shost, sport, SOCK_DCCP, tp);
+ var_SetString (obj, "dccp-service", "RTPV"); /* FIXME: RTPA? */
+ fd = net_Connect (obj, shost, (sport + 1) & ~1, SOCK_DCCP, tp);
#else
msg_Err (obj, "DCCP support not included");
#endif
break;
case IPPROTO_TCP:
- fd = net_Connect (obj, shost, sport, SOCK_STREAM, tp);
+ fd = net_Connect (obj, shost, (sport + 1) & ~1, SOCK_STREAM, tp);
break;
}
if (p_sys == NULL)
{
net_Close (fd);
+ if (rtcp_fd != -1)
+ net_Close (rtcp_fd);
return VLC_EGENERIC;
}
p_sys->srtp = NULL;
p_sys->fd = fd;
+ p_sys->rtcp_fd = rtcp_fd;
p_sys->caching = var_CreateGetInteger (obj, "rtp-caching");
p_sys->max_src = var_CreateGetInteger (obj, "rtp-max-src");
p_sys->timeout = var_CreateGetInteger (obj, "rtp-timeout");
srtp_destroy (p_sys->srtp);
if (p_sys->session)
rtp_session_destroy (demux, p_sys->session);
+ if (p_sys->rtcp_fd != -1)
+ net_Close (p_sys->rtcp_fd);
net_Close (p_sys->fd);
free (p_sys);
}
len = net_Read (VLC_OBJECT (demux), fd, NULL,
block->p_buffer, block->i_buffer, false);
if (((len <= 0) && fd_dead (fd))
- || demux->b_die)
+ || !vlc_object_alive (demux))
{
block_Release (block);
return NULL;
msg_Dbg (demux, "detected MPEG Audio");
pt.init = mpa_init;
pt.decode = mpa_decode;
- pt.frequency = 44100;
+ pt.frequency = 90000;
break;
case 32: