diff --git a/janus/src/audio.c b/janus/src/audio.c index 9b068ba..54a701f 100644 --- a/janus/src/audio.c +++ b/janus/src/audio.c @@ -55,6 +55,19 @@ static void *_pcm_thread(void *v_audio); static void *_encoder_thread(void *v_audio); +bool us_audio_probe(const char *name) { + snd_pcm_t *pcm; + int err; + US_JLOG_INFO("audio", "Probing PCM capture ..."); + if ((err = snd_pcm_open(&pcm, name, SND_PCM_STREAM_CAPTURE, 0)) < 0) { + _JLOG_PERROR_ALSA(err, "audio", "Can't probe PCM capture"); + return false; + } + snd_pcm_close(pcm); + US_JLOG_INFO("audio", "PCM capture is available"); + return true; +} + us_audio_s *us_audio_init(const char *name, unsigned pcm_hz) { us_audio_s *audio; US_CALLOC(audio, 1); diff --git a/janus/src/audio.h b/janus/src/audio.h index a10d80e..f87a156 100644 --- a/janus/src/audio.h +++ b/janus/src/audio.h @@ -63,6 +63,8 @@ typedef struct { } us_audio_s; +bool us_audio_probe(const char *name); + us_audio_s *us_audio_init(const char *name, unsigned pcm_hz); void us_audio_destroy(us_audio_s *audio); diff --git a/janus/src/config.c b/janus/src/config.c index 2c7e9d1..d479dcf 100644 --- a/janus/src/config.c +++ b/janus/src/config.c @@ -52,7 +52,6 @@ us_config_s *us_config_init(const char *config_dir_path) { goto error; } if ((config->audio_dev_name = _get_value(jcfg, "audio", "device")) != NULL) { - US_JLOG_INFO("config", "Enabled the experimental AUDIO feature"); if ((config->tc358743_dev_path = _get_value(jcfg, "audio", "tc358743")) == NULL) { US_JLOG_INFO("config", "Missing config value: audio.tc358743"); goto error; diff --git a/janus/src/plugin.c b/janus/src/plugin.c index 4c1279e..243c4a3 100644 --- a/janus/src/plugin.c +++ b/janus/src/plugin.c @@ -258,7 +258,7 @@ static int _plugin_init(janus_callbacks *gw, const char *config_dir_path) { _g_video_queue = us_queue_init(1024); _g_rtpv = us_rtpv_init(_relay_rtp_clients); - if (_g_config->audio_dev_name != NULL) { + if (_g_config->audio_dev_name != NULL && us_audio_probe(_g_config->audio_dev_name)) { _g_rtpa = us_rtpa_init(_relay_rtp_clients); US_THREAD_CREATE(_g_audio_tid, _audio_thread, NULL); }