Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1201444871
Черный Шаман
2008-01-27 17:41
2008.03.02
Delphi типы исключений.


2-1202412475
Artem
2008-02-07 22:27
2008.03.02
LoadLibrary, как высвободить?


15-1201363081
Константинов
2008-01-26 18:58
2008.03.02
Помогите с аской 5.1 человек ждет,


2-1202463717
гость
2008-02-08 12:41
2008.03.02
обработчик кнопки в чужом приложении


15-1201376098
Kerk
2008-01-26 22:34
2008.03.02
Алгоритм Витерби





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский