ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘VLC’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Поставили как-то раз передомной задачу — установить в локальной сети медиа сервер, на условии, что он будет принимать радио со спутника и вещать его в локальную сеть.

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

Хотел сначала поднять на FreeBSD, но узнав, что драйвер для фрихи не существует в природе (который бы работал не только с интернет, но и с мультимедией) — пришлось искать альтернативные решения.

И так железо:

  • DVB-карты TechniSat SkyStar2 rev. 2.8a — 2 штуки
  • TechnoTrend S-1401

ПО сервера:

  • Linux Ubuntu — Server 9.04
  • linux-source
  • linux-headers
  • linux-image
  • libncurses5
  • make
  • dvb-apps
  • разрабатываемые драйвера и программу getstream с сайта linuxtv.org

ПО-клиента:

  • ОС *nix/windows/MacOS
  • проигрыватель vlc или любой другой поддерживающий воспроизведение TS-потока

Я расскажу как настроить 3 dvb-карты на прием каналов с 3х спутников и вещать эти каналы в локальную сеть. Описание будет очень подробным.
Теперь по порядку.

1. Устанавливаем Ubuntu 9.04 (я взял в серверной версии т.к. все равно ничего кроме радио на нем работать не будет, да и работать за ним я не особо собираюсь).

Процесс установки я описывать не буду. По окончании установки устанавливаем программы:

  • linux-source
  • linux-headers
  • linux-image
  • libncurses5
  • make

это основные пакеты, без которых драйвера не установятся.

2. Скачиваем разрабатываемые драйвера с linuxtv.org, распаковываем, далее выполняем:

  • make all
  • make install

процесс долгий, т.к. будут пересобираться все драйвера, для всех карт. По окончании установки драйверов необходимо перезагрузиться.

3. Перезагрузившись проверяем встали ли сами драйвера. Выполняем:

ls /dev/dvb

Если появился список устройств то все хорошо. Если нет, то подкружаем модули ядра.

#depmod -a
затем
#modprobe <имя-модуля>

в нашем случае:

#modprobe b2c2
#modprobe SkyStar2

4. Теперь устанавливаем пакеты dvb-apps и getstream:

sudo apt install get dvb-apps getstream

5. Далее выполним 2 команды, что позволит нам дать доступ к /dev/dvb:

$sudo gpasswd -a audio
$sudo gpasswd -a video

Это если вы не хотите чтобы у вас радио запускалось от рута, а если вас не пугает нарушение идеологии Убунту, то можно и не выполнять это.

6. Создаем файл конфигурации (в любом удобном вам месте) для scan (приложение входит в состав dvb-apps), в котором указываем частоту, поляризацию, символьную скорость и FEC:

S 11671000 H 18200000 5/6

S — является произвольной буквой. Устанавливать её обязательно.

7. Запускаем скрипт с целью проверки параметров настройки:

$ scan -a 0 90

Если все правильно прописано, то должен появиться список программ/сервисов, находящихся на транспондере.

scanning 90
using ‘/dev/dvb/adapter0/frontend0’ and ‘/dev/dvb/adapter0/demux0’
initial transponder 11671000 H 18200000 5
>>> tune to: 11671:h:0:18200
DVB-S IF freq is 1921000
Network Name ‘RuSat Satellite Network’
0x0000 0x0834: pmt_pid 0x0000 SNT — Silver Rain (running)
0x0000 0x0835: pmt_pid 0x0000 SNT — Nashe radio (running)
0x0000 0x0837: pmt_pid 0x0000 SNT — Radio Teos (running)
0x0000 0x0b54: pmt_pid 0x0000 Scopus — SevenSkies (running)
dumping lists (4 services)
Silver Rain:11671:h:0:18200:0:2102:2100
Nashe radio:11671:h:0:18200:0:2104:2101
Radio Teos:11671:h:0:18200:0:2108:2103
SevenSkies:11671:h:0:18200:0:2902:2900
Done.

8. Теперь приступаем к настройке getstream. Данная программа может вещать как по tсp , так и по udp.
Я настраивал для http (8080/tcp). Средняя загруженность канала для одного принимающего ~270 кбит/с.

Настройка довольно гибкая тем, что имея 2 и более dvb-карт их все можно описать в одном файле конфигурации.

Если есть каналы, которые вы не хотели бы вещать по тем или иным причинам, то можно не указывать pid (Packet ID — идентификационный номер пакета на спутнике, пакетом является набор программ находящихся на одной частоте, символьной скорости, поляризации и FEC одновременно) канала в файле конфигурации.

Вот общий шаблон файла конфигурации для getstream:

указываем порт, на который будет происходить вещание:

http{
         port ****;
};

перечисляем настройки карты на спутник и прием:

adapter N {

};

перечисляем параметры потока, который будет вещаться в сеть, описываем входные данные и исходящий адрес url.

stream {

};

На этом собственно все.

Пример конфига на прием каналов с одного транспондера:

http{
       port 8080;
};

adapter 0 {
       packet-buffer 50;
       stat-interval 120;

       dvb-s {
          lnb {
              lof1  9750000; #Нижний предел
              lof2 10600000; #Верхний предел
              slof 11700000; #Частота переключения
          };
          transponder { 			#описываем транспондер
                 frequency 11671000;	#Частота приема
                 polarisation v;	    	#поляризация
                 symbol-rate 18200000; 	#символьная скорость
          };
       };
       #начало описания потока
       stream {
                name "Serebryany Dozhd";	#имя потока

                     #входные данные потока
                     input {
                         pnr 2100;		#pid пакета на спутнике
                     };

                     #выходные данные для потока
                     output-http {
                             url /serebryany_dozhd;		#URL адрес, на который будет вещаение
                     };
       };

       #ниже идет описание оставшихся 3х каналов, вещаемых с этого транспондера.
       stream {
             name "Nashe Radio";
             input {
                     pnr 2101;
             };
             output-http {
                     url /nashe_radio;
             };
       };

       stream {
             name "Radio Teos";
             input {
                   pnr 2103;
             };
             output-http {
                   url /radio_teos;
              };
        };

        stream {
             name "Seven Skies";
             input {
                 pnr 2900;
             };
              output-http {
                  url /seven_skies;
              };
        };
};

Вот конфиг на прием с 2х транспондеров:

http{
      port 8080;
};

adapter 2 {
         packet-buffer 50;
         stat-interval 120;

         dvb-s {
            lnb {
                   lof1  9750000;
                   lof2 10600000;
                   slof 11700000;
            };
            transponder {
                   frequency 11050000;
                   polarisation v;
                   symbol-rate 3300000;
            };
         };

         stream {
             name "BuisnesFM";
             input {
                 pnr 1;
             };
             output-http {
                 url /buisnesfm;
             };
         };

         stream {
             name "HumorFM";
             input {
                 pnr 2;
             };
              output-http {
                  url /humorfm;
              };
         };

         stream {
             name "Pomestnoe radio";
             input {
                 pnr 3;
             };
             output-http {
                 url /pomestnoe;
             };
         };

         stream {
             name "KinoFM";
             input {
                 pnr 4;
             };
             output-http {
                 url /kinofm;
             };
         };

          stream {
               name "Record";
               input {
                   pnr 5;
               };
               output-http {
                   url /record;
               };
          };

           stream {
                name "Miliceyskaya volna";
                input {
                    pnr 6;
                };
                output-http {
                     url /miliceyskaya_volna;
                };
           };
           ##и т.д. по остальным каналам
};

adapter 0 {
         packet-buffer 50;
         stat-interval 120;

         dvb-s {
              lnb {
                      lof1  9750000;
                      lof2 10600000;
                      slof 11700000;
              };
              transponder {
                   frequency 11671000;
                   polarisation v;
                   symbol-rate 18200000;
              };
         };

         stream {
              name "Serebryany Dozhd";
              input {
                  pnr 2100;
              };
              output-http {
                   url /serebryany_dozhd;
              };
         };

         stream {
             name "Nashe Radio";
             input {
                 pnr 2101;
             };
             output-http {
                 url /nashe_radio;
             };
         };

         stream {
             name "Radio Teos";
             input {
                 pnr 2103;
             };
             output-http {
                 url /radio_teos;
             };
         };

         stream {
             name "Seven Skies";
             input {
                pnr 2900;
             };
             output-http {
                 url /seven_skies;
             };
         };
};

Для 3х транспондеров, думаю, не составит труда описать.

9. Далее запускаем getstream. Используем команду:

$getstream -c /path/to/file -d

Ключ -d обозначает режим отладки и следовательно будет выводить всю информацию, и даже тех, кто подключился к серверу и на какую станцию.

Пример:

$ getstream -c getstr -d

 2009-06-17 09:09:42.167 fe: Adapter 2 Setting up frontend tuner
2009-06-17 09:09:42.182 fe: DVB-S tone = 1
2009-06-17 09:09:42.182 fe: DVB-S voltage = 0
2009-06-17 09:09:42.182 fe: DVB-S diseqc = 0
2009-06-17 09:09:42.182 fe: DVB-S freq = 11050000
2009-06-17 09:09:42.182 fe: DVB-S lof1 = 9750000
2009-06-17 09:09:42.182 fe: DVB-S lof2 = 10600000
2009-06-17 09:09:42.182 fe: DVB-S slof = 11700000
2009-06-17 09:09:42.182 fe: DVB-S feparams.frequency = 1300000
2009-06-17 09:09:42.182 fe: DVB-S feparams.inversion = 2
2009-06-17 09:09:42.182 fe: DVB-S feparams.u.qpsk.symbol_rate = 3300000
2009-06-17 09:09:42.183 dmx: Setting filter for pid 8192 pestype 20
2009-06-17 09:09:42.191 fe: Adapter 0 Setting up frontend tuner
2009-06-17 09:09:42.205 fe: DVB-S tone = 1
2009-06-17 09:09:42.205 fe: DVB-S voltage = 0
2009-06-17 09:09:42.205 fe: DVB-S diseqc = 0
2009-06-17 09:09:42.205 fe: DVB-S freq = 11671000
2009-06-17 09:09:42.205 fe: DVB-S lof1 = 9750000
2009-06-17 09:09:42.205 fe: DVB-S lof2 = 10600000
2009-06-17 09:09:42.206 fe: DVB-S slof = 11700000
2009-06-17 09:09:42.206 fe: DVB-S feparams.frequency = 1921000
2009-06-17 09:09:42.206 fe: DVB-S feparams.inversion = 2
2009-06-17 09:09:42.206 fe: DVB-S feparams.u.qpsk.symbol_rate = 18200000
2009-06-17 09:09:42.206 dmx: Setting filter for pid 8192 pestype 20
2009-06-17 09:09:42.255 fe: Adapter 2 Status: 0x01 (HAS_SIGNAL)
2009-06-17 09:09:42.255 fe: Adapter 0 Status: 0x01 (HAS_SIGNAL)
2009-06-17 09:09:42.322 fe: Adapter 2 Status: 0x1f (HAS_SIGNAL HAS_CARRIER HAS_VITERBI

HAS_SYNC HAS_LOCK)
2009-06-17 09:09:42.352 fe: Adapter 0 Status: 0x1f (HAS_SIGNAL HAS_CARRIER HAS_VITERBI

HAS_SYNC HAS_LOCK)
2009-06-17 09:10:04.864 stream_http: connection from 10.10.10.99 for /buisnesfm
2009-06-17 09:11:42.183 dvr: inputstats: 44 pids 2722 pkt/s 511919 byte/s
2009-06-17 09:11:42.209 dvr: inputstats: 41 pids 14461 pkt/s 2718743 byte/s
2009-06-17 09:11:58.691 stream_http: connection from 192.168.1.36 for /buisnesfm
2009-06-17 09:12:04.192 stream_http: dropping connection to 192.168.1.36 for /buisnesfm
2009-06-17 09:12:04.253 stream_http: connection from 192.168.1.36 for /miliceyskaya_volna
...

На этом настройка getstream закончена.

10. Теперь создадим плейлист формата m3u, для удобства приема пользователями вещаемых каналов.

Приведу просто его листинг:

#EXTM3U
#EXTINF:-131,Business FM
http://10.10.254.254:8080/buisnesfm
#EXTINF:-131,Humor FM
http://10.10.254.254:8080/humorfm
#EXTINF:-131,Pomestnoe
http://10.10.254.254:8080/pomestnoe
#EXTINF:-131,Kino FM
http://10.10.254.254:8080/kinofm
#EXTINF:-131,Record
http://10.10.254.254:8080/record
#EXTINF:-131,Miliceyskaya volna
http://10.10.254.254:8080/miliceyskaya_volna
#EXTINF:-131,City FM
http://10.10.254.254:8080/cityfm
#EXTINF:-131,NRJ
http://10.10.254.254:8080/radio_nrj
#EXTINF:-131,Relax FM
http://10.10.254.254:8080/relaxfm
#EXTINF:-131,Radio Alla
http://10.10.254.254:8080/radio_alla
#EXTINF:-131,Metro FM
http://10.10.254.254:8080/metro_fm
#EXTINF:-131,Avtoradio
http://10.10.254.254:8080/avtoradio
#EXTINF:-131,Dorozhnoe
http://10.10.254.254:8080/dorozhnoe_radio
#EXTINF:-131,Radio Vanya
http://10.10.254.254:8080/Radio_Vanya
#EXTINF:-131,Radio Record
http://10.10.254.254:8080/radio_record
#EXTINF:-131,Piter RS
http://10.10.254.254:8080/piterfm
#EXTINF:-131,Shanson
http://10.10.254.254:8080/chanson
#EXTINF:-131,Gardarika
http://10.10.254.254:8080/gardarikafm
#EXTINF:-131,Serebryany dozhd
http://10.10.254.254:8080/serebryany_dozhd
#EXTINF:-131,Nashe radio
http://10.10.254.254:8080/nashe_radio
#EXTINF:-131,Radio Teos
http://10.10.254.254:8080/radio_teos
#EXTINF:-131,Seven Skies
http://10.10.254.254:8080/seven_skies

Теперь для прослушивания радио, клиенту надо запустить vlc и добавить в него плейлист.
В моем случае загрузка канал при вещание на одного клиента составляет около 270 кбит/с.

Теперь я опишу всяческие модернизации данного конфига.
Их может быть огромное множество. Я опишу только 2.

1. Чтобы руками не отделять каждый канал от общего пакета, полученного со спутника, можно пустить в вещание и весь пакет.
Как это сделать? Нужно просто отредактировать параметр потоков до такого вида:

stream {
            name "Full";
            input {
                full;
            };
            output-http {
                url /radio; #ссылка может быть любой
            };
};

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

2. Вещание по UDP. Опять же нужно просто указать адрес на который будет вещание.

stream {
            name "Full";
            input {
               full;
            };
             output-udp {
                   remote-address 10.10.10.99;
                   remote-port 1234;
             sap {
                   scope global;
                   ttl 5;
                   playgroup "Free";
             };
};

Как видно нет ничего сложного.

Заключение

Программа getstream довольно гибкая в настройке и поддерживает работу как с DVB-S, так и с DVB-C и DVB-T.

Файлы примеров настроек присутствеют в папке/usr/share/doc/getstream/examples .

Также getstream поддерживает вещание видео в локальную сеть, достаточно просто указать video-pid.

Ссылки

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Andrey
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 5,00 из 5)
Loading...Loading...
Отправить на почту Отправить на почту

Запуск вещания VoD (Video on Demand) — Видео по запросу

Для примера возьмем сервер с unicast IP-адресом 172.16.10.14, вещаем с порта 5554

Консоль сервера:
===========

1. vlc --ttl 12 --color -I telnet --telnet-password 123 --rtsp-host 172.16.10.14:5554

2. telnet localhost 4212

3.
> new Test vod enabled
> setup Test input /path/to/file.avi

На клиенте:
=======

запускаем vlc проигрыватель
нажимаем «Файл» ->«Открыть URL»
в строке MRL пишем: rtsp://172.16.10.14:5554/Test
жмем «ОК» — смотрим фильм «по запросу»


Multicast вещание нескольких видео файлов на multicast IP-адреса 239.255.1.1 и 239.255.1.2

Вещаем по RTP, консоль сервера:
===========

1. vlc --ttl 12 --color -I telnet --telnet-password 123

2. telnet localhost 4212

3.
> new channel1 broadcast enabled
> setup channel1 input /path/to/file_1.avi
> setup channel1 output #rtp{mux=ts,dst=239.255.1.1,sap,name="Channel1"}
> new channel2 broadcast enabled
> setup channel2 input /path/to/file_2.avi
> setup channel2 output #rtp{mux=ts,dst=239.255.1.2,sap,name="Channel2"}
> control channel1 play
> control channel2 play

Вещаем по UDP, консоль сервера:
===========

1. vlc --ttl 12 --color -I telnet --telnet-password 123

2. telnet localhost 4212

3.
> new channel1 broadcast enabled
> setup channel1 input /path/to/file_1.avi
> setup channel1 output #standard{access=udp{ttl=12},mux=ts{tsid=22,pid-video=23,pid-audio=24,pid-pmt=25,use-key-frames},dst=239.255.1.1,sap,name="Channel1"}
> control channel1 play
По второму каналу точно так же, не буду повторяться.

Если мы хотим зациклить проигрывание файлов до бесконечности «по кругу» то добавим:
> setup channel1 loop
> setup channel2 loop

На клиенте:
========

запускаем vlc проигрыватель
нажимаем «Инструменты» -> «Настройки», там, в нижнем левом углу жмем в «Показывать настройки» на «Все», затем раскрываем «Вывод потока», а там ищем «Модули вывода», в поле «Интерфейс вывода IPv4 multicast» пишем IP-адрес, который прописан на вашей сетевой карте ( смотрящей в сторону сервера вещающего поток), жмем «Сохранить»

Для просмотра потока по RTP:

После того как выполнили настройки: «Файл» ->«Открыть URL»
в строке MRL пишем:
udp://@239.255.1.1:5004 (что бы посмотреть видео из файла file_1.avi)
или
udp://@239.255.1.2:5004 (что бы посмотреть видео из файла file_2.avi соответственно)

Для просмотра потока по UDP:
в строке MRL пишем:
udp://@239.255.1.1 (что бы посмотреть видео из файла file_1.avi)

З.Ы.

Так же запустить вещание в один поток по UDP можно так:

vlc -vvv /path/to/file.avi —sout ‘#standard{access=udp{ttl=15},mux=ts{tsid=22,pid-video=23,pid-audio=24,pid-pmt=25,use-key-frames},dst=239.255.1.1}’ —random —loop —volume 100


VLC Unicast to HTTP

Вещаем поток в HTTP страницу, просмотр возможен как и на HTTP странице, так и отдельно с помощью плеера Windows Media Player.

Консоль сервера:
===========

vlc -vvv /path/to/file.avi --sout '#transcode{vcodec=DIV3,vb=256,scale=1,acodec=mp3,ab=32,channels=2}:std{access=mmsh,mux=asfh,dst=:8080}'

На клиенте:
========

код страницы для отображения вещания + ссылка на запуск WMP:

<html>
<title>TEST</title>
<body>
<div id='content'>
<table align='left' style='border:none'>
<tr><td  style = 'width:320px;border:none'>
<div style = 'width:320px;'>
<OBJECT ID="mediaPlayer" width="320" height="309"
                CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"
                CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715"
                STANDBY="Loading Microsoft Windows Media Player components..."
                TYPE="application/x-oleobject">
<PARAM NAME="url" VALUE="mms://10.10.16.71:8080">
<PARAM NAME="autoStart" VALUE="1">
<PARAM NAME="bgColor" VALUE="#000000">
<PARAM NAME="showControls" VALUE="true">
<PARAM NAME="TransparentatStart" VALUE="false">
<PARAM NAME="AnimationatStart" VALUE="true">
<PARAM NAME="StretchToFit" VALUE="true">
<EMBED src="mms://10.10.16.71:8080"
                        type="application/x-mplayer2"
                        name="MediaPlayer"
                        autostart="1" showcontrols="1" showstatusbar="1" autorewind="1"
                        width="320" height="309"></EMBED>
</OBJECT>
</div>
</td><td valign=top style='padding-left:30px;border:none;text-align:left'>
<a class='text' href='mms://10.10.16.71:8080'>Открыть в МедиаПлеер</a>
</td></tr>
</table>
</div>
</div>
</body>
</html>

10.10.16.71 — IP-адрес сервера, с которого вещается поток
8080 — порт куда вещается поток

Заливаем эту страницу на свой WWW сервер, заходим на нее http://адрес_WWW_сервера/mms_test.html и смотрим вышаемый поток.


VLC Multicast to Unicast

Принимаем поток по multicast, а отдаем по unicast

Консоль сервера:
===========

vlc --ttl 12 udp://@224.0.42.49:5000 --sout '#std{access=udp,mux=ts,dst=192.168.1.15:1234}'

224.0.42.49:5000 — адрес потока откуда берем multicast
192.168.1.15 — адрес клиента куда отправляем unicast

Будьте внимательны с указанием портов для потоков.

Если на сервере несколько сетевых карт и соответственно IP-адресов, то указать через какую карту брать поток можно прописав маршрут (роутинг) через IP-адрес сервера на нужной вам сет. карте, например на сервере одна из сет. карт это em0 с IP-адресом 192.168.1.1:

route add 224.0.42.49/32 192.168.1.1

Добавив маршрут сервер будет пытаться получить multicast поток через em0, что можно видеть с помощью tcpdump:

tcpdump -ni em0

09:24:34.475683 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316
09:24:34.478554 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316
09:24:34.481677 IP XX.XX.100.182.32857 > 224.0.42.49.5000: UDP, length 1316

Отправка unicast потока клиенту (192.168.1.15) будет выглядеть примерно так:

09:26:11.374433 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316
09:26:11.376441 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316
09:26:11.378381 IP 192.168.1.1.61320 > 192.168.1.15.1234: UDP, length 1316

На клиенте:
=======

запускаем vlc проигрыватель
нажимаем «Файл» ->«Открыть URL»
в строке MRL пишем: udp://@192.168.1.15
жмем «ОК» — смотрим unicast поток отправляемый сервером

Сжимаем выходной поток:

vlc --ttl 12 -vvv udp://@224.0.42.49:5000 --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=200,ab=128,deinterlace}:rtp{mux=ts,dst=192.168.1.15}'

«vb=» — Эта опция позволяет установить bitrate видио потока в kbit/s
«ab» — TЭта опция позволяет установить bitrate аудио потока в kbit/s


VLC и несколько сетевых интерфейсов
Вопрос:

У меня в компьютере несколько сетевых интерфейсов, как указать VLC чтобы multicast шел через нужный мне, например 192.168.1.15 ?

Ответ:
Это можно сделать указав IP-адрес нужного вам сетевого интерфейса в настройках VLC.

vlc_ifaces

vlc_ifaces

Теперь IGMP запросы будут уходить с сетевого интерфейса с IP-адресом 192.168.1.15

Если вещание производится из консоли сервера (например сервер с OS FreeBSD) и в нем несколько сетевых интерфейсов, то указать через какой интерфейс пускать поток multicast (udp) можно прописав статический маршрут, например:

224.0.42.49 — адрес потока который собираемся вещать
192.168.1.15 — IP-адрес на одной из сетевых карт сервера

route add 224.0.42.49/32 192.168.1.15

Теперь поток multicast (udp) будет уходить с сетевого интрфейса с IP-адресом 192.168.1.15

Ссылки:

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 3,25 из 5)
Loading...Loading...
Отправить на почту Отправить на почту