VOIP SIP - Помогите кодировать из PCM в U-law

Я работаю над проектом VOIP Windows Phone (программное приложение для Windows Phone). В настоящее время я (программный телефон Windows phone) могу принимать и слышать голос другого программного телефона, только ОДНОСТОРОННИЙ. Я могу отправить свой голос (пакеты RTP) на другой софтфон, но он содержит полный шум. Я следовал этому http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#xx2573223xx для кодирования и декодирования RTP-пакета между U-законом и PCM. Функция декодирования у меня работала хорошо, а кодирование — нет.

Я расшифровал пакет RTP и воспроизвел его с частотой дискретизации 8000 кГц (это частота дискретизации формата U-law). Вот мой код для воспроизведения:

SoundEffect soundEffect = new SoundEffect(buffer, 8000, AudioChannels.Mono);
SoundEffectInstance soundInstance = soundEffect.CreateInstance();
soundInstance.Play();

А что касается кодирования, я использовал микрофон Windows Phone для записи голоса => кодировать в формат U-Law => поместить в пакет RTP => отправить. Но эти пакеты содержат полный шум, а другой программный телефон (звонок назначения) принимает только шум и шум.

Формат записанных данных микрофона: PCM 16 бит - 16 кГц. Есть ли у вас какие-либо решения, которые помогут мне решить эту проблему?

С уважением и большое спасибо.


person hthoang88    schedule 04.05.2012    source источник
comment
где ваш код для обработки захвата и кодирования?   -  person Rowland Shaw    schedule 04.05.2012
comment
Вот как это сделать в Windows 7 view/ хотя я не знаю, будет ли это особенно полезно для вас, поскольку вы не сможете использовать библиотеку NAudio на WP7.   -  person sipsorcery    schedule 04.05.2012
comment
@ hthoang88: вы могли использовать инфраструктуру микрофона для записи звука, я делаю то же самое, и мой сервер поддерживает скорость 20 мс, и, просматривая документацию по микрофону, скорость буфера должна быть от 100 мс до 1000 мс, как вы смогли чтобы получить образец 320   -  person Amitg2k12    schedule 22.11.2012


Ответы (1)


@Rowland: я использовал микрофон WP для захвата данных

public Microphone microphone = Microphone.Default;     
private byte[] buffer; 
Queue<byte[]> recordedVoice = new Queue<byte[]>(); 

Он будет получать 320 байт каждый раз

microphone.GetData(buffer);    

и я сохранил его в очередь

recordedVoice.Enqueue(buffer);

Затем я закодирую каждый элемент записанного голоса в формат U-Law (функция кодирования, ссылка на которую приведена в http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#).xx2573223xx):

byte[] encoded = G711MuLaw.G711MuLawEncode(recordedVoice.Dequeue());

Но кодировал неправильно.

@sipwiz: я думаю, что NAudio не поддерживает WP7, потому что это проект C #, а не Silverlight.

@Rowland & sipwiz: Я так счастлив, когда получил ваши ответы, большое спасибо.

person hthoang88    schedule 05.05.2012