ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

прослушивание потока только с одного сайта

 

37
Алексей @anester
Здравствуйте!

Подскажите может кто-то сталкивался с такой задачей. Необходимо сделать так чтобы поток могли слушать только с плеера на сайте.

Вариант ежедневной смены ссылки моунта и в плеере не совсем подходит. Мысли идут делать какой то зашифрованный поток, но понимаю что нужны будут ресурсы по расшифровке потока на клиенте, а браузер мне кажется загнется расшифровывать поток.

Также вижу, что провайдеры это тоже как то решают - делая платное телевидение в своих сетях, но там надо инсталлировать их приложение, а мне нужен именно плеер на сайте.

Может кто решал подобную задачу или есть свежие мысли.

445
Alex @VapSite
подсмотри как сделано на сайте live365.com

тут как вариант для лохов, можно ссылку прописать в JS файл.
Использовать искл. IceCast

Вариант, ссылка находиться в флеш-плеере. Как это сделано на сайте Рекорд'а
Декомпилятором и этот вопрос легко решаем.

Отредактировано VapSite - 07.10.2013
37
Алексей @anester
VapSite пишет:

подсмотри как сделано на сайте live365.com

тут как вариант для лохов, можно ссылку прописать в JS файл.
Использовать искл. IceCast

Вариант, ссылка находиться в флеш-плеере. Как это сделано на сайте Рекорд'а
Декомпилятором и этот вопрос легко решаем.



Можно сделать так. Пока остановились на этом варианте

1. Рандомно каждую ночь генерим ссылку моунта
2. Вставляем ее в плеер и в конфиг айскаста
3. Перегружаем айскаст (в kh можно перечитывать конфиг)

Может у кого то есть более красивая версия?

888
Falcon @Falcon
anester пишет:

VapSite пишет:

подсмотри как сделано на сайте live365.com

тут как вариант для лохов, можно ссылку прописать в JS файл.
Использовать искл. IceCast

Вариант, ссылка находиться в флеш-плеере. Как это сделано на сайте Рекорд'а
Декомпилятором и этот вопрос легко решаем.



Можно сделать так. Пока остановились на этом варианте

1. Рандомно каждую ночь генерим ссылку моунта
2. Вставляем ее в плеер и в конфиг айскаста
3. Перегружаем айскаст (в kh можно перечитывать конфиг)

Может у кого то есть более красивая версия?

**********

Почитайте сделать про авторизацию слушателей через URL.
Особое внимание к <option name="listener_add" value="http://myauthserver.com/listener_joined.php"/>
Проверяем header (заголовки), если это не браузер, то сбрасываем, если браузер, то выставляем нужный заголовок
icecast-auth-user: 1
И айскаст пустит слушателя к потоку.

382
Grigorij @gyurgin_1
В icecast KH есть такая фича <deny-agents>/path/to/file-with-useragents</deny-agents>, можно попробовать. Понятно что список будет собрать не просто, но нереального тут ничего нет.

382
Grigorij @gyurgin_1
Хотя да, погорячился я слегка, вытащил из базы массив возможных юзерагентов, пожалуй многовато будет ********** Если только нельзя их указать как нибудь в сокращенном виде. Надо пробовать.

Отредактировано gyurgin_1 - 30.12.2013
382
Grigorij @gyurgin_1
В общем Falcon прав - авторизация решает, только проверяем useragent. Добавляем к маунту секцию:
<authentication type="url">
<option name="listener_add" value='http://Ваш домен или где будет лежать скрипт (главное - здесь должен быть url)/listener_add.php'/>
<option name="auth_header" value="icecast-auth-user: 1"/>
<option name="presume_innocent" value="yes"/>
<option name="handlers" value="50"/>
</authentication>

ну и сам listener_add.php примерно такой:
<?php
$ag = $_POST['agent'];
if ((strpos($ag, 'Mozilla') !== false) || (strpos($ag, 'Opera') !== false) || (strpos($ag, 'Internet%20') !== false)) {
header("icecast-auth-user: 1");
}
else {
header("icecast-auth-user: 0");
}
?>


Проверено - работает.

Отредактировано gyurgin_1 - 30.12.2013
37
Алексей @anester
Вернусь к этому вопросу.
Задача, ограничить подключения к айскасту только теми пользователями которые слушают эфир с плеера на сайте example.ru, остальные идут лесом.

Есть такая конструкция в icecast

<mount>
<mount-name>/name.mp3</mount-name>
<authentication type="url">
<option name="listener_add" value='http://example.ru/auth/listener_add.php'/>
<option name="auth_header" value="icecast-auth-user: 1"/>
<option name="presume_innocent" value="yes"/>
<option name="handlers" value="50"/>
</authentication>
</mount>


сам скрипт php имеет вид


<?php
$www = $_SERVER['HTTP_HOST'];
$hostname = 'example';
$auth = strripos($www, $hostname);
if ($auth === false) {
"icecast-auth-user: 0";
} else {
"icecast-auth-user: 1";
}
?>



Но что то ему не хватает. Может кто то подскажет в чем дело?

73
Freak @Freak
anester пишет:

Может кто то подскажет в чем дело?


А того и не хватает.
Код неверный. Двойка за работу на уроке :-)

<?php
$www = $_SERVER['HTTP_HOST'];
$hostname = 'www.example.ru';
if (strpos($www, $hostname) == false) {
"icecast-auth-user: 0";
} else {
"icecast-auth-user: 1";
}
?>


И, к слову, функция в данном случае применяется strpos, а у тебя, двоечник, strripos.
Без обид на слово "двоечник". Ошибка меня позабавила просто.
Код не проверял, но уверен, сработать должен.

Отредактировано Freak - 13.10.2014
888
Falcon @Falcon

if (strpos($www, $hostname) === false) {

Должно быть именно 3 равно, т.к. есть строка начинается с нулевой позиции, то код не сработает. Должно быть тождественное равенство

73
Freak @Freak
Falcon пишет:


if (strpos($www, $hostname) === false) {

Должно быть именно 3 равно, т.к. есть строка начинается с нулевой позиции, то код не сработает. Должно быть тождественное равенство

Имеет смысл... Как то не подумал. Хотя, в конкретном случае отладка покажет.

382
Grigorij @gyurgin_1
Отклонились немного не в ту сторону, к скрипту обращается icecast и вся эта ерунда с $_SERVER ни к чему не приведет.
Вот правильный скрипт: <?php
$req_url = parse_url($_POST['referer'], PHP_URL_HOST);
$player_host = 'example.com';
if (strpos($req_url, $player_host) !== false) {
header("icecast-auth-user: 1");
} else {
header("icecast-auth-user: 0");
}
?>

Соответственно $_POST['referer'] содержит полный путь к компоненту плеера (swf или js) и тут можно что нибудь придумать, например распространять код для вставки плеера своего радио на сайты и запрещать проигрывание другим, ну и тому подобное...