如何编码 WAV 以使用 SIPp 播放
How to encode WAV to play with SIPp
通过查看另一个 SIPp related question,我了解到现在可以使用 rtp_stream
操作播放 WAV 文件。
我尝试了几种不同的 WAV 文件,但都没有成功。我得到的只是一些噪音,而不是预期的声音。
在上述问题的一条评论中,有一条将 WAV 文件转换为兼容格式的简单说明,但效果不佳。
我也尝试过使用 sox 转换 this file 但没有成功。
任何人都可以指导我如何生成与 SIPp 一起使用的有效 WAV 文件吗?
这是我的 recv 200 OK
命令,其中包括播放音频操作:
<recv response="200" rtd="true">
<action>
<exec rtp_stream="sorry_dave.wav,-1" />
</action>
</recv>
我一直在寻找不同的 WAV 文件编码,并在 Wikipedia 上找到了很多。
我发现 one file (8,000 Hz µ-Law
) 可以与 rtp_stream="8kulaw.wav,-1,0"
exec 参数一起正常工作。
这是文件信息:
ubuntu@mylinux:~/$ file 8kulaw.wav
8kulaw.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 mu-law, mono 8000 Hz
我尝试使用此 Sox
命令将 this file 编码为完全相同的配置,但没有成功:
sox -r 8000 -e u-law sorry_dave.wav sorry_dave4.wav
抱歉 - 现在有点模糊,因为我已经很久没有这样做了。据我所知,u-law 编码在 sipp 中不起作用,所以我使用我构建的脚本将文件编码为 a-law。我注意到使用 sox 进行转换有一些细微差别。在我看来,要么你的 SDP 不匹配,要么文件编码不正确,确保你只使用一个通道。尝试我在下面发布的方法和代码。
文件头应该是
文件大小:54.7k 比特率:64.1k
编码:A-law
频道:1 @ 13-bit
采样率:8000Hz
回放增益:关闭
持续时间:00:00:06.83
或
文件大小:54.7k 比特率:64.1k
编码:u-law
通道:1 @ 14 位
采样率:8000Hz
回放增益:关闭
持续时间:00:00:06.83
./wav_to_gsm.sh sorry_dave.wav sorry_dave_alaw.wav sox alaw
#!/bin/bash
if [ -z "" ];then
echo "usage: [=10=] [input.wav] [output.gsm] [sox|gst] [alaw|ulaw]"
exit
fi
IN=
OUT=
TOOL=
ENC=
function conv1()
{
if [ $ENC == "alaw" ];then
sox $IN -r 8000 -c 1 -e a-law $OUT resample -ql
else
sox $IN -r 8000 -c 1 -e u-law $OUT resample -ql #default
fi
#notes:
#the output file extension (wav or gsm) will change how sox performs the encoding
#use .wav for sipp RTP
Encoding: u-law Encoding: A-law
Channels: 1 @ 14-bit Channels: 1 @ 13-bit
#use .gsm for asterisk music on hold
Encoding: GSM
Channels: 1 @ 16-bit
}
function conv2()
{
if [ $ENC == "alaw" ];then
gst-launch filesrc location=$IN \
! wavparse \
! audioconvert \
! audioresample \
! alawenc \
! audio/x-alaw, rate=8000, channels=1 \
! wavenc \
! filesink location=$OUT
else
gst-launch filesrc location=$IN \
! wavparse \
! audioconvert \
! audioresample \
! mulawenc \
! audio/x-mulaw, rate=8000, channels=1 \
! wavenc \
! filesink location=$OUT
fi
# notes:
# file output extension of wav and gsm are interchangeable in the converted format
}
if [ == "gst" ];then
conv2
else
conv1
fi
您可以使用 Audacity 为 sipp 编码 wav:
Select 在项目的底部栏 8000Hz 中将音频导出为 'Another compressed format' :单击 'Options' 和 select 'WAV (Microsoft)' Header 和 'A-Law' 编码(对于 PCMA)或 'U-Law'(对于 PCMU)。
您还应该验证您的场景文件:SDP 消息必须具有 PCMA 或 PCMU 音频并像这样使用 "rtpstream_audio_port"(对于 PCMA):
m=audio [rtpstream_audio_port] RTP/AVP 8
a=rtpmap:8 PCMA/8000
通过查看另一个 SIPp related question,我了解到现在可以使用 rtp_stream
操作播放 WAV 文件。
我尝试了几种不同的 WAV 文件,但都没有成功。我得到的只是一些噪音,而不是预期的声音。
在上述问题的一条评论中,有一条将 WAV 文件转换为兼容格式的简单说明,但效果不佳。
我也尝试过使用 sox 转换 this file 但没有成功。
任何人都可以指导我如何生成与 SIPp 一起使用的有效 WAV 文件吗?
这是我的 recv 200 OK
命令,其中包括播放音频操作:
<recv response="200" rtd="true">
<action>
<exec rtp_stream="sorry_dave.wav,-1" />
</action>
</recv>
我一直在寻找不同的 WAV 文件编码,并在 Wikipedia 上找到了很多。
我发现 one file (8,000 Hz µ-Law
) 可以与 rtp_stream="8kulaw.wav,-1,0"
exec 参数一起正常工作。
这是文件信息:
ubuntu@mylinux:~/$ file 8kulaw.wav
8kulaw.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 mu-law, mono 8000 Hz
我尝试使用此 Sox
命令将 this file 编码为完全相同的配置,但没有成功:
sox -r 8000 -e u-law sorry_dave.wav sorry_dave4.wav
抱歉 - 现在有点模糊,因为我已经很久没有这样做了。据我所知,u-law 编码在 sipp 中不起作用,所以我使用我构建的脚本将文件编码为 a-law。我注意到使用 sox 进行转换有一些细微差别。在我看来,要么你的 SDP 不匹配,要么文件编码不正确,确保你只使用一个通道。尝试我在下面发布的方法和代码。
文件头应该是
文件大小:54.7k 比特率:64.1k
编码:A-law
频道:1 @ 13-bit
采样率:8000Hz
回放增益:关闭
持续时间:00:00:06.83
或
文件大小:54.7k 比特率:64.1k
编码:u-law
通道:1 @ 14 位
采样率:8000Hz
回放增益:关闭
持续时间:00:00:06.83
./wav_to_gsm.sh sorry_dave.wav sorry_dave_alaw.wav sox alaw
#!/bin/bash
if [ -z "" ];then
echo "usage: [=10=] [input.wav] [output.gsm] [sox|gst] [alaw|ulaw]"
exit
fi
IN=
OUT=
TOOL=
ENC=
function conv1()
{
if [ $ENC == "alaw" ];then
sox $IN -r 8000 -c 1 -e a-law $OUT resample -ql
else
sox $IN -r 8000 -c 1 -e u-law $OUT resample -ql #default
fi
#notes:
#the output file extension (wav or gsm) will change how sox performs the encoding
#use .wav for sipp RTP
Encoding: u-law Encoding: A-law
Channels: 1 @ 14-bit Channels: 1 @ 13-bit
#use .gsm for asterisk music on hold
Encoding: GSM
Channels: 1 @ 16-bit
}
function conv2()
{
if [ $ENC == "alaw" ];then
gst-launch filesrc location=$IN \
! wavparse \
! audioconvert \
! audioresample \
! alawenc \
! audio/x-alaw, rate=8000, channels=1 \
! wavenc \
! filesink location=$OUT
else
gst-launch filesrc location=$IN \
! wavparse \
! audioconvert \
! audioresample \
! mulawenc \
! audio/x-mulaw, rate=8000, channels=1 \
! wavenc \
! filesink location=$OUT
fi
# notes:
# file output extension of wav and gsm are interchangeable in the converted format
}
if [ == "gst" ];then
conv2
else
conv1
fi
您可以使用 Audacity 为 sipp 编码 wav: Select 在项目的底部栏 8000Hz 中将音频导出为 'Another compressed format' :单击 'Options' 和 select 'WAV (Microsoft)' Header 和 'A-Law' 编码(对于 PCMA)或 'U-Law'(对于 PCMU)。
您还应该验证您的场景文件:SDP 消息必须具有 PCMA 或 PCMU 音频并像这样使用 "rtpstream_audio_port"(对于 PCMA):
m=audio [rtpstream_audio_port] RTP/AVP 8
a=rtpmap:8 PCMA/8000