Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передать аудио-поток на IceCast [D5, D6, D7, Win2k, WinXP]


Страницы:   1 2

DDDeN ©   (2007-03-20 04:40:00) 

Собственно сабж. Надо захватить стерео-поток со звуковухи (общий выход звука, тоесть, все что проигрывается) и передать его на сервер IceCast (ну или даже ShoutCast). Есть идеи?


DDDeN   (2007-03-28 16:33:00) [1]

Попробовал снифить порт 8000. Там помимо всяких данных еще идет общение на низком уровне. И формат, который вы привели по ссылке совсем не подходит. Наверно на низком уровне идет получение версии сервера или еще что-то. И пароль там в открытом виде не передается! Он зашифрован.
Возможно появились различия в серверах. На момент написания (14 марта 2004) наверно был другой сервер. А сейчас уже все поменялось. Тогда вопрос о совместимости разных версий появляется... Тоже не дело...


Сергей М.   (2007-03-28 10:19:00) [2]


> TCP Monitor например?


Например, да.


DDDeN   (2007-03-28 10:12:00) [3]


> Любым подходящим сниффером.

TCP Monitor например?

Посмотрите исходник, может я что-то все таки делаю неверно...
http://cda.rikt.ru/files/cast.rar


Сергей М.   (2007-03-28 09:55:00) [4]


> что такое ПИО?


Протокол Информационного Обмена


> чем можно эти потоки посмотреть?


Любым подходящим сниффером.


DDDeN   (2007-03-28 08:19:00) [5]

А что такое ПИО? И чем можно эти потоки посмотреть? Сервер есть, источник есть, даже клиенты есть! :)


Сергей М.   (2007-03-28 08:16:00) [6]


> DDDeN   (27.03.07 18:13) [29]


Предлагаю на время отложить слепые эксперименты и изучить ПИО "вживую", исследуя содержимое инф.потоков между любым заведомо работоспособным source-клиентом и IceCast2-сервером.


DDDeN   (2007-03-27 18:13:00) [7]

Вообщем, методом научного тыка, проведя кучу времени, я выяснил:
1. Надо передавать не #13#10, а два перевода каретки (CR) #13#13, либо (LF) #10#10(вопрос: хотя может это только работает на запрос GET?).
2. Выяснил, что на сервере маленький тайм-аут (15 секунд), поэтому он меня и дисконектил (так как ничего не передавалось от клиента серверу).
3. Получил заголовок HTTP (путем передачи GET / HTTP/1.0). Сервер передает строки (страница статистики по потокам) и разрывает связь.

Теперь куча, куча, куча вопросов...
1. При передаче пароля на маунт, сервер дисконенктися, причем не выдает ничего.
2. После того, как я выполняю запрос на заголовок страницы, сервер мне выдает его и отключается. Нормальное это явление или нет?

Пока вроде все)))


DDDeN   (2007-03-26 06:54:00) [8]

Вообщем, тема закрыта. Необходимо разбираться с сокетами и сервером...
Всем спасибо!


DDDeN   (2007-03-25 07:29:00) [9]

А вообще сам подход, который я делаю, правильный?


Сергей М.   (2007-03-22 15:13:00) [10]


> DDDeN   (21.03.07 09:17) [25]


Есть подозрения на "кривизну" того IceCast-сервера, с которым ты пытаешься "договориться".


DDDeN   (2007-03-21 09:17:00) [11]

Сама библиотека позволяет только принимать поток:

Internet file streaming
Stream data from HTTP and FTP servers(inc. Shoutcast, Icecast & Icecast2), with proxy server support and adjustable buffering

а вот примочка к ней - BASSenc 2.3 (.0.3)

An extension that allows BASS channels to be encoded using any command-line encoder with STDIN support (LAME/OGGENC/etc), or any ACM codec. Also includes Shoutcast and Icecast sourcingfeatures, and PCM/WAV file writing. C/C++, Delphi and Visual Basic APIs are included.


DDDeN   (2007-03-21 09:10:00) [12]

Посмотрел еще внимательней. Поставил Address вместо Host.

ClientSocket.Address := '192.168.210.10';
ClientSocket.Port := 8000;


Затем открываю методом Open:

ClientSocket.Open;

На событие ClientSocketConnect пишу обработчик:

Socket.SendText('secretpassword' + #13#10);

На событие ClientSocketRead пишу обработчик такой:

Memo.Lines.Add(Socket.ReceiveText);

Все равно авторизация не проходит. Соединение разрывается примерно через 10-15 секунд. Помойму пароль не передается на сервер. Хотя я пробовал различные варианты - и без передачи начала строки и возврата каретки.


Сергей М.   (2007-03-21 08:11:00) [13]


> дело не в том, что плохо и невнимательно описание формата
> прочитал


Как раз в этом и дело)

Icecast-протокол базируется на http, в котором строки заголовка должны завершаться последовательностью символов CR+LF.

Цитата:

1. Источник создает соединение с портом сервера (служебным)

2. Затем источник посылает пароль: password \r\n

3. Если пароль правильный, сервер посылает в ответ
   OK2 \r\n
   icy-caps:11 \r\n\r\n


\r\nкака раз и есть CR+LF (в С-синтаксисе)

Возражения по поводу "внимательности" имеются ?)


> она позволяет получить поток с этого сервера, но не передать
> его на сервер


И вновь ты невнимателен)

Цитата в [21] для чего приведена ?
Выделенное жирным слово "sourcing" разве ни о чем не говорит ?
Это же не я сам придумал, это заявление самих авторов BASS'а)


DDDeN   (2007-03-20 17:30:00) [14]

Думаю, дело не в том, что плохо и невнимательно описание формата прочитал, а в том, что практически нет знаний и опыта по работе с сокетами...


> Не мучайся)

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

Все равно буду разбиратся...


Сергей М.   (2007-03-20 13:48:00) [15]

Не мучайся)

Сходи сюда: http://www.un4seen.com/

download - Win32

An extension that allows BASS channels to be encoded using any command-line encoder with STDIN support (LAME/OGGENC/etc), or any ACM codec. Also includes Shoutcast and Icecast sourcingfeatures, and PCM/WAV file writing. C/C++, Delphi and Visual Basic APIs are included.


Сергей М.   (2007-03-20 13:20:00) [16]


> думаю дело в той самой точке монтирования


До монтирования еще и дело не дошло - ты даже еще не прошел аутентификацию пользователя служебного входа на сервер)


> не может же сервер проверять пароли всех точек монтирования?
>  а если там 100 точек монтирования?


"Может", "не может" - что ты гадаешь на кофейной гуще ?)
Читай внимательно описание протокола, читай справку по конфигурированию сервера - тогда все станет понятно)


> пробовал писать передачу пароля на ClientSocketWrite эффекта
> ноль


Потому что ты невнимательно читаешь описание протокола)


> играет ли роль свойство ClientType для данного подключения?


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


DDDeN   (2007-03-20 13:00:00) [17]

я думаю дело в той самой точке монтирования...
1). не может же сервер проверять пароли всех точек монтирования? а если там 100 точек монтирования?

2). как проверить это событие? я пробовал писать передачу пароля на ClientSocketWrite эффекта ноль.

3). играет ли роль свойство ClientType для данного подключения?


Сергей М.   (2007-03-20 12:45:00) [18]

Передавать данные следует НЕ ранее возникновения события OnWrite !


DDDeN   (2007-03-20 12:39:00) [19]

подключается только на 10 секунд.

сделал на одну кнопку код подключения. когда он пишет что подключен, я жму кнопку которая передает пароль: ClientSocket.Socket.SendText('secretpassword');

а от сервера не получаю ничего.

соответственно, он постоит 10 секунд и отключается.


Сергей М.   (2007-03-20 12:32:00) [20]

Подключился ?
Замечательно.
Теперь отправляй/принимай данные в соответствии с IceCast-протоколом.

Отправка методами SendText, SendBuf, SendStream
Прием, соответственно, ReceiveText, ReceiveBuf


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо