seerozha (seerozha) wrote,
seerozha
seerozha

Массовая запись людьми трансляции с камер на выборах

Хорошая - реально,хорошая ! - работа с технической точки зрения.

И абсолютно бессмысленная с точки зрения "обеспечения честности выборов" - но это уже совершенно другой вопрос.

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


8 сентября, единый день голосования. В этом году широкой общественности предлагается наблюдать через интернет за выборами столичного мэра. Ряд граждан считают для себя интересным записать картинку с камер: у кого-то политически мотивированный интерес, а большинству просто банально любопытно посмотреть на себя и знакомых глазами Интернета. Данная статья призвана продемонстировать принципы работы текущей системы и предложить работающие концепты.


Со времен прошлых выборов система немножечко изменилась (иначе и статьи бы не было), поэтому сначала вспомним, как всё работало раньше и как стало работать сейчас. Итак, у каждой камеры есть уникальный uid и пул серверов, с которых сыпется видео. Сформировав с использованием этих данных особый запрос, можно получить ссылку на кусочек видео, записанного выбранной камерой.

Для начала найдем данные обо всех существующих камерах. Мне показался наиболее простым следующий способ: начнем поиск по номеру участка, с 1 до 3800. Для этого отправим GET vybory.mos.ru/json/id_search/aaa/bbb.json, где bbb это uid, а aaa это len(bbb). Например, vybory.mos.ru/json/id_search/1/3.json

Получим json с информацией об этом участке, что-то вроде вот этого:
[{"id":7933,"name":"Участок избирательной комиссии №3","num":"3","location_id":1162,"address":"Новый Арбат, 36/9","raw_address":"г.Москва, Новый Арбат ул., дом 36/9","is_standalone":false,"size":null,"location":{"id":1162,"address":"Россия, Москва, улица Новый Арбат, 36/9","raw_address":"г.Москва, Новый Арбат ул., дом 36/9","district_id":1,"area_id":null,"sub_area_id":null,"locality_id":1,"street_id":1590,"lat":55.753266,"lon":37.577301,"max_zoom":17}}]





Особый интерес здесь представляет id. Отправим GET вида vybory.mos.ru/account/channels?station_id=id, в данном случае vybory.mos.ru/account/channels?station_id=7933

В ответе получим строчку с кракозяблами, на которые ругается мой редактор, но содержащие внутри хеши камер и адреса серверов. Выдерем оттуда хеши регуляркой вида
\$([0-9a-h]{8}-[0-9a-h]{4}-[0-9a-h]{4}-[0-9a-h]{4}-[0-9a-h]{12}) и ip адреса регуляркой вида .*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

В результате получим требуемую информацию о камерах текущего участка:
2e9dd8dc-edd4-11e2-9a6b-f0def1c0f84c 188.254.112.2 188.254.112.3 188.254.112.4
2ea32990-edd4-11e2-9a6b-f0def1c0f84c 188.254.112.2 188.254.112.3 188.254.112.4

Далее начинаются ньюансы. Существует три типа камер: старые, новые и отсутствующие. Чем они отличаются я расскажу чуть позже, сначала разберемся, как их различать, а различать их очень просто — нужно отправить GET вида http://SERVER/master.m3u8?cid=UID
Новая камера вернет нечто вроде




#EXTM3U
#EXT-X-VERSION:2
#EXT-X-STREAM-INF:PROGRAM-ID=777,BANDWIDTH=3145728
/variant.m3u8?cid=e1164950-0c19-11e3-803b-00163ebf8df9&var=orig





Старая камера вернет что-то такого вида:



#EXTM3U
#EXT-X-MEDIA-SEQUENCE:136
#EXT-X-TARGETDURATION:15
#EXT-X-ALLOW-CACHE:NO
#EXT-X-PROGRAM-DATE-TIME:2013-09-04T12:05:40Z
#EXTINF:15,
/segment.ts

Tags: ИТ, выборы
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments