openAL - накъсан звук при възпроизвеждане на буферите

Имам гласов чат, който получава rtp пакети (всеки пакет съдържа 20ms глас afaik), добавя ги към буфер и го възпроизвежда.

Ако извикам alSourcePlay() директно след буфериране на пакет (имам 5 буфера и всеки буфер получава един пакет, който след това се използва повторно, след като пакетите се възпроизвеждат), звукът ще бъде „накъсан“, тъй като ще възпроизведе буфера преди да пристигне друг пакет.

Въпросът ми е как се справяте с това, така че аудиото да не се възпроизвежда толкова накъсано?


person KaiserJohaan    schedule 05.05.2011    source източник


Отговори (1)


Ако получавате средно по-малко от 50 20ms пакета в минута, тогава някъде трябва да има паузи. Ако съхранявате пакетите за известно време, преди да ги възпроизведете, тогава можете да търсите естествени паузи (тишина) и да комбинирате пропуските с естествените паузи, така че нещата да звучат по-естествено. Колкото повече съхранявате, толкова по-добро възпроизвеждане ще звучи, но го правете твърде много и забавянето ще стане неприятно.

Количеството буфериране, от което се нуждаете, е въпрос на вкус. Кое е по-грозно, накъсан звук или забавен отговор. Предполагам, че ще трябва да го проектирате така, че да е променлива и след това да експериментирате, за да намерите „щастливата среда“

Ако не разполагате с максимум 10 пакета в секунда, тогава се предлага по-проста схема: Поставете забавяне от 4 ms между всеки пакет, което трябва да е неоткриваемо. Бягайте за 1 секунда. Вижте колко пакета са се натрупали (ако вземете само 40 пакета, това ще бъде нула) Регулирайте забавянето между пакетите, за да компенсирате. Продължи.

person ravenspoint    schedule 05.05.2011
comment
О, съжалявам между другото, имах предвид, че получавам 40-50 пакета в секунда LOL :P Колко буфера са ви необходими, за да не изхвърляте пакети, защото буферите са пълни? - person KaiserJohaan; 05.05.2011
comment
Така те разбрах. 40 пакета/секунда = 800ms. Така че ви липсват 200ms. Разделете на 50, за да получите 4 ms. Ако сте къси пакети, никога няма да е необходимо да ги изхвърляте. Проблемът е да се заменят липсващите пакети. - person ravenspoint; 05.05.2011