![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передать аудио-поток на IceCast [D5, D6, D7, Win2k, WinXP]
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