ARI: The bridges play and record APIs now handle sample rates > 8K correctly.

The bridge play and record APIs were forcing the Announcer/Recorder channel
to slin8 which meant that if you played or recorded audio with a sample
rate > 8K, it was downsampled to 8K limiting the bandwidth.

* The /bridges/play REST APIs have a new "announcer_format" parameter that
  allows the caller to explicitly set the format on the "Announcer" channel
  through which the audio is played into the bridge.  If not specified, the
  default depends on how many channels are currently in the bridge.  If
  a single channel is in the bridge, then the Announcer channel's format
  will be set to the same as that channel's.  If multiple channels are in the
  bridge, the channels will be scanned to find the one with the highest
  sample rate and the Announcer channel's format will be set to the slin
  format that has an equal to or greater than sample rate.

* The /bridges/record REST API has a new "recorder_format" parameter that
  allows the caller to explicitly set the format on the "Recorder" channel
  from which audio is retrieved to write to the file.  If not specified,
  the Recorder channel's format will be set to the format that was requested
  to save the audio in.

Resolves: #1479

DeveloperNote: The ARI /bridges/play and /bridges/record REST APIs have new
parameters that allow the caller to specify the format to be used on the
"Announcer" and "Recorder" channels respecitvely.
This commit is contained in:
George Joseph
2025-09-25 11:48:01 -06:00
committed by github-actions[bot]
parent 2c97fd3ea4
commit 559ea45ddd
4 changed files with 151 additions and 13 deletions

View File

@@ -490,6 +490,14 @@
"allowMultiple": true,
"dataType": "string"
},
{
"name": "announcer_format",
"description": "Format of the 'Anouncer' channel attached to the bridge. Defaults to the format of the channel in the bridge with the highest sampe rate.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "lang",
"description": "For sounds, selects language for sound.",
@@ -510,7 +518,6 @@
"valueType": "RANGE",
"min": 0
}
},
{
"name": "skipms",
@@ -542,6 +549,10 @@
{
"code": 409,
"reason": "Bridge not in a Stasis application"
},
{
"code": 422,
"reason": "The format specified is unknown on this system"
}
]
}
@@ -585,6 +596,14 @@
"allowMultiple": true,
"dataType": "string"
},
{
"name": "announcer_format",
"description": "Format of the 'Anouncer' channel attached to the bridge. Defaults to the format of the channel in the bridge with the highest sampe rate.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "lang",
"description": "For sounds, selects language for sound.",
@@ -628,6 +647,10 @@
{
"code": 409,
"reason": "Bridge not in a Stasis application"
},
{
"code": 422,
"reason": "The format specified is unknown on this system"
}
]
@@ -672,6 +695,14 @@
"allowMultiple": false,
"dataType": "string"
},
{
"name": "recorder_format",
"description": "Format of the 'Recorder' channel attached to the bridge. Defaults to the same format as the 'format' parameter.",
"paramType": "query",
"required": false,
"allowMultiple": false,
"dataType": "string"
},
{
"name": "maxDurationSeconds",
"description": "Maximum duration of the recording, in seconds. 0 for no limit.",