Работа с real-time аудио
От: roman83  
Дата: 04.07.07 12:18
Оценка:
ЧТо-то перечитал я форум(конечно не весь но все же) но что-то не нашел азов

Как бы нужно сделать софт-телефон, использовать какие-то SIP фреймфорки и не хочектся и не получится наверное по ряду причин...
...в общем вопрос не в этом, с сигнализацией то просто разобраться, а вопрос именно как работать с аудио

подскажите может какие источники про это, как я понял нужно смотреть в сторону DirectSound, но он я так понял тупо снимает отсчеты, а ведь нужно то желательно и кодировать, и вот второй вопрос, поддерживаются ли осью стандартно какие-то кодеки???

потом еще вопрос какими блоками нужно снимать отсчеты, насколько знаю задержка общая не должна превышать 20мс....



в общем нужно с азов что-как-куда и зачем
Re: Работа с real-time аудио
От: pullover  
Дата: 04.07.07 13:46
Оценка:
Здравствуйте, roman83, Вы писали:

R>ЧТо-то перечитал я форум(конечно не весь но все же) но что-то не нашел азов


R>Как бы нужно сделать софт-телефон, использовать какие-то SIP фреймфорки и не хочектся и не получится наверное по ряду причин...

R>...в общем вопрос не в этом, с сигнализацией то просто разобраться, а вопрос именно как работать с аудио

R>подскажите может какие источники про это, как я понял нужно смотреть в сторону DirectSound, но он я так понял тупо снимает отсчеты, а ведь нужно то желательно и кодировать, и вот второй вопрос, поддерживаются ли осью стандартно какие-то кодеки???


R>потом еще вопрос какими блоками нужно снимать отсчеты, насколько знаю задержка общая не должна превышать 20мс....




R>в общем нужно с азов что-как-куда и зачем

SIP — это протокол сигнализирования. Также важен SDP протокол.
Есть куча реализаций различных кодеков в инете.
Просто реши хочешь быть SIP совместимым клиентом, тогда нужно SIP стэк готовый найти, чтобы велосипед не изобретать.

Либо открывай UDP сокет и гони туда сжатые данные со звуковой карты. Тут DS не нужен вообще.
Re: Работа с real-time аудио
От: Аноним  
Дата: 05.07.07 06:20
Оценка:
Здравствуйте, roman83, Вы писали:

R>потом еще вопрос какими блоками нужно снимать отсчеты, насколько знаю задержка общая не должна превышать 20мс....


Нет, сынок, это фантастика! (с)
Re: Работа с real-time аудио
От: roman83  
Дата: 06.07.07 12:06
Оценка:
Короче вопрос такой.....захватить данные(аудио) и отправитьих по чети то не проблема......но вот проблема в том как их на применой стороне правильно разпихать по буферам

т.е. предположим отправляю пакетами ЮДП по 1024 байта....на применой стороне получил и что дальше то???

первое что пришло на ум....каждый пакетик пихать в отдельный DirectSoundBuffer и проигрывать, и последующий пакет начинать проигрывать предположим после окончания предыдущего....как узнать когда кончил проигрывать первый — ну по СДК попробовал с помошью евентов....не получается, т.к. видно кусок на столько маленький что проигрывается быстрее чем начинает свою работу WaitForSingleObject и последний соответственно не ловит это событие


вторая мысля...по томуже директовскому СДК есть пример как можно использовать как бы добавление в поточный буффет....НО!!!.....френово то, что при этом надо использовать луп при вызове метода Play и т.е. предположим если данные из сети не придут, т.е я ничего нового не запишу, то буфер то не очищается, и никаких флагов нет чтоб он самоочищался, и т.е можно будет услышать то, что воспроизводилось несколько секунд назад уже......



посдкажите как быть???ведь существуют же софт телефоны!!!
Re[2]: Работа с real-time аудио
От: Аноним  
Дата: 12.07.07 11:00
Оценка:
Здравствуйте, roman83, Вы писали:

R>Короче вопрос такой.....захватить данные(аудио) и отправитьих по чети то не проблема......но вот проблема в том как их на применой стороне правильно разпихать по буферам

Содаешь FIFO буфер
R>т.е. предположим отправляю пакетами ЮДП по 1024 байта....на применой стороне получил и что дальше то???
Выстраивать приходящие пакеты по порядку и декодируешь последовательно.

R>первое что пришло на ум....каждый пакетик пихать в отдельный DirectSoundBuffer и проигрывать, и последующий пакет начинать проигрывать предположим после окончания предыдущего....как узнать когда кончил проигрывать первый — ну по СДК попробовал с помошью евентов....не получается, т.к. видно кусок на столько маленький что проигрывается быстрее чем начинает свою работу WaitForSingleObject и последний соответственно не ловит это событие



R>вторая мысля...по томуже директовскому СДК есть пример как можно использовать как бы добавление в поточный буффет....НО!!!.....френово то, что при этом надо использовать луп при вызове метода Play и т.е. предположим если данные из сети не придут, т.е я ничего нового не запишу, то буфер то не очищается, и никаких флагов нет чтоб он самоочищался, и т.е можно будет услышать то, что воспроизводилось несколько секунд назад уже......




R>посдкажите как быть???ведь существуют же софт телефоны!!!
Re[3]: Работа с real-time аудио
От: Аноним  
Дата: 12.07.07 11:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, roman83, Вы писали:


R>>Короче вопрос такой.....захватить данные(аудио) и отправитьих по чети то не проблема......но вот проблема в том как их на применой стороне правильно разпихать по буферам

А>Содаешь FIFO буфер
R>>т.е. предположим отправляю пакетами ЮДП по 1024 байта....на применой стороне получил и что дальше то???
А> Выстраивать приходящие пакеты по порядку и декодируешь последовательно.

R>>первое что пришло на ум....каждый пакетик пихать в отдельный DirectSoundBuffer и проигрывать, и последующий пакет начинать проигрывать предположим после окончания предыдущего....как узнать когда кончил проигрывать первый — ну по СДК попробовал с помошью евентов....не получается, т.к. видно кусок на столько маленький что проигрывается быстрее чем начинает свою работу WaitForSingleObject и последний соответственно не ловит это событие



R>>вторая мысля...по томуже директовскому СДК есть пример как можно использовать как бы добавление в поточный буффет....НО!!!.....френово то, что при этом надо использовать луп при вызове метода Play и т.е. предположим если данные из сети не придут, т.е я ничего нового не запишу, то буфер то не очищается, и никаких флагов нет чтоб он самоочищался, и т.е можно будет услышать то, что воспроизводилось несколько секунд назад уже......




R>>посдкажите как быть???ведь существуют же софт телефоны!!!


Соответственно если пакеты приходят не попорядку в FIFO, скажем 1 4 2 9 7 3, то при выстравивании в правильную очередь:
1 2 3 4 5 6 ... возникает задержка по ожиданию нужного пакета. Эту задержку мы можем сами регулировать. т.е. скажем ждем требуемого пакета 200 мс, если за это время нужный пакет не пояляется, то восстанавливаем его сами с помощью PLC (packet loss concelnament — восстановление битых пакетов).
Re: Работа с real-time аудио
От: VladEC  
Дата: 15.10.07 14:09
Оценка:
Здравствуйте, roman83, Вы писали:

R>ЧТо-то перечитал я форум(конечно не весь но все же) но что-то не нашел азов

Хм. Дык проприетарно это всё. Частная интеллектуальная собственность

R>Как бы нужно сделать софт-телефон, использовать какие-то SIP фреймфорки и не хочектся и не получится наверное по ряду причин...

Это почему? Насколько я знаю, есть и свободные движки.

R>...в общем вопрос не в этом, с сигнализацией то просто разобраться, а вопрос именно как работать с аудио

R>подскажите может какие источники про это, как я понял нужно смотреть в сторону DirectSound, но он я так понял тупо снимает отсчеты, а ведь нужно то желательно и кодировать, и вот второй вопрос, поддерживаются ли осью стандартно какие-то кодеки???

DirectSound больших преимуществ не даст. Можно и со стандартным поработать.
Кодеки осью не поддерживаются, но можно написать простой G711 вокодер — описание должно быть доступно, поищи.

R>потом еще вопрос какими блоками нужно снимать отсчеты, насколько знаю задержка общая не должна превышать 20мс....


:-D
Смешно :-D Один фрейм простого вокодера составляет обычно 20мс, тебе его ещё надо буферизовать, хотя бы по одному буферу в обе стороны (хотя этого не хватит в любом случае), т.е. 20+20 = 40 — на буферизацию перед кодированием, +20 — накапливаемый буфер, уже 60 мсек.
+ буферизация для учёта сетевого джиттера, потери пакетов и пр. "приятных" вещей.
В-общем-то, не надо даже и надеяться на 20 мсек
А вот если ещё вместо гарнитуры использовать "громкую" связь, то вообще придётся столкнуться с такой "приятной" вещью, как эхо

R>в общем нужно с азов что-как-куда и зачем

Азов очень много и чаще всего за денежки. Посмотри сайт Global IP Solutions, вроде бы у них что-то было в открытом доступе.
Re: Работа с real-time аудио
От: jhng Россия  
Дата: 16.10.07 10:35
Оценка:
Здравствуйте, roman83, Вы писали:

R>подскажите может какие источники про это, как я понял нужно смотреть в сторону DirectSound, но он я так понял тупо снимает отсчеты, а ведь нужно то желательно и кодировать, и вот второй вопрос, поддерживаются ли осью стандартно какие-то кодеки???


R>потом еще вопрос какими блоками нужно снимать отсчеты, насколько знаю задержка общая не должна превышать 20мс....




R>в общем нужно с азов что-как-куда и зачем


Есть такая библиотека. pjsip называется. Посмотри как там все сделано.
Re: Работа с real-time аудио
От: vdimas Россия  
Дата: 25.10.07 14:29
Оценка:
Здравствуйте, roman83, Вы писали:

OpenH323 тебе в помощь, ищи на sourceforge, там всё что надо для звуков и для кодеков в сопутствующей OPAL-библиотеке. И де-джиттеры, и speex, и эхоподавление и т.д. и т.п.

И кстати, многие софтовые (и не только) телефоны работают вовсе не по SIP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.