diff --git a/daemon/call.c b/daemon/call.c index 48c95c7b3..5538a53fd 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2871,10 +2871,11 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c .blob = flags->blob, .db_id = flags->db_id, ); - media_player_new(&ml->players[MP_REC], ml, NULL, &opts); - if (!media_player_play(ml->players[MP_REC], &opts)) - ilog(LOG_WARN, "Failed to add media player for recording announcement"); + const char *err = call_play_media_for_ml(ml, MP_REC, &opts, NULL); + + if (err) + ilog(LOG_WARN, "Failed to add media player for recording announcement (%s)", err); } #endif } diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 81e6a6468..510519b10 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -2003,7 +2003,7 @@ const char *call_play_media_ng(ng_command_ctx_t *ctx) { ilog(LOG_DEBUG, "Requesting play media"); - err = call_play_media_for_ml(monologue, &opts, &flags); + err = call_play_media_for_ml(monologue, MP_DEFAULT, &opts, &flags); if (err) return err; @@ -2041,7 +2041,7 @@ const char *call_stop_media_ng(ng_command_ctx_t *ctx) { if (monologue->players[MP_DEFAULT]->opts.moh) return "Currently MoH ongoing, ignore stop media."; - last_frame_pos = call_stop_media_for_ml(monologue); + last_frame_pos = call_stop_media_for_ml(monologue, MP_DEFAULT); } parser->dict_add_int(ctx->resp, "last-frame-pos", last_frame_pos); diff --git a/daemon/media_player.c b/daemon/media_player.c index dd55dbe28..48aaf3775 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -1648,7 +1648,7 @@ check_next: #endif } -const char * call_check_moh(struct call_monologue *from_ml, struct call_monologue *to_ml, +const char *call_check_moh(struct call_monologue *from_ml, struct call_monologue *to_ml, sdp_ng_flags *flags) { #ifdef WITH_TRANSCODING @@ -1680,7 +1680,7 @@ const char * call_check_moh(struct call_monologue *from_ml, struct call_monologu ); /* whom to play the moh audio */ - errstr = call_play_media_for_ml(to_ml, &opts, NULL); + errstr = call_play_media_for_ml(to_ml, MP_DEFAULT, &opts, NULL); if (errstr) { to_ml->players[MP_DEFAULT]->opts.moh = 0; /* initialization failed, mark accordingly */ return errstr; @@ -1694,7 +1694,7 @@ const char * call_check_moh(struct call_monologue *from_ml, struct call_monologu } else if (call_ml_stops_moh(from_ml, to_ml, flags->opmode)) { /* whom to stop the moh audio */ - call_stop_media_for_ml(to_ml); + call_stop_media_for_ml(to_ml, MP_DEFAULT); ilog(LOG_DEBUG, "Music on hold stopped with coming SDP offer."); } return NULL; @@ -1703,7 +1703,7 @@ const char * call_check_moh(struct call_monologue *from_ml, struct call_monologu #endif } -const char *call_play_media_for_ml(struct call_monologue *ml, +const char *call_play_media_for_ml(struct call_monologue *ml, unsigned int mp_idx, media_player_opts_t *opts, sdp_ng_flags *flags) { #ifdef WITH_TRANSCODING @@ -1713,7 +1713,7 @@ const char *call_play_media_for_ml(struct call_monologue *ml, /* this starts the audio player if needed */ update_init_monologue_subscribers(ml, OP_PLAY_MEDIA); - if (ml->players[MP_DEFAULT] && ml->players[MP_DEFAULT]->opts.moh) { + if (ml->players[mp_idx] && ml->players[mp_idx]->opts.moh) { ilog(LOG_DEBUG, "There is already ongoing media playback for MoH. Ignore new one."); /* pretend that everything is good */ return NULL; @@ -1721,10 +1721,10 @@ const char *call_play_media_for_ml(struct call_monologue *ml, else { /* media_player_new() now knows that audio player is in use * TODO: player options can have changed if already exists */ - media_player_new(&ml->players[MP_DEFAULT], ml, NULL, opts); + media_player_new(&ml->players[mp_idx], ml, NULL, opts); } - if (!media_player_play(ml->players[MP_DEFAULT], opts)) + if (!media_player_play(ml->players[mp_idx], opts)) return "Failed to start media playback"; return NULL; @@ -1733,17 +1733,17 @@ const char *call_play_media_for_ml(struct call_monologue *ml, #endif } -long long call_stop_media_for_ml(struct call_monologue *ml) +long long call_stop_media_for_ml(struct call_monologue *ml, unsigned int mp_idx) { #ifdef WITH_TRANSCODING - if (!ml->players[MP_DEFAULT]) + if (!ml->players[mp_idx]) return 0; - long long ret = media_player_stop(ml->players[MP_DEFAULT]); + long long ret = media_player_stop(ml->players[mp_idx]); /* restore to non-mixing if needed */ codec_update_all_source_handlers(ml); update_init_monologue_subscribers(ml, OP_STOP_MEDIA); /* mark MoH as already not used (it can be unset now) */ - ml->players[MP_DEFAULT]->opts.moh = 0; + ml->players[mp_idx]->opts.moh = 0; return ret; #else return 0; diff --git a/include/media_player.h b/include/media_player.h index 9db4677f1..2b1b07ff1 100644 --- a/include/media_player.h +++ b/include/media_player.h @@ -138,9 +138,9 @@ bool media_player_pt_match(const struct media_player *mp, const rtp_payload_type void media_player_add_packet(struct media_player *mp, char *buf, size_t len, int64_t us_dur, unsigned long long pts); -const char *call_play_media_for_ml(struct call_monologue *ml, +const char *call_play_media_for_ml(struct call_monologue *ml, unsigned int mp_idx, media_player_opts_t *opts, sdp_ng_flags *flags); -long long call_stop_media_for_ml(struct call_monologue *ml); +long long call_stop_media_for_ml(struct call_monologue *ml, unsigned int mp_idx); const char *call_check_moh(struct call_monologue *from_ml, struct call_monologue *to_ml, sdp_ng_flags *flags);