如何用Python实现Amazon Connect实时音频流转WAV并存入S3?
用Python将Amazon Connect实时流转换为WAV格式
绝对可以用Python实现这个转换!Amazon Connect通过Kinesis Video Streams传输的实时音频是16kHz采样率、16位深度、单声道的PCM原始数据——WAV格式本质就是PCM数据加上标准的文件头,所以我们只需要给原始PCM数据加上正确的WAV头,就能生成通用播放器可识别的WAV文件了。
下面是针对你的Lambda代码的修改方案,全程用Python标准库实现,不需要额外安装依赖(非常适合Lambda环境):
核心思路
- 从Kinesis Video Streams获取原始PCM音频数据
- 在内存中给PCM数据添加WAV文件头(匹配Connect的音频参数)
- 将生成的WAV数据上传到S3
修改后的Lambda代码
import json import boto3 import time import wave from io import BytesIO bucket='kinesis-video-streams-random' key = 'streams/latest.wav' # 改成wav后缀,方便播放器识别 def lambda_handler(event, context): try: s3_client = boto3.client('s3', region_name='us-east-1') kinesis_client = boto3.client('kinesisvideo', region_name='us-east-1') # 获取GET_MEDIA的端点 get_ep = kinesis_client.get_data_endpoint( StreamARN='arn:aws:kinesisvideo:us-east-1:xxxxxxxxx:stream/xxxxxxxx', APIName='GET_MEDIA' ) video_client = boto3.client('kinesis-video-media', endpoint_url=get_ep['DataEndpoint'], region_name='us-east-1') # 获取媒体流 stream = video_client.get_media( StreamARN='arn:aws:kinesisvideo:us-east-1:xxxxxxxxx:stream/xxxxxxxx', StartSelector={'StartSelectorType': 'EARLIEST'} ) # 读取原始PCM数据 pcm_data = stream['Payload'].read() # 在内存中创建WAV文件(避免使用Lambda临时存储) wav_buffer = BytesIO() with wave.open(wav_buffer, 'wb') as wav_file: # 严格匹配Amazon Connect的音频参数 wav_file.setnchannels(1) # 单声道 wav_file.setsampwidth(2) # 16位深度=2字节 wav_file.setframerate(16000) # 16kHz采样率 # 写入原始PCM数据 wav_file.writeframes(pcm_data) # 将WAV数据上传到S3 wav_buffer.seek(0) # 重置缓冲区指针到开头 s3_client.put_object(Bucket=bucket, Key=key, Body=wav_buffer) print(f"转换后的WAV文件已存储到S3桶 {bucket},路径:{key}") return {"statusCode": 200, "message": "转换并上传成功"} except Exception as e: error_msg = f"处理出错:{str(e)}" print(error_msg) return {"statusCode": 500, "error": error_msg}
关键细节说明
- 音频参数必须严格匹配:Amazon Connect的实时音频固定是16kHz、16位、单声道,参数错配会导致播放速度异常、噪音甚至无法播放。
- 内存高效处理:用
BytesIO在内存中生成WAV文件,符合Lambda无服务器环境的最佳实践,避免了临时文件的读写开销。 - Lambda配置调整:建议把Lambda内存设置为512MB以上,超时时间设为10-15秒,确保有足够资源处理音频流和S3上传操作。
测试建议
部署修改后的Lambda后,触发一次通话流,然后从S3下载生成的WAV文件,用普通音频播放器(比如VLC、Windows Media Player)打开验证。如果播放异常,优先检查音频参数是否正确,再排查Kinesis Video Streams的流是否包含有效音频数据。
内容的提问来源于stack exchange,提问作者eastwood
相关产品推荐
相关产品推荐

