選挙でのカメラからの一括録画

ご注意 Habr-政治用ではありません。 コメントで議論することは控えてください。

すべての投票所にウェブカメラが装備されたロシアでの最初の選挙を見越して、多くの人が自分でカメラからビデオを録画したいという要望を表明しました。 このため、FRAPSによる記録からffmpegの使用など、さまざまなソリューションが提供されました。 私の意見では、最も成功したのは、 ここに投稿されたQwertovskyユーティリティでした。

この小さなトピックでは、明日の議会選挙はvybory2012.gov.uaで誰でも見ることができる兄弟のウクライナで行われるため、私のソリューションを提案し、システム全体がどのように機能するかを簡単に思い出したいと思います。





だからあなたが知っておくべきこと:

カメラごとに、最新のプレイリストが15秒ごとに生成されます。これには、最後の4つのビデオへの直接リンクが含まれ、各ピースの長さは15秒です。 したがって、1分に1回プレイリストが完全に更新され、しばらくの間チャンクが引き続き使用可能になります。

プレイリストは複数のサーバーで複製され、http:// server /variant.m3u8?cid= uid &var = origという形式のリンクを介して利用できます。次のようになります。

#EXTM3U #EXT-X-MEDIA-SEQUENCE:6885 #EXT-X-TARGETDURATION:15 #EXT-X-ALLOW-CACHE:NO #EXT-X-PROGRAM-DATE-TIME:2012-10-27T11:02:08Z #EXTINF:13, /segment.ts?cid=f0ffd596-aaa6-4601-9432-70d717dd666a&var=orig&ts=1351335728.24-1351335741.20 #EXTINF:11, /segment.ts?cid=f0ffd596-aaa6-4601-9432-70d717dd666a&var=orig&ts=1351335741.20-1351335752.28 #EXTINF:11, /segment.ts?cid=f0ffd596-aaa6-4601-9432-70d717dd666a&var=orig&ts=1351335752.28-1351335763.40 #EXTINF:14, /segment.ts?cid=f0ffd596-aaa6-4601-9432-70d717dd666a&var=orig&ts=1351335763.40-1351335776.92 #EXTINF:11, /segment.ts?cid=f0ffd596-aaa6-4601-9432-70d717dd666a&var=orig&ts=1351335776.92-1351335788.36
      
      





/segment.ts?cid= f0ffd596-aaa6-4601-9432-70d717dd666a &var = orig&ts = 1351335728.24-1351335741.20という形式のリンクは、この場合、カメラf0ffd596-aaa6-4601-9432-70d717dd666aからのビデオと135.13351,335の間隔を示しています。複雑なUnix時間形式。

定期的に、1分間に1回、プレイリストを解析し、利用可能なすべてのピースをダウンロードすると、結果としてカメラから最大の情報が得られます。 たとえば、次のようなもの:

 # -*- coding: utf-8 -*- # vybory2012 (Proof of concept), yegorov-p import urllib import os from time import strftime, localtime, sleep import socket import threading #  syslog,     syslog_server='127.0.0.1' syslog_port=514 # ,     directory='dumps' #  id ,     ,     cams=[ ['563-1', "f0ffd596-aaa6-4601-9432-70d717dd666a",["82.207.0.3","82.207.0.3","82.207.0.3"]] ] #    LEVEL = { 'emerg': 0, 'alert':1, 'crit': 2, 'err': 3, 'warning': 4, 'notice': 5, 'info': 6, 'debug': 7 } #,   .  ,  =( def syslog(message, level=LEVEL['notice'], host=syslog_server, port=syslog_port): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) data = '<%d>%s' % (level + 24, message) sock.sendto(data, (host, port)) sock.close() #  def cam_rip(num,hash,servers): syslog('Recording cam %s at %s'%(hash, num), level=LEVEL['info']) try: os.mkdir('./%s/%s'%(directory,num)) except: pass #   while 1: try: server=servers[0] #   page = urllib.urlopen("http://%s/variant.m3u8?cid=%s&var=orig"%(server,hash)).read() #  ,         if '/segment' in page: for i in page.split('\n'): if '/segment' in i: filename=strftime("%d-%b-%H-%M-%S", localtime(int(i[-13:-3]))) f=open('./%s/%s/%s.ts'%(directory,num,filename),'wb') #syslog('Chunk %s saved'%(filename), level=LEVEL['notice']) f.write(urllib.urlopen("http://%s%s"%(server,i)).read()) f.close() else: #          syslog('No signal!Rotating server on cam %s at %s'%(hash,num), level=LEVEL['err']) servers.append(servers[0]) del servers[0] sleep(60) except Exception,e: syslog('Error on cam %s: %s'%(hash,e), level=LEVEL['err']) servers.append(servers[0]) del servers[0] try: os.mkdir(directory) except: pass #       for i in cams: threading.Thread(target=cam_rip, kwargs={"num": i[0],"hash": i[1],"servers": i[2]}).start() sleep(1) syslog('System started.', level=LEVEL['notice'])
      
      







このスクリプトを実行して、チャンクを保存するフォルダーと、オプションで、現在のすべての情報が注がれるsyslogサーバーのアドレスを指定します。

ただし、1つのポイントを無視しました-プレイリストのソースデータ、つまりサーバーとカメラIDを取得する場所 小さな余談をする価値があります。 このシステムは、特にロシアでの選挙でうまく使用され、前述のpythonスクリプトの助けを借りて、私の都市のすべてのカメラを記録することができました。 ただし、それ以降、エンジンにいくつかの変更が加えられています。 以前は、ログインしなくても必要なすべてのデータを取得できました。 まず、カメラをお気に入りに追加する必要があります。その後、カメラハッシュとサーバーIPアドレスを含むファイルが/ account / channelsで利用可能になりますか?Station_id = cid (cidはカメラID)。 午後2時ごろ、完全なハッシュデータベースを収集して公開することにしましたが、サーバーはメインロードの前でも定期的に502エラーをスローし、プロセスを複雑にします=)32,183セクションのうち、ハッシュは約5,000から少しずつ利用可能ですこの数字は増加しています。 現在のデータ

原則として、現在のデータは、目的のカメラを開き 、Firebugまたはその同等物でCorePlayer.instances.core_player_1.source.originを実行することで取得できますが、これを取得できるのは現在のサーバーのみです(ロシアの選挙の経験から判断すると、それは落ちます)。



現時点では、カメラにプラグが表示されており、ウクライナの同僚はロシアの経験を考慮に入れており、学校、図書館、ホステルの日常生活を表示しないことを決めたようです。

UPD 7:50 MSK: 99%のカメラで収集されたデータ。 カメラからの画像がなくなって、スクリプトが正常に完了しました。



All Articles