MP3 Radio
От: Stas Kmet  
Дата: 20.05.03 15:57
Оценка:
Кто-нибудь пытался написать программу, реализующую MP3 Radio
или натыкался на полезную информацию по этому вопросу?
Необходимо, вкратце, следующее: на одном компе юзер говорит
в микрофон, а на другом его слушает другой юзер. У меня все
работает, но на основе множества WAV-файлов и TPowerSock
(TNMStrm и TNMStrmServ). А хотелось бы поаккуратнее:
на основе MP3-потока и обычных сокетов. Реально ли это?
Приветствуются любые ссылки.

                                          Заранее благодарен.
Re: MP3 Radio
От: oleg_v Украина www.lot.kharkov.ua
Дата: 20.05.03 16:33
Оценка:
Здравствуйте, Stas Kmet, Вы писали:

SK>А хотелось бы поаккуратнее:

SK>на основе MP3-потока и обычных сокетов. Реально ли это?
SK>Приветствуются любые ссылки.

Вполне реально:
1. Получаешь звук из аудио устройства (там PCM)
2. Вызываешь через Audio Compression Manager кодек
3. Блок данных после кодека посылаешь (не забыв ему добавить
контрольную сумму) через сокеты по протоколу UDP — так будет
наиболее правильно и не криво
С другой стороны:
4. Принимаешь с помощью сокетов UDP датаграмму
5. Проверяешь, совпала ли контрольная сумма
6. Если контрольная сумма не совпала или пакет в заданное время
не пришел, то выкидываешь на выход блок белого шума со средней
громкостью, которую получаешь из предыдущего блока (чтобы не было
щелчков при пропадании пакетов)
7. Если блок пришел, вызываешь кодек для декодирования
8. Выкидываешь полученный блок в аудиоустройство

В этом алгоритме нехватает инициализаций и буфера пакетов (для IP
телефонии на 100 мс, для радио можно и на пару секунд, лишь бы
оно потом линейно выдавалось)

Это примерный алгоритм. Сам такую штуку писал несколько лет назад.

Понять как работает захват/выдача звука можно, например,
http://www.fortunecity.com/meltingpot/barnsbury/215/index.htm
компонент AudioIO
Как производится компрессия
Audio Compression Manager в MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/audcomp_3kc2.asp
Передача пакетов
Свой протокол, через UDP на основе sockets

Все вышеописанное работать будет не криво и в меру безглючно (в меру написания
если что-то еще надо могу подсказать

P.S. Так можно не только mp3, но и G723, G729 и т.д.
(все кодеки, установленные в системе)
... << RSDN@Home 1.0 beta 7a >>
Re[2]: MP3 Radio
От: Stas Kmet  
Дата: 26.05.03 08:48
Оценка:
Здравствуйте, oleg_v, Вы писали:


_> 3. Блок данных после кодека посылаешь (не забыв ему добавить

_>контрольную сумму) через сокеты по протоколу UDP — так будет
_>наиболее правильно и не криво

Почему UDP? Чем плохи обычные сокеты? Есть какие-то полезные нюансы.

_> 8. Выкидываешь полученный блок в аудиоустройство


А насколько это будет нормально работать в режиме реального времени.
Допустим, если возникает задержка в передаче. И как отразятся на звуке
промежутки между блоками?

_>Это примерный алгоритм. Сам такую штуку писал несколько лет назад.


Спасибо за ответ. Буду разбираться.

_>Все вышеописанное работать будет не криво и в меру безглючно (в меру написания

_>если что-то еще надо могу подсказать

Хорошо, если возникнут трудности, буду спрашивать.

_>P.S. Так можно не только mp3, но и G723, G729 и т.д.


А это что за зверь? G723 G729?

Еще раз благодарю.
Re[3]: MP3 Radio
От: oleg_v Украина www.lot.kharkov.ua
Дата: 29.05.03 08:07
Оценка:
Здравствуйте, Stas Kmet, Вы писали:

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


SK>Почему UDP? Чем плохи обычные сокеты? Есть какие-то полезные нюансы.


Так это и есть обычные сокеты. Просто протокол UDP, т.к. TCP в инете часто
отрывается (для передачи звука) и долго идет реконнект, так что при
отрыве точно будет перерыв в воспроизведении. А еще лучше потерять несколько
пакетов (будет небольшое снижение качества — и все), чем ждать секунду
реконнекта

SK>Допустим, если возникает задержка в передаче. И как отразятся на звуке

SK>промежутки между блоками?

Если стоит кеширование и размера кеша хватило — никак. А если нет и
задержка небольшая (или поерялось несколько пакетов) то при использовании
белого шума в качестве заменителя этого практически не слышно.
Если не использовать заполнение интервалов белым шумом, то в этом месте будет слышен щелчок (хорошо слышен — проверено).

SK>А это что за зверь? G723 G729?


Тоже сжатие, но голоса (хотя, 729-й можно попробовать, но параметры прийдется перестраивать).
Для сжатия голоса, музыки не только mp3 используют....

SK>Еще раз благодарю.

не за что
... << RSDN@Home 1.0 beta 7a >>
Re[4]: MP3 Radio
От: Stas Kmet  
Дата: 02.06.03 10:15
Оценка:
SK>>Почему UDP? Чем плохи обычные сокеты? Есть какие-то полезные нюансы.

_>Так это и есть обычные сокеты. Просто протокол UDP, т.к. TCP в инете часто

_>отрывается (для передачи звука) и долго идет реконнект, так что при
_>отрыве точно будет перерыв в воспроизведении. А еще лучше потерять несколько
_>пакетов (будет небольшое снижение качества — и все), чем ждать секунду
_>реконнекта

Я просто не пойму, как проверить, что теряются пакеты. Сервер с его методом
ReceiveBuffer (или что-то в этом роде, не помню точно) просто ждет данных.
Хотя для моей задачи не важно, потеряются пакеты или нет, потому что сеть
в пределах одной комнаты и коллапсов вроде возникнуть не должно.

SK>>Допустим, если возникает задержка в передаче. И как отразятся на звуке

SK>>промежутки между блоками?

_>Если стоит кеширование и размера кеша хватило — никак. А если нет и

_>задержка небольшая (или поерялось несколько пакетов) то при использовании
_>белого шума в качестве заменителя этого практически не слышно.

Это я понял. Буду производить белый шум. У меня другая проблема: никак не
получается заставить звуковое устройство играть маленький кусочек звука.
Я уже спрашивал здесь на форумах, как сделать так, чтобы я слышал то, что
говорю в микрофон в реальном времени.


P.S. Может, вы оставите мне свой e-mail, чтобы не приходилось каждый раз
заходить на форум для переписки?
Re[5]: MP3 Radio
От: oleg_v Украина www.lot.kharkov.ua
Дата: 03.06.03 09:43
Оценка:
Здравствуйте, Stas Kmet, Вы писали:

SK>Я просто не пойму, как проверить, что теряются пакеты. Сервер с его методом

SK>ReceiveBuffer (или что-то в этом роде, не помню точно) просто ждет данных.
надо их пронумеровать

SK>Хотя для моей задачи не важно, потеряются пакеты или нет, потому что сеть

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

SK>Это я понял. Буду производить белый шум. У меня другая проблема: никак не

SK>получается заставить звуковое устройство играть маленький кусочек звука.
SK>Я уже спрашивал здесь на форумах, как сделать так, чтобы я слышал то, что
SK>говорю в микрофон в реальном времени.
где-то что-то было на эту тему (посмотрю...) у меня есть компонент, по которому можно понять как это делается или MSDN
Вообще там есть проблема, связанная с FullDuplex если его нет — так не получится, прийдется постоянно переключать.

SK>P.S. Может, вы оставите мне свой e-mail, чтобы не приходилось каждый раз

SK>заходить на форум для переписки?
icq:43811994
ol@lot.kharkov.ua лучше по ICQ
... << RSDN@Home 1.0 beta 7a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.