寻求Nexmo Voice API向活跃通话流式传输音频文件的示例代码
当然有过相关实践!我可以给你分享PHP和Ruby两种语言的示例代码,帮你实现向活跃通话流式传输音频文件的功能。
PHP 示例
首先你需要确保项目里安装了Guzzle HTTP客户端(如果没有的话,用composer require guzzlehttp/guzzle安装)。下面是完整的示例代码:
<?php require 'vendor/autoload.php'; use GuzzleHttp\Client; // 你的Nexmo API密钥和密码 $apiKey = 'YOUR_NEXMO_API_KEY'; $apiSecret = 'YOUR_NEXMO_API_SECRET'; // 要传输音频的活跃通话ID $callId = 'ACTIVE_CALL_ID'; // 你要流式传输的音频文件URL(支持MP3/WAV格式) $audioUrl = 'https://example.com/your-audio-file.mp3'; $client = new Client([ 'base_uri' => 'https://api.nexmo.com/v1/calls/', 'auth' => [$apiKey, $apiSecret] ]); try { $response = $client->post("$callId/stream", [ 'json' => [ 'stream_url' => [$audioUrl], 'loop' => 1 // 设置循环次数,0表示无限循环 ] ]); $responseBody = json_decode($response->getBody(), true); echo "音频流式传输已启动,响应信息:" . print_r($responseBody, true); } catch (Exception $e) { echo "请求失败:" . $e->getMessage(); } ?>
关键点说明:
stream_url是一个数组,你可以传入多个音频URL,API会按顺序播放loop参数控制音频循环次数,设置为0会一直循环直到你停止流式传输- 确保你的音频文件可以被Nexmo的服务器访问到(不要设为内网地址)
Ruby 示例
Ruby示例我们可以使用Faraday HTTP库(安装命令:gem install faraday),代码如下:
require 'faraday' require 'json' # 配置Nexmo认证信息和通话参数 api_key = 'YOUR_NEXMO_API_KEY' api_secret = 'YOUR_NEXMO_API_SECRET' call_id = 'ACTIVE_CALL_ID' audio_url = 'https://example.com/your-audio-file.mp3' # 初始化HTTP客户端 conn = Faraday.new(url: 'https://api.nexmo.com/v1/calls') do |faraday| faraday.basic_auth(api_key, api_secret) faraday.adapter Faraday.default_adapter end # 发送请求启动音频流式传输 begin response = conn.post("/#{call_id}/stream") do |req| req.headers['Content-Type'] = 'application/json' req.body = JSON.generate({ stream_url: [audio_url], loop: 1 }) end puts "音频流式传输已启动,响应信息:#{response.body}" rescue Faraday::Error => e puts "请求失败:#{e.message}" end
额外提示:
如果需要停止正在进行的音频流式传输,可以发送一个DELETE请求到/v1/calls/{call_id}/stream接口,同样使用上面的认证方式即可。
内容的提问来源于stack exchange,提问作者Thomas Koh
相关产品推荐
相关产品推荐

