Compare commits

...

7 Commits
0.3 ... master

Author SHA1 Message Date
Mark Hills 5c844e6996 Use the default logging level
This is a #define to bctoolbox which means we have to link ourselves
to that library. Whereas oRTP defines its own link. It turns out the
default logging level is appropriate, so use that.

This also removes one of the compatibility problems caused by
different versions of oRTP which had different definitions of this
function.
2020-11-28 11:03:34 +00:00
Mark Hills 69b6537303 The year is now 2020 2020-01-04 11:31:45 +00:00
Mark Hills 85fe843d61 oRTP segfaults in RECVONLY mode
Reported-by: Paul Le Couteur <paullecouteur@gmail.com>
2020-01-04 11:30:29 +00:00
Mark Hills 66b4707a24 Use DSCP to help with wifi links 2018-01-23 16:21:51 +00:00
Mark Hills e375ceef5a Use fixed point 2018-01-23 16:20:21 +00:00
Mark Hills 0b53299941 Implicitly look for a new stream on resume 2018-01-23 16:19:46 +00:00
Mark Hills f35eb4efe2 Change to 0.26.0 liboRTP API 2018-01-23 16:18:46 +00:00
8 changed files with 31 additions and 18 deletions

2
README
View File

@ -1,6 +1,6 @@
trx: Realtime audio over IP
(C) Copyright 2012 Mark Hills <mark@xwax.org>
(C) Copyright 2020 Mark Hills <mark@xwax.org>
See the COPYING file for licensing terms.

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -53,7 +53,7 @@ int set_alsa_hw(snd_pcm_t *pcm,
r = snd_pcm_hw_params_set_access(pcm, hw, SND_PCM_ACCESS_RW_INTERLEAVED);
CHK("snd_pcm_hw_params_set_access", r);
r = snd_pcm_hw_params_set_format(pcm, hw, SND_PCM_FORMAT_FLOAT);
r = snd_pcm_hw_params_set_format(pcm, hw, SND_PCM_FORMAT_S16);
CHK("snd_pcm_hw_params_set_format", r);
r = snd_pcm_hw_params_set_rate(pcm, hw, rate, 0);

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License

View File

@ -1,6 +1,6 @@
#ifndef NOTICE_H
#define NOTICE_H
#define COPYRIGHT "trx (C) Copyright 2014 Mark Hills <mark@xwax.org>"
#define COPYRIGHT "trx (C) Copyright 2020 Mark Hills <mark@xwax.org>"
#endif

21
rx.c
View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -32,7 +32,7 @@
static unsigned int verbose = DEFAULT_VERBOSE;
static void timestamp_jump(RtpSession *session, ...)
static void timestamp_jump(RtpSession *session, void *a, void *b, void *c)
{
if (verbose > 1)
fputc('|', stderr);
@ -60,6 +60,15 @@ static RtpSession* create_rtp_recv(const char *addr_desc, const int port,
abort();
}
/*
* oRTP in RECVONLY mode attempts to send RTCP packets and
* segfaults (v4.3.0 tested)
*
* https://stackoverflow.com/questions/43591690/receiving-rtcp-issues-within-ortp-library
*/
rtp_session_enable_rtcp(session, FALSE);
return session;
}
@ -70,15 +79,15 @@ static int play_one_frame(void *packet,
const unsigned int channels)
{
int r;
float *pcm;
int16_t *pcm;
snd_pcm_sframes_t f, samples = 1920;
pcm = alloca(sizeof(float) * samples * channels);
pcm = alloca(sizeof(*pcm) * samples * channels);
if (packet == NULL) {
r = opus_decode_float(decoder, NULL, 0, pcm, samples, 1);
r = opus_decode(decoder, NULL, 0, pcm, samples, 1);
} else {
r = opus_decode_float(decoder, packet, len, pcm, samples, 0);
r = opus_decode(decoder, packet, len, pcm, samples, 0);
}
if (r < 0) {
fprintf(stderr, "opus_decode: %s\n", opus_strerror(r));

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License

14
tx.c
View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Mark Hills <mark@xwax.org>
* Copyright (C) 2020 Mark Hills <mark@xwax.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -48,6 +48,8 @@ static RtpSession* create_rtp_send(const char *addr_desc, const int port)
abort();
if (rtp_session_set_multicast_ttl(session, 16) != 0)
abort();
if (rtp_session_set_dscp(session, 40) != 0)
abort();
return session;
}
@ -60,17 +62,20 @@ static int send_one_frame(snd_pcm_t *snd,
const unsigned int ts_per_frame,
RtpSession *session)
{
float *pcm;
int16_t *pcm;
void *packet;
ssize_t z;
snd_pcm_sframes_t f;
static unsigned int ts = 0;
pcm = alloca(sizeof(float) * samples * channels);
pcm = alloca(sizeof(*pcm) * samples * channels);
packet = alloca(bytes_per_frame);
f = snd_pcm_readi(snd, pcm, samples);
if (f < 0) {
if (f == -ESTRPIPE)
ts = 0;
f = snd_pcm_recover(snd, f, 0);
if (f < 0) {
aerror("snd_pcm_readi", f);
@ -88,7 +93,7 @@ static int send_one_frame(snd_pcm_t *snd,
return 0;
}
z = opus_encode_float(encoder, pcm, samples, packet, bytes_per_frame);
z = opus_encode(encoder, pcm, samples, packet, bytes_per_frame);
if (z < 0) {
fprintf(stderr, "opus_encode_float: %s\n", opus_strerror(z));
return -1;
@ -240,7 +245,6 @@ int main(int argc, char *argv[])
ortp_init();
ortp_scheduler_init();
ortp_set_log_level_mask(ORTP_WARNING|ORTP_ERROR);
session = create_rtp_send(addr, port);
assert(session != NULL);