diff --git a/daemon/media_player.c b/daemon/media_player.c index 22f4e4c5b..dc0732b7d 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -1024,6 +1024,13 @@ static int __media_player_setup_internal(struct media_player *mp, const rtp_payl return 0; } + +static void __probe_format(struct media_player *mp) { + media_player_read_first_frame(mp); + media_player_seek_first_frame(mp); +} + + static int __ensure_codec_handler(struct media_player *mp, const rtp_payload_type *dst_pt, str_case_value_ht codec_set) { @@ -1037,9 +1044,19 @@ static int __ensure_codec_handler(struct media_player *mp, const rtp_payload_typ ilog(LOG_ERR, "Attempting to play media from an unsupported file format/codec"); return -1; } + + if (!GET_CHANNELS(mp->coder.avstream->CODECPAR) || !mp->coder.avstream->CODECPAR->sample_rate) + __probe_format(mp); + + if (!GET_CHANNELS(mp->coder.avstream->CODECPAR) || !mp->coder.avstream->CODECPAR->sample_rate) { + ilog(LOG_ERR, "Unrecognised audio format, cannot do playback"); + return -1; + } + src_pt.encoding = src_pt.codec_def->rtpname_str; src_pt.channels = GET_CHANNELS(mp->coder.avstream->CODECPAR); src_pt.clock_rate = mp->coder.avstream->CODECPAR->sample_rate; + codec_init_payload_type(&src_pt, MT_AUDIO); if (__media_player_setup_internal(mp, &src_pt, dst_pt, codec_set))