使用FFmpeg向Azure Media Services推送多轨音频直播平滑流
FFmpeg命令行示例:多音频设备推流到Azure Media Services Smooth Ingest(Basic Pass-through)
前提准备
- 获取Azure Media Services通道的Smooth Ingest输入URL(通道需处于Running状态)
- 确认本地音频设备标识:
- Windows:执行
ffmpeg -list_devices true -f dshow -i dummy查看可用音频设备名称 - Linux:执行
arecord -l或pactl list sources获取设备硬件地址
- Windows:执行
命令示例(Windows环境,基于dshow捕获)
假设两个音频设备名称分别为"Microphone (English Track)"和"Microphone (Chinese Track)",推流命令如下:
ffmpeg -f dshow -i audio="Microphone (English Track)" -f dshow -i audio="Microphone (Chinese Track)" \ -map 0:a -c:a copy -metadata:s:a:0 language=eng \ -map 1:a -c:a copy -metadata:s:a:1 language=zho \ -f smooth_streaming -movflags frag_keyframe+empty_moov \ "http://your-amss-ingest-endpoint/ingest.isml/Streams(audio)"
命令参数说明
-f dshow -i audio="xxx":指定Windows平台下的音频捕获设备(Linux替换为-f alsa -i hw:0,0这类硬件标识)-map 0:a/-map 1:a:将两个捕获到的音频流映射到输出-c:a copy:Basic Pass-through要求不转码,直接复制原始音频编码(需确保编码为Azure支持的格式:AAC、MP3,推荐AAC)-metadata:s:a:0 language=eng:给第一个音频轨道设置语言标识(采用ISO 639-1/3标准代码,eng对应英语,zho对应中文)-f smooth_streaming:指定输出为Smooth Streaming格式,适配Azure的Ingest端点要求-movflags frag_keyframe+empty_moov:生成分段式流,满足实时推流的分段传输要求- 替换最后的URL为你的Azure通道实际Ingest输入地址
关键注意事项
- 必须使用Basic Pass-through类型通道,该通道仅透传流,不做转码处理
- 语言标识需严格遵循标准代码,否则Azure Media Player无法正确识别并显示语言选择菜单
- 本地测试可先将输出改为本地文件(如
output.ismv),执行ffmpeg -i output.ismv检查元数据是否包含正确的语言标识,确认无误后再推流到Azure - 在Azure Media Player中测试时,需使用通道的输出流式URL(而非Ingest URL),AMP会自动识别多音频轨道并提供语言切换选项
排查要点
- 推流失败时查看FFmpeg日志,确认是否存在设备访问权限、编码不支持或Ingest URL错误
- 若AMP未显示语言选项,检查轨道元数据是否正确设置,或确认通道输出的流中是否包含多音频轨道
内容的提问来源于stack exchange,提问作者Jean P
相关产品推荐
相关产品推荐

