Play an audio stream into a call

This code snippet plays an audio stream into the specified call.

Example

Replace the following variables in the example code:

KeyDescription
VOICE_CALL_ID

The UUID of the call leg.

VOICE_STREAM_URL

The URL of the audio file that will be streamed into an array. The URL must be in an array.

Prerequisites

Execute the following command at your terminal prompt to create the JWT for authentication:

export JWT=$(nexmo jwt:generate $PATH_TO_PRIVATE_KEY application_id=$NEXMO_APPLICATION_ID)

Write the code

Add the following to play-audio-into-a-call.sh:

curl -X PUT https://api.nexmo.com/v1/calls/$VOICE_CALL_ID/stream \
  -H "Authorization: Bearer $JWT"\
  -H "Content-Type: application/json"\
  -d '{"stream_url": ["'"$VOICE_STREAM_URL"'"]}'

View full source

Run your code

Save this file to your machine and run it:

bash play-audio-into-a-call.sh

Prerequisites

npm install @vonage/server-sdk

Create a file named stream-audio-into-a-call.js and add the following code:

const { Vonage } = require('@vonage/server-sdk');

const vonage = new Vonage({
  applicationId: VONAGE_APPLICATION_ID,
  privateKey: VONAGE_PRIVATE_KEY,
});

View full source

Write the code

Add the following to stream-audio-into-a-call.js:

vonage.voice.streamAudio(VOICE_CALL_ID, VOICE_STREAM_AUDIO, 0)
  .then((resp) => console.log(resp))
  .catch((error) => console.error(error));

const stopStream = () => {
  vonage.voice.stopStreamAudio(VOICE_CALL_ID)
    .then((resp) => console.log(resp))
    .catch((error) => console.error(error));
};

setTimeout(stopStream, 5000); // delay 5 seconds

View full source

Run your code

Save this file to your machine and run it:

node stream-audio-into-a-call.js

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk-kotlin:2.1.1'

Create a file named StreamAudioIntoCall and add the following code to the main method:

val client = Vonage {
    applicationId(VONAGE_APPLICATION_ID)
    privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
}

View full source

Write the code

Add the following to the main method of the StreamAudioIntoCall file:

val call = client.voice.call(VOICE_CALL_ID)
var streamInfo = call.streamAudio(VOICE_STREAM_URL)
Thread.sleep(5000)
streamInfo = call.stopStream()

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.kt.voice with the package containing StreamAudioIntoCall:

gradle run -Pmain=com.vonage.quickstart.kt.voice.StreamAudioIntoCall

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk:9.3.1'

Create a file named StreamAudioToCall and add the following code to the main method:

VonageClient client = VonageClient.builder()
        .applicationId(VONAGE_APPLICATION_ID)
        .privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
        .build();

View full source

Write the code

Add the following to the main method of the StreamAudioToCall file:

var response = client.getVoiceClient().startStream(VOICE_CALL_ID, VOICE_STREAM_URL, 0);
Thread.sleep(5000);
response = client.getVoiceClient().stopStream(VOICE_CALL_ID);

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.voice with the package containing StreamAudioToCall:

gradle run -Pmain=com.vonage.quickstart.voice.StreamAudioToCall

Prerequisites

Install-Package Vonage

Write the code

Add the following to PlayAudioStreamIntoCall.cs:

var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEY_PATH);
var client = new VonageClient(credentials);

var command = new StreamCommand() { StreamUrl = new[] { VOICE_STREAM_URL } };

var response = await client.VoiceClient.StartStreamAsync(VOICE_CALL_ID, command);

View full source

Prerequisites

composer require vonage/client

Write the code

Add the following to index.php:

require_once __DIR__ . '/../../vendor/autoload.php';

$keypair = new \Vonage\Client\Credentials\Keypair(file_get_contents(VONAGE_APPLICATION_PRIVATE_KEY_PATH), VONAGE_APPLICATION_ID);
$client = new \Vonage\Client($keypair);

$client->voice()->streamAudio(UUID, 'https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3');

View full source

Run your code

Save this file to your machine and run it:

php index.php

Prerequisites

pip install vonage python-dotenv

Write the code

Add the following to play-audio-stream-into-call.py:

from vonage import Auth, Vonage
from vonage_voice import AudioStreamOptions, CallMessage

client = Vonage(
    Auth(
        application_id=VONAGE_APPLICATION_ID,
        private_key=VONAGE_PRIVATE_KEY,
    )
)

response: CallMessage = client.voice.play_audio_into_call(
    VOICE_CALL_ID,
    audio_stream_options=AudioStreamOptions(stream_url=[VOICE_STREAM_URL]),
)

pprint(response)

View full source

Run your code

Save this file to your machine and run it:

python voice/play-audio-stream-into-call.py

Prerequisites

gem install vonage

Write the code

Add the following to play-audio-stream-into-call.rb:

client = Vonage::Client.new(
  application_id: VONAGE_APPLICATION_ID,
  private_key: VONAGE_PRIVATE_KEY
)
    
response = client.voice.stream.start(VOICE_CALL_ID, stream_url: [VOICE_STREAM_URL])

View full source

Run your code

Save this file to your machine and run it:

ruby play-audio-stream-into-call.rb

Try it out

When you run the code, an audio stream from the file specified is played into the call identified with the specified UUID.

Further Reading

  • Conference Calling - This guide explains the two concepts Vonage associates with a call, a leg and a conversation.