TT#28903 /api/voicemailrecordings add mp3 and ogg support

* /api/voicemailrecordings now support mp3 and ogg formats
      when specified as query parameters: e.g. ?format=mp3
    * add dependency to libsox-fmt-mp3

Change-Id: I0815be013814edc42559c75e26d64b537507334d
changes/55/17955/1
Kirill Solomko 8 years ago
parent bf9b84419e
commit 0778de8dad

1
debian/control vendored

@ -96,6 +96,7 @@ Depends:
libsipwise-base-perl,
libsoap-lite-perl,
libsoap-wsdl-perl,
libsox-fmt-mp3,
libstring-mkpasswd-perl,
libtemplate-perl,
libtemplate-plugin-json-escape-perl,

@ -47,6 +47,15 @@ __PACKAGE__->config(
},
);
sub query_params {
return [
{
param => 'format',
description => 'Output format of the voicemail recording, supported: mp3, ogg, wav',
},
];
}
sub gather_default_action_roles {
my ($self, %args) = @_; my @roles = ();
push @roles, 'NGCP::Panel::Role::HTTPMethods' if $args{attributes}->{Method};

@ -8,6 +8,7 @@ use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::ValidateJSON qw();
use NGCP::Panel::Utils::Subscriber;
use NGCP::Panel::Utils::Sounds;
require Catalyst::ActionRole::ACL;
require NGCP::Panel::Role::HTTPMethods;
require Catalyst::ActionRole::RequireSSL;
@ -61,10 +62,17 @@ sub GET :Allow {
last unless $self->valid_id($c, $id);
my $item = $self->item_by_id($c, $id);
last unless $self->resource_exists($c, voicemailrecording => $item);
my $filename = NGCP::Panel::Utils::Subscriber::get_voicemail_filename($c,$item);
my $format = $c->request->params->{format} // 'wav';
unless ($format && $format =~ /^(wav|mp3|ogg)$/) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Unknown format '$format', supported: wav,mp3,ogg.");
last;
}
my $sr = \%NGCP::Panel::Utils::Subscriber::;
my $ss = \%NGCP::Panel::Utils::Sounds::;
my $filename = $sr->{get_voicemail_filename}($c,$item,$format);
$c->response->header ('Content-Disposition' => 'attachment; filename="'.$filename.'"');
$c->response->content_type('audio/x-wav');
$c->response->body($item->recording);
$c->response->content_type($sr->{get_voicemail_content_type}($c,$format));
$c->response->body($ss->{transcode_data}($item->recording,'WAV',uc($format)));
return;
}
return;

@ -30,6 +30,14 @@ sub transcode_file {
}
last SWITCH;
};
/^MP3$/ && do {
@conv_args = ($tmpfile, qw/--type mp3 --bits 16 - rate 8k/);
last SWITCH;
};
/^OGG$/ && do {
@conv_args = ($tmpfile, qw/--type ogg --bits 16 - rate 8k/);
last SWITCH;
};
# default
} # SWITCH

@ -1827,9 +1827,21 @@ sub get_subscriber_pbx_status{
return 0;
}
sub get_voicemail_filename{
my($c, $voicemail_item) = @_;
return 'voicemail-'.$voicemail_item->msgnum.'.wav';
sub get_voicemail_filename {
my ($c, $voicemail_item, $format) = @_;
return 'voicemail-'.$voicemail_item->msgnum.'.'.$format;
}
sub get_voicemail_content_type {
my($c, $format) = @_;
SWITCH: for ($format) {
/^wav$/ && return "audio/x-wav";
/^mp3$/ && return "audio/mpeg";
/^ogg$/ && return "audio/ogg";
return;
}
return;
}
1;

Loading…
Cancel
Save