}
/* display usage message and terminate */
-static void help(void) {
+static void attribute((noreturn)) help(void) {
xprintf("Usage:\n"
" disorder-playrtp [OPTIONS] [[ADDRESS] PORT]\n"
"Options:\n"
int monitor = 0;
static const int one = 1;
- static const struct addrinfo prefs = {
+ struct addrinfo prefs = {
.ai_flags = AI_PASSIVE,
.ai_family = PF_INET,
.ai_socktype = SOCK_DGRAM,
}
}
if(config_read(0, NULL)) disorder_fatal(0, "cannot read configuration");
+ /* Choose a sensible default audio backend */
if(!backend) {
backend = uaudio_default(uaudio_apis, UAUDIO_API_CLIENT);
if(!backend)
struct sockaddr *addr;
socklen_t addr_len;
if(!strcmp(sl.s[0], "-")) {
+ /* We'll need a connection to request the incoming stream, so open one if
+ * we don't have one already */
+ if(!c) {
+ if(!(c = disorder_new(1))) exit(EXIT_FAILURE);
+ if(disorder_connect(c)) exit(EXIT_FAILURE);
+ }
/* Pick address family to match known-working connectivity to the server */
int family = disorder_client_af(c);
/* Get a list of interfaces */
disorder_fatal(errno, "error calling getifaddrs");
/* Try to pick a good one */
for(; ifa; ifa = ifa->ifa_next) {
+ if(!ifa->ifa_addr) continue;
if(bestifa == NULL
|| compare_interfaces(ifa, bestifa, family) > 0)
bestifa = ifa;
uaudio_set_format(44100/*Hz*/, 2/*channels*/,
16/*bits/channel*/, 1/*signed*/);
uaudio_set("application", "disorder-playrtp");
+ backend->configure();
backend->start(playrtp_callback, NULL);
if(backend->open_mixer) backend->open_mixer();
/* We receive and convert audio data in a background thread */