Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.02;
Скачать: CL | DM;

Вниз

Передать аудио-поток на IceCast   Найти похожие ветки 

 
DDDeN   (2007-03-20 04:40) [0]

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


 
Сергей М. ©   (2007-03-20 09:09) [1]


> Надо захватить стерео-поток со звуковухи


Надо ? Захватывай !
В чем проблема-то ?


 
DDDeN   (2007-03-20 09:47) [2]

Захватить-то не так уж и сложно. Сама загвоздка в том, чтобы отправить на серевр с IceCast.


 
Сергей М. ©   (2007-03-20 09:52) [3]


> загвоздка в том, чтобы отправить на серевр


И ?

Разве в Тырнете нет описания протокола ?

К примеру, здесь

http://www.opennet.ru/base/sys/radio_protocols.txt.html

?


 
DDDeN   (2007-03-20 10:21) [4]

Спасибо!

а может существуют готовые компоненты?


 
Сергей М. ©   (2007-03-20 10:25) [5]


> может существуют готовые компоненты?


Может и существуют)

Гугли) .. Ищущий да обрящет)


 
DDDeN   (2007-03-20 10:34) [6]

тогда вопрос: а чем передавать то на сам сервер? Сокетами?


 
Сергей М. ©   (2007-03-20 10:50) [7]

Конечно)... Чем же еще, спрашивается ?


 
DDDeN   (2007-03-20 11:07) [8]

Помогите дальше!
как организовать подключение к самому серверу IceCast?

данные сервера такие:
IP 192.168.210.10:8000
монтирование /radio-lan

ссылка будет значит такая 192.168.210.10:8000/radio-lan.m3u

как туда подключится сокетом ?


 
Сергей М. ©   (2007-03-20 11:41) [9]


> как туда подключится сокетом ?


Каким конкретно сокетом ?
Сокет сокету рознь)


 
DDDeN   (2007-03-20 11:48) [10]

У сервера IceCast хитро устроено. используются точки монтирования. не как в ShoutCast - там на отдельный порт можно подключится и передавать данные.

здесь же надо указывать хост (192.168.210.10), порт (8000) и точку монтирования (/radio-lan).

стандартными сокетами можно (ServerSocket и ClientSocket)?


 
Сергей М. ©   (2007-03-20 11:52) [11]


> стандартными сокетами можно (ServerSocket и ClientSocket)?


Можно.


 
DDDeN   (2007-03-20 11:55) [12]


> Можно.

а как прописать эту точку монтирования???


 
Сергей М. ©   (2007-03-20 11:57) [13]

Ну что значит как ? Смотри внимательно описание протокола)


 
DDDeN   (2007-03-20 12:18) [14]

подключаюсь к серверу:

ClientSocket.Host := "192.168.210.10";
ClientSocket.Port := 8000;
ClientSocket.Active := True;


 
DDDeN   (2007-03-20 12:29) [15]

затем надо передать пароль (если верить статье по приведенной вами ссылке):

ClientSocket.Socket.SendText("secretpassword");

проверяю на события подключения (ClientSocketConnect) и отключения (ClientSocketDisconnect). пишет что сначала подключается, а потом через несколько секунд пишет что отключен. в ответ не получаю от сервера ничего вообще (на событие ClientSocketRead):

Memo.Lines.Add(ClientSocket.Socket.ReceiveText);


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

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

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


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

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

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

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

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


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

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


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

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

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

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


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


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


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


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


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


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


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


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


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


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

Не мучайся)

Сходи сюда: 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 sourcing features, and PCM/WAV file writing. C/C++, Delphi and Visual Basic APIs are included.


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

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


> Не мучайся)

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

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


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


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


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

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-21 09:10) [24]

Посмотрел еще внимательней. Поставил 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 секунд. Помойму пароль не передается на сервер. Хотя я пробовал различные варианты - и без передачи начала строки и возврата каретки.


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

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

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 sourcing features, and PCM/WAV file writing. C/C++, Delphi and Visual Basic APIs are included.


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


> DDDeN   (21.03.07 09:17) [25]


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


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

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


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

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


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

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

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

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


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


> DDDeN   (27.03.07 18:13) [29]


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


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

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


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


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


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


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


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


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


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

TCP Monitor например?

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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.02 c
15-1201082732
Галинка
2008-01-23 13:05
2008.03.02
А как вы тестируете свои шедевры?


2-1202251624
Res
2008-02-06 01:47
2008.03.02
Оптимизация


2-1201674180
repus
2008-01-30 09:23
2008.03.02
Помогите с сохранением в файл


2-1202232422
NieL
2008-02-05 20:27
2008.03.02
Action (ShortCut)


2-1202396342
Res
2008-02-07 17:59
2008.03.02
Ошибка