Opus功能十分强大,内置了FEC和DTX功能,Opus对FEC的使用方式是动态的,也就是说Opus能根据对端反馈的丢包率来动态的使用FEC功能,48k采样率,单声道、16k码率并且帧长度为20ms时,这种情况下只有在丢包率高于20%的时候Opus才会使用FEC,今天主要对Opus在这种条件下的FEC的功能进行了测试,本问是基于Opus接口的那篇文章写的,如果没看过可以链接到 编解码器:Opus编解码器的接口及使用。
找一段pcm音频原始文件,用作编解码器操作数据的源文件,取名为test.pcm。然后进入到opus_demo.exe文件的目录下SHIFT+右键点击在此处打开命令窗口。
如图在opus_demo.exe可执行文件目录下打开命令台,之后就要对你的pcm源文件进行编码和解码,测试FEC的纠错功能。利用opus_demo演示程序对pcm文件进行处理。
根据上面链接文章中的指令参数调用表格,写出如下指令:
opus_demo voip 48000 1 16000 path\to\test.pcm path\to\test_nofec_0.pcm
opus_demo voip 48000 1 16000 -loss 5 path\to\test.pcm path\to\test_nofec_5.pcm
opus_demo voip 48000 1 16000 -loss 10 path\to\test.pcm path\to\test_nofec_10.pcm
opus_demo voip 48000 1 16000 -loss 15 path\to\test.pcm path\to\test_nofec_15.pcm
opus_demo voip 48000 1 16000 -loss 20 path\to\test.pcm path\to\test_nofec_20.pcm
opus_demo voip 48000 1 16000 -loss 25 path\to\test.pcm path\to\test_nofec_25.pcm
opus_demo voip 48000 1 16000 -loss 30 path\to\test.pcm path\to\test_nofec_30.pcm
opus_demo voip 48000 1 16000 -inbandfec path\to\test.pcm path\to\test_0.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 5 path\to\test.pcm path\to\test_5.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 10 path\to\test.pcm path\to\test_10.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 15 path\to\test.pcm path\to\test_15.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 20 path\to\test.pcm path\to\test_20.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 25 path\to\test.pcm path\to\test_25.pcm
opus_demo voip 48000 1 16000 -inbandfec -loss 30 path\to\test.pcm path\to\test_30.pcm
每一行都会生成一个pcm文件(opus_demo指令之后加 -e 和 -d 分别表示只编码和只解码,什么都不加表示编码之后再解码),前7行表示在不使用FEC功能前提下的Opus在各种丢包率下编解码操作后的得到的pcm文件,后7行表示前7行的基础上加入了opus内置的FEC功能,将所有最终得到的pcm原始音频文件在coolEditPro软件中播放,然后比较他们之间的音质差异。
首先比较没加FEC处理的音频在各种丢包率下的音质(当然是丢包率越少越好),然后比较在相同丢包率下,FEC处理过和FEC没有处理过的音频的音质比较,你会发现一个很奇怪的现象,在丢包率不大于20%时,FEC处理过的音质与FEC没有处理过的音质基本没有区别,甚至用Beyond Compare软件对两个