Просмотр полной версии : Запись видео с веб-камеры на сервер (FMS) - Как ограничить максимальный размер?
andreyru
12.12.2007, 19:35
Есть видео-рекордер. Он берёт поток с веб-камеры и отправляет на сервер (FMS). Из клиента поток отправляется посредством:
out_ns.publish("my_recorded_stream", "record");
На серверной части ничего дополнительного не делается (я, собственно, и не знаю можно ли принимать и записывать входящий поток "вручную").
Проблема в следующем. Если некий "хакер" декомпилирует swf-ку моего рекордера и узнает все нужные URI, то он сможет начать непрерывную трансляцию туда видео и рано или поздно место на сервере закончится.
Есть идеи как можно защититься от этого?
grunerasta
12.12.2007, 22:32
Есть - вместе с видео слать что-то еще, например пи деленное на е и умноженное на текущую минуту, ни один хакер с декомпилером не догадается
----
Или даже не так - каждую минуту слать n-ый знак из числа пи, где n - номер текущей минуты, если послания нет, обрывать запись на сервере
andreyru
13.12.2007, 12:57
ни один хакер с декомпилером не догадается
Зачем ему догадываться если у него будет исходный код после декомпиляции? То есть он тупо берёт мой рекордер и убирает в нём ограничения, а потом делает своё грязное дело.
Хочется именно сделать адекватный ограничитель на стороне сервера.
Я придумал один вариант - с помощью админских скриптов - переодически проверять все входящие потоки во всех инстансах моего приложения и резать очень большие, но мне кажется должен существовать способ проще.
Собственно я даже переформулирую вопрос. Вот сейчас на серверной части можно ничего не делать и видео запишется. Оно пишется самим FMS когда с клиента вызвается publish(). Так вот вопрос в том можно ли этот процесс записи взять на себя? На стороне сервера есть класс Stream который вроде как умеет всё что мне нужно, только непонятно в какой момент и где этот поток можно перехватить?
Для этого надо подсовывать клиенту swf сгенерированную через php (для этого надо хорошо разбираться в hex-структуре SWF файла) в которой будет к примеру модифицироваться ключ сессии (который содержится в переменной). Php также отдаёт этот ключ и FMS серверу, который при connect ищет этот ключ в списке ключей. Найдя его он разрешает этой swf вещание и тут же удаляет этот ключ из списка. Ключ также удалется из списка например по истечении 10 секунд (времени максимальной загрузки swf у пользователя (он явно не будет использовать модем для вещания))
Такой способ позволяет даже при декомпиляции защититься от сторонних проникновений и гарантирует что swf'ка загружена с твоего сайта. Так как ключи выдаются только при запросах пользователя и имеют очень короткий срок действия "Хакер" не сможет подобрать его для своей Flash'ки
andreyru
13.12.2007, 17:50
На мой взгляд, всякие ключи/шифрования и прочее нужны когда есть необходимость передать данные представляющие некую ценность и есть опасность что их могут утащить.
В моём случае речь идёт об некоторых ограничениях. Ограничения должны соблюдатся в основном на серверной части (в клиенте их можно использовать для удобства - чтобы избежать лишних действий).
Так вот. Проблему я решил. Именно тем способом который пришёл в голову первым и показался не очень оптимальным. Но ничего другого в голову так и не пришло.
На серверная часть приложения при своём запуске делает следующее:
application.onAppStart = function()
{
// Соединяемся с админкой
application.nc = new NetConnection();
application.nc.connect("rtmp://localhost:1111/admin", "root", "pass");
// Запускаем каждую секунду функцию-проверялку
setInterval(checkStreams, 1000);
}
где checkStreams это функция которая проверяет все потоки относящиеся к текущему приложению (для этого требуется коннект к админке).
Вот. Принцип решения я описал. Если кому понадобится исходник этой checkStreams (), то обращайтесь. Ничего сложного там нет, но кода прилично, поэтому и не выкладываю - незачем засорять сообщение =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.