Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача звука по сети, через stream 
:(
    Опции темы
puZzo
Дата 13.2.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые!
Такой вопрос, при снятии звука с микрофона, его по сути можно запихнуть в буфер либо в MemoryStream.
Как запихать туда конечно тоже не совсем понятно(directX втупляю, научился пока писать в wav используя NAudio либу)

а как потом передавать по сети это богатсво? возможно ли писать в один stream, и его же тут же передавать по сети..т.е. как бы перенаправлять на сокет, аля линукс, там вывод с любого устройства можно куда угодно перенаправить.
PM ICQ   Вверх
Экскалупатор
Дата 13.2.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



при чем тут линукс? у тебя есть звуковой поток. ты можешь его направить куда угодно. хочешь в сокет так направляй в сокет. делай отправку байт(которые составляют звук) а там принимай и обрабатывай.

Добавлено через 1 минуту и 4 секунды
раз ты можешь его записать в файл, и если ты любой файл можешь передать по сети(в виде потока байтов) то очевидно что ты можешь те данные которые ты записываешь в файл отправить туда куда тебе нужно...
PM MAIL ICQ   Вверх
puZzo
Дата 13.2.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



хм..в NAudio при захвате звука с микрофона вызывается событие, которое генерится при поступлении данных со звуковой карты, там как раз и ведется запись..если по сути там не в файл писать а в поток, который тутже отправлять в сеть небольшими порциями, то можно добиться неплохой трансляции..если я все правильно понимаю..
PM ICQ   Вверх
puZzo
Дата 13.2.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



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

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

т.е.
Код

запись и передача
1 поток: [------ пишем в 1Б ---------][------ пишем в 2Б ---------][------ пишем в 1Б ---------].......
2 поток:                              [отправляем 1Б]              [отправляем 2Б]              .......

прием и проигрывание
1 поток: [принимаем 1Б]               [принимаем 2Б]               [принимаем 1Б]             .......................
2 поток:               [-------- читаем 1Б --------][-------- читаем 2Б --------][-------- читаем 1Б --------].......


вообщем если я все правильно понимаю, то воспроизведение у удаленног клиента начнется с небольшой задержкой, но в дальнейшем все "партии" будут приходить еще до окончания чтения предыдущего пакета..я прав?)
PM ICQ   Вверх
-Mikle-
Дата 17.2.2011, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Не вижу смысла делать буферизацию как таковую. Есть ощущение, что даже если ты сразу будешь слать в сеть, то что приходит в событии, то тоже все нормально будет. Так как сам протокол IP все равно отправляет очень маленькими кусочками по 50-100 байт... Правда эксперименты лучше проводить между компами в локальной сети или даже вообще на одном компе, чтоб исключить в этот момент влияние задержек.
Буфер может тут понадобиться, только как конвейер между записывающей частью и отправляющей в сеть. То есть в одном потоке в него пишется, а вторым потоком непрерывно читается и отправляется в сеть. Это нужно чтобы исключить потерю данных в случае медленной отправки. Хотя, на практике, предпочитают терять входные данные в противовес накоплению.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
puZzo
Дата 18.2.2011, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



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

у меня уже другая проблема, как реализовать в сети несколько клиентов, кот могут одновременно говорить в один так называемый канал? пока решил сделать некое колво потоков читающих сокет udp (в идеале читающий только сообщения от одного, своего, отправителя) = колву клиентов в сети, но и тут грабли, сокетов то нельзя создавать больше одного на один порт..вот сижу и думаю, как обойти.. smile 

Это сообщение отредактировал(а) puZzo - 18.2.2011, 05:56
PM ICQ   Вверх
-Mikle-
Дата 18.2.2011, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Ничего не могу сказать по этому поводу, так как нет такого опыта. Но мне интересно будет узнать, как такие вещи реализуются на самом деле. Покопаюсь на досуге в нете, может че-то найду. Если найдешь решение, тоже пиши сюда. 

А пока, что мне видится щас:
Каждый из клиентов слушает например порт 5577 (имеем ввиду что для наших аудио-целей). У каждого клиента есть список айпи опонентов с которыми идет связь. Каждый клиент слушает микрофон и шлет пакеты по списку опонентов. вроде так должно работать.

Я так понимаю, все это в образовательных целях? Потому как в Директ-икс, насколько я знаю, уже все это есть, включая сжатие, поддержку различных протоколов, передача по сети и прочее.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
puZzo
Дата 18.2.2011, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



как раз таки не в образовательных) на работе нужно заменить старые селекторные установки..DirectSound ковырял, но чет сложно там както, да и информации скудновато..

Потому как в Директ-икс, насколько я знаю, уже все это есть, включая сжатие, поддержку различных протоколов, передача по сети и прочее. 

можно поподробнее? где почитать про это можно?

Это сообщение отредактировал(а) puZzo - 18.2.2011, 07:09
PM ICQ   Вверх
-Mikle-
Дата 18.2.2011, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Цитата(puZzo @  18.2.2011,  10:09 Найти цитируемый пост)
можно поподробнее? где почитать про это можно?

Не могу сказать точно, так как готовых ссылок в избранном нет. И сам не работал с директ-иксом в этом направлении. Просто где-то как-то то ли слышал, то ли демки качал, где это было сделано. Помоему, в стандарном Managed DirectX SDK есть пример, если не ошибаюсь. Поищи хорошо, надеюсь, что я все правильно когда-то услышал или понял.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
puZzo
Дата 20.2.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



вчера на работе завязался у меня спор с коллегами, они предлагали сделать на сервере микшер, который бы сливал из N потоков данных в один и отправлял бы обратно. Я им пытался объяснить что на сервере слишком мала вероятность одновременного прихода двух пакетов с данными, чтобы их сливать, в итоге они будут отправляться по одиночке, и все равно у клиентов получится очередь. 

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

какие мысли по этому поводу будут?
PM ICQ   Вверх
-Mikle-
Дата 20.2.2011, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Серверное вмешательство я бы не стал делать. Посмотрите на скайп, он работает без сервера и для разговора, и для чата, и история сообщений, все без сервера. На мой взгляд, делать смешивание на сервере не имеет смысла. Сервер может только лишь маршрутизацию выполнять, в крайнем случае. В любом случае это вопрос не простой и надо его детально разбирать, если хотите получить нормальный результат. А почему бы не посмотреть в сторону готовых решений?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Экскалупатор
Дата 20.2.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



puZzo, а как предлагалось "микшировать"? т.е. как сложить вместе два куска звука длиной скажем по 0,5 сек?
PM MAIL ICQ   Вверх
puZzo
Дата 20.2.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



-Mikle- вот и я про тоже! сделал тестовую приложуху, передавал просто байт, и сервером проверял, если есть результаты(хотя бы у одного потока) то слаживал..в итоге вообщем получилось 50х50 т.н. микширования(в данном случае плюсования) + потеря "пакетов" ~40-50%, т.к. в то время пока я там проверял, сливал и. пр фигней занимался в нескольких потоках уже спели данные обновиться. пытался делать задержку в потоках, до тех пор пока не считаются оттуда данные, но все равно фигня получается.

насчет скайпа это понятно, но как? инфы нету, уже две недели бороздю просторы интернета) а готовое решение будет приобретаться у мелкомягкотелых если я не справлюсь) у меня конечно проблем не будет, начальство понимает что я не сверхспециалист, а только недавно закончил вуз + после армии толькотолько форму восстановил) но мое самолюбие будет задето)

Экскалупатор никак. Микшировать я не собираюсь (я как раз и пытался доказать что это бесполезно) и думаю пока с этим разбираться не буду. но думаю примерно так:
поток данных из 0,5сек это массив байт, наложить их друг на друга, и выбрать макс, т.е.

Код
for (int i = 0; i < data1.Length; i++)
{
  if (data1[0] > data2[0])
    data3[0] = data1[0]
  else
    data3[0] = data2[0]
}

но это всего лишь мое (некомпетентное) видение вопроса, думаю не все так просто.

Это сообщение отредактировал(а) puZzo - 20.2.2011, 14:17
PM ICQ   Вверх
-Mikle-
Дата 20.2.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Если я не ошибаюсь, то самая прстая формула смешивания звука это усреднение. То есть если 4 канала, то берем их сумму и делим на 4.
А на счет самолюбия, это ты зря конечно. Я все понимаю, но если бы задача была тривиальной, мелкософт бы ее не продавал. В звуке, особенно в многоканальном, да еще и плюс по сети, заморочек съешь не мало. Так что советую тебе еще раз подумать над этим. А чтоб самолюбие не было задето, перенеси эту задачу из категории "работа" в категорию "личное" и продолжай изучать этот вопрос дальше.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
puZzo
Дата 21.2.2011, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



майкрософт продает не только это;-) там система управления комуникацией на предприятии, и это далеко не только конференции, замена атс по сути..
а насчет сложности задачи, ну я бы не сказал, что тут все так сложно, я уже научил общаться двух клиентов, сейчас копаю .NET Remoting, думаю он поможет решить проблему параллельной передачи данных.
и насчет личного и рабочего..оно уже личное) половина готова решения, осталось чуть чуть, и заработает)) ну и конечно же я не рву на себе волосы и не бросаю остальную работу, более серьезных задач нет, по мелочи только софт кое-где подправляю, поэтому все нормально)
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1428 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.