The CallChannel object uses the class described below to provide whole call recording functionality. The CallChannel object has a public property called WholeCallRecorder of this type. Please see the tutorial for an example on how to use this class.
A class that provides an API for recording media from an entire call.
The recording functions in this class operate relative to the directory on the remote server configured to be user’s default root.
Once a record job has ended and the record state has returned to IDLE or ERROR, the cause will be one of these.
Recording termination causes:
Usage example:
state = channel.WholeCallRecorder.state()
if state != channel.WholeCallRecorder.State.RECORDING:
# recording a call has terminated
cause = channel.WholeCallRecorder.cause()
if cause == channel.WholeCallRecorder.Cause.SILENCE:
# recording stopped due to silence
pass
The record state can be checked to determine whether a record job is in progress. When a record job ends, the record termination cause can be checked to find the reason why.
Record states:
Usage example:
state = channel.WholeCallRecorder.state()
if state == channel.WholeCallRecorder.State.RECORDING:
# recording a call in progress
pass
This function will return a cause.
When a record job terminates, the reason why can be requested by calling this function. If this function is called while a record job is still running, the cause will be NONE.
Record an entire call.
the name of the file to record.
the amount of time allocated to the record job. Default is None seconds (no timeout).
the maximum size allowed for the file. Default is 0 bytes (no limit).
the amount of silence (in milliseconds) after which to stop recording. Default is 0 seconds (no limit).
option to eliminate DTMF from the recording. Default is True.
the file format to use. Default is alaw.
the rate at which to record. Default is 8000.
This function is provided to allow the recording of an entire call (both sides of the conversation) to a wav file.
If the call state is IDLE, this function will raise a Hangup exception. If the call state is not IDLE but also not ANSWERED, this function will raise an Error exception.
If the whole call recorder state is already RECORDING, this function will raise an Error exception.
The optional argument file_format is the audio codec in which to record the media. The default is alaw (G.711 A-law), other options are ulaw (G.711 mu-law), oki (OKI ADPCM), ima (IMA ADPCM) s16bit (signed 16-bit PCM) and u8bit (unsigned 8-bit PCM). Of those, G.711 A-law, G.711 mu-law and 16-bit PCM provide the best quality since the first two match those used on calls, and they can convert to the last without degradation.
The optional argument rate is the recording rate in Hz. The default is 8000, other options are 6000, 11000 and 11025. Of those, 8000 provides the best quality since it matches the sampling rate used on calls.
The recording will continue until one of the termination conditions applies. This could be that the maximum file size (max_bytes) has been reached; or the silence timeout (milliseconds_max_silence) has been triggered; or barge in has occurred; or the timeout (seconds_timeout) has expired. To turn off the termination conditions, max_bytes=0 means no limit, milliseconds_max_silence=0 means no silence timeout and seconds_timeout=None means no timout.
This function will block until the recording has finished or a timeout (seconds_timeout) has expired.
Upon return, this function will return a termination cause.
Usage example:
# record until finished due to two seconds of silence
cause = channel.WholeCallRecorder.record(filename="recfile",
milliseconds_max_silence=2000)
if cause == channel.WholeCallRecorder.Cause.SILENCE:
# the recording job was terminated because of two seconds of silence
pass
Begin the recording of a media file.
the name of the file to record.
the maximum size allowed for the file. Default is 0 bytes (no limit).
the amount of silence after which to stop recording. Default is 0 seconds (no limit).
option to eliminate DTMF from the recording. Default is True.
the file format to use. Default is alaw.
the rate at which to record. Default is 8000.
This function is provided to start the recording of an entire call (both sides of the conversation) to a wav file.
If the call state is IDLE, this function will raise a Hangup exception. If the call state is not IDLE but also not ANSWERED, this function will raise an Error exception.
If the whole call record state is already RECORDING, this function will raise an Error exception.
The optional argument file_format is the audio codec in which to record the media. The default is alaw (G.711 A-law), other options are ulaw (G.711 mu-law), oki (OKI ADPCM), ima (IMA ADPCM) s16bit (signed 16-bit PCM) and u8bit (unsigned 8-bit PCM). Of those, G.711 A-law, G.711 mu-law and 16-bit PCM provide the best quality since the first two match those used on calls, and they can convert to the last without degradation.
The optional argument rate is the recording rate in Hz. The default is 8000, other options are 6000, 11000 and 11025. Of those, 8000 provides the best quality since it matches the sampling rate used on calls.
The recording will continue until one of the termination conditions applies. This could be that the maximum file size (max_bytes) has been reached; the silence timeout (milliseconds_max_silence) has been triggered or barge in has occurred. To turn off the termination conditions, max_bytes=0 means no limit and milliseconds_max_silence=0 means no silence timeout.
This function will block until the recording has started or a timeout has expired.
Upon return, this function will return True for success, otherwise False.
Usage example:
# Start a record job that will terminate on 2 seconds of silence.
if channel.WholeCallRecorder.start(filename="recfile", milliseconds_max_silence=2000) == True:
# While recording, we can do something else; then wait until recording is complete.
cause = channel.WholeCallRecorder.wait_until_finished()
if cause == channel.WholeCallRecorder.Cause.SILENCE:
# recording stopped due to 2 seconds of silence
pass
This function will return the current state.
When a record job is busy, its status can be tracked by calling this function.
If this function is called while when no record job is in progress, the state will be IDLE.
Stop a whole call record job.
If the call state is IDLE, this function will raise a Hangup exception. If the call state is not IDLE but also not ANSWERED, this function will raise a Error exception.
If the whole call recorder state is not RECORDING, this function will simply return True.
This function will block until the record job terminates or a timeout expires.
Upon return, this method will return True for success, otherwise False.
Usage example:
# Start a record job.
if channel.WholeCallRecorder.start(filename="recfile") == True:
# While recording, we can do something else; then stop the recording.
channel.WholeCallRecorder.stop()
Wait until the current whole call recording job is complete.
- seconds_timeout
the amount of time allocated to wait for the record job to terminate. Default is 120 seconds.
If the call state is IDLE, this function will raise a Hangup exception. If the call state is not IDLE but also not ANSWERED, this function will raise an Error exception.
This function will block until the recorder terminates or the timeout expires. Giving a value of None for seconds_timeout will enable an infinite wait. If the timeout does expire, a cause of TIMEOUT will be returned.
Upon return, this function will return a termination cause.
Usage example:
# Start a record job that will terminate on 2 seconds of silence.
if channel.WholeCallRecorder.start(filename="recfile",
milliseconds_max_silence=2000) == True:
# While recording, we can do something else
# then wait until recording is complete.
cause = channel.WholeCallRecorder.wait_until_finished()
if cause == channel.WholeCallRecorder.Cause.SILENCE:
# the recording job was terminated because of silence
pass