Форум: "Media";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
ВнизПередать аудио-поток на 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 вся ветка
Форум: "Media";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.039 c