print t\r
pathname=os.path.join(tpatht,t['chtxt'])\r
print pathname\r
- tv2ts.tv2ts(pathname+".ts",t['ch'],t['csch'], stime)\r
+ tv2ts.tv2ts(pathname+".ts",t['ch'],t['csch'], stime,t['tsid'])\r
tv2mp4.ts2mp4(pathname+".ts", pathname+".mp4", option)\r
time.sleep(2)\r
if __name__ == "__main__":\r
#!/usr/bin/python\r
# coding: UTF-8\r
# Rec10 TS Recording Tools\r
-# Copyright (C) 2009-2011 Yukikaze\r
+# Copyright (C) 2009-2012 Yukikaze\r
import os.path\r
import configreader\r
import xml.dom.minidom\r
\r
path = str(os.path.dirname(os.path.abspath(__file__))) + "/"\r
\r
-def chAdd(bctype, chtxt, ch, csch):#すべて文字列\r
+def chAdd(bctype, chtxt, ch, csch,tsid="0"):#すべて文字列\r
tnow=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")\r
- rec10d.rec10db.add_epg_ch(bctype,chtxt, ch, csch, u"2010-01-01 00:00:00",u"2010-01-01 00:00:00",tnow)\r
+ rec10d.rec10db.add_epg_ch(bctype,chtxt, ch, csch,tsid, u"2010-01-01 00:00:00",u"2010-01-01 00:00:00",tnow)\r
def addCHlist(cl):\r
if len(cl)>0:\r
for c in cl:\r
#!/usr/bin/python\r
# coding: UTF-8\r
# Rec10 TS Recording Tools\r
-# Copyright (C) 2009-2011 Yukikaze\r
+# Copyright (C) 2009-2012 Yukikaze\r
# モジュール属性 argv を取得するため\r
import rec10d\r
\r
chtxtt=chtxtin.replace("_0","_%")\r
ret = []\r
for datum in rec10d.rec10db.select_by_chtxt_epg_ch(chtxtt):\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4],'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
def searchCHFromBctype(bctypein):\r
ret = []\r
for datum in rec10d.rec10db.select_by_bctype_epg_ch(bctypein):\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4], 'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
def searchCHFromCh(chin):\r
ret = []\r
for datum in rec10d.rec10db.select_by_ch_epg_ch(chin):\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4], 'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
def searchCHFromCsch(cschin):\r
ret = []\r
for datum in rec10d.rec10db.select_by_csch_epg_ch(cschin):\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4], 'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
def searchAllCHFromCh(chin):\r
ret = []\r
for datum in rec10d.rec10db.select_by_ch_epg_ch(chin):\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4], 'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
def getAllCH():\r
ret = []\r
for datum in rec10d.rec10db.select_all_epg_ch():\r
- rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3], 'update':datum[4], 'chname':datum[5], 'visible':datum[7]}\r
+ rett = {'bctype':datum[0], 'chtxt':datum[1], 'ch':datum[2], 'csch':datum[3],'tsid':datum[4], 'update':datum[5], 'chname':datum[6], 'visible':datum[8]}\r
ret.append(rett)\r
if len(ret) == 0:\r
ret.append(None)\r
#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
-# Copyright (C) 2009-2011 Yukikaze
+# Copyright (C) 2009-2012 Yukikaze
import MySQLdb
import recdblist
import warnings
chtxt VARCHAR(20) PRIMARY KEY,\
ch VARCHAR(20),\
csch VARCHAR(20),\
+ tsid VARCHAR(20),\
chname VARCHAR(100),\
updatetime DATETIME,\
status TINYINT,\
recdblist.addCommonlogEX("Error", "new_epg_ch (dbMySQL.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
self.close_db(db)
- def add_epg_ch(self, bctype, chtxt, ch, csch, updatetime,logoupdate,scanupdate):
+ def add_epg_ch(self, bctype, chtxt, ch, csch,tsid,updatetime,logoupdate,scanupdate):
db = self.connect_db()
db[1].execute('\
- INSERT INTO epg_ch (bctype,chtxt,ch,csch,chname,updatetime,status,visible,logoupdate,scanupdate)\
- VALUES (%s,%s,%s,%s,"",%s,%s,%s,%s,%s)', \
- (bctype, chtxt, ch, csch, updatetime, "1","1",logoupdate,scanupdate))
+ INSERT INTO epg_ch (bctype,chtxt,ch,csch,tsid,chname,updatetime,status,visible,logoupdate,scanupdate)\
+ VALUES (%s,%s,%s,%s,%s,"",%s,%s,%s,%s,%s)', \
+ (bctype, chtxt, ch, csch,tsid,updatetime, "1","1",logoupdate,scanupdate))
self.close_db(db)
def delete_all_epg_ch(self):
db = self.connect_db()
def select_by_chtxt_epg_ch(self, chtxt):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,chtxt,ch,csch,updatetime,chname,status,visible,logoupdate,scanupdate \
+ SELECT bctype,chtxt,ch,csch,tsid,updatetime,chname,status,visible,logoupdate,scanupdate \
FROM epg_ch \
WHERE chtxt LIKE %s", \
(chtxt,))
self.close_db(db)
for dl in dls:
r = list(dl)
- r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
- if r[8]!=None:
- r[8] = r[8].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
+ if r[9]!=None:
+ r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
else:
- r[8]="2011-04-01 00:00:00"
- r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
+ r[9]="2012-04-01 00:00:00"
+ r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def select_by_bctype_epg_ch(self, bctype):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,chtxt,ch,csch,updatetime,status,chname,status,visible,logoupdate,scanupdate \
+ SELECT bctype,chtxt,ch,csch,tsid,updatetime,status,chname,status,visible,logoupdate,scanupdate \
FROM epg_ch \
WHERE bctype = %s", \
(bctype,))
for dl in dls:
#recdblist.printutf8(dl)
r = list(dl)
- r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
- if r[9]!=None:
- r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
+ if r[10]!=None:
+ r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
else:
- r[9]="2011-04-01 00:00:00"
- r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
- r[5] = str(r[5])
+ r[10]="2011-04-01 00:00:00"
+ r[11] = r[11].strftime("%Y-%m-%d %H:%M:%S")
+ r[6] = str(r[6])
ret.append(r)
import random
ret.insert(0,ret[random.randint(0,len(ret)-1)])
db = self.connect_db()
dbexe = db[1].execute("\
SELECT \
- bctype,chtxt,ch,csch,updatetime,chname,status,visible,logoupdate,scanupdate \
+ bctype,chtxt,ch,csch,tsid,updatetime,chname,status,visible,logoupdate,scanupdate \
FROM epg_ch \
WHERE ch = %s", \
(ch,))
self.close_db(db)
for dl in dls:
r = list(dl)
- r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
- r[8] = r[8].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
+ r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def select_by_csch_epg_ch(self, csch):
db = self.connect_db()
dbexe = db[1].execute("\
SELECT \
- bctype,chtxt,ch,csch,updatetime,chname,status,visible,logoupdate,scanupdate \
+ bctype,chtxt,ch,csch,tsid,updatetime,chname,status,visible,logoupdate,scanupdate \
FROM epg_ch \
WHERE csch = %s", \
(csch,))
self.close_db(db)
for dl in dls:
r = list(dl)
- r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
- r[8] = r[8].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
+ r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def select_all_epg_ch(self):
db = self.connect_db()
dbexe = db[1].execute("\
- SELECT bctype,chtxt,ch,csch,updatetime,chname,status,visible,logoupdate,scanupdate \
+ SELECT bctype,chtxt,ch,csch,tsid,updatetime,chname,status,visible,logoupdate,scanupdate \
FROM epg_ch \
")
ret = []
self.close_db(db)
for dl in dls:
r = list(dl)
- r[4] = r[4].strftime("%Y-%m-%d %H:%M:%S")
- r[8] = r[8].strftime("%Y-%m-%d %H:%M:%S")
+ r[5] = r[5].strftime("%Y-%m-%d %H:%M:%S")
r[9] = r[9].strftime("%Y-%m-%d %H:%M:%S")
+ r[10] = r[10].strftime("%Y-%m-%d %H:%M:%S")
ret.append(r)
return ret
def change_visible_epg_ch(self,chtxt,visible):
self.change_installed_in_status(1)
self.change_version_in_status("101")
#self.change_installed_in_status()#チャンネルスキャンをさせる
-
+ def update_db_101to102(sekf):
+ self.drop_in_settings()
+ self.new_in_settings()
+ self.new_epg_ch()
+ db = self.connect_db()
+ try:
+ db[1].execute("\
+ ALTER TABLE epg_ch ADD tsid VARCHAR(20)\
+ ")
+ except:
+ ""
+ self.close_db(db)
+ self.change_installed_in_status(1)
+ self.change_version_in_status("102")
+ #self.change_installed_in_status()#チャンネルスキャンをさせる
+
###########################################
# Rec10 -Ts Recording system- #
# Ver.0.9.10 #
-# 2012/04/21 Yukikaze & long.inus #
+# 2012/05/12 Yukikaze & long.inus #
# Copyright (C) 2009-2012 Yukikaze #
###########################################
b25(not included)
#recpt1(recfriioでもいいはずです)(not included)
MySQLdb
-##DVB環境では
-tune(included)が追加で必要
-
-事前準備:
-DVB版に対応したため、直下の対策は必要有りません。
-
-#ネットの情報を参考にpt1ドライバーを無効化する
-#pt1などのドライバーをインストールした上(chardev版)で、recpt1などのソフトを導入、
-#b25をインストールしておいてください。
-#*注意
-#11年10月01日からのBS新チャンネル対応のためには、10/02現在ではrecpt1にパッチを当てる必要があります。
-rec10同梱版のepgdumpはts解析によってチャンネルデータを得るように改変してあるので
-変更は不要です。
+tunerec(included)が追加で必要
1:install.shを実行
2:表示にしたがって設定の変更(チャンネルなど)
3:make
4:su
5:make install
+5'rec10を実行するユーザーをvideoグループに加える(DVB版を使う場合)
6:rec10を実行するユーザーで/usr/local/share/rec10を実行
7:cronに書き加える
8:rectool.plをインストール(Makefile.PLの実行 rectool.plの配置)
lavf有効x264でのエラーに対応
DVB版のドライバに対応
PMT処理のバグを修正(jTsSplitter)
+DVB版のBS放送のtsid変更に対応
11/02/02 0.9.9
BonTsDemuxを最新版へ(nogui化によりXvfbが不要)
for i2 in xrange(0,11):
chi=u"BS"+str(2*i2+1)
recdblist.printutf8ex(u"チャンネルスキャン:BSデジタル CH "+chi, 200, 200)
- if checkTs(chi)>0:
- addCh(str(chi),u"bs","BS")
+ for ts_offset in xrange(0,3):
+ for ts_idx in xrange(0,7):
+ t_tsid=16384+chi*16+ts_offset*512+ts_idx
+ recdblist.printutf8ex(u"TransportID "+str(t_tsid), 200, 200)
+ if checkTs(chi,str(t_tsid))>0:
+ addCh(str(chi),u"bs","BS",str(t_tsid))
time.sleep(1)
#スカパーe2!
#http://www5e.biglobe.ne.jp/~kazu_f/digital-sat/trapon-nsat110.html
recdblist.printutf8ex(u"チャンネルスキャン:CSSデジタル CH:CS24", 200, 200)
addCh("CS24","cs2","CS")
rec10d.rec10db.change_installed_in_status(100)
-def checkTs(ch):
+def checkTs(ch,tsid="0"):
if os.path.exists(os.path.join(tmppath,"ch_"+str(ch)+".ts")):
os.remove(os.path.join(tmppath,"ch_"+str(ch)+".ts"))
if os.path.exists(os.path.join(tmppath,"ch_"+str(ch)+".ts.b25")):
os.remove(os.path.join(tmppath,"ch_"+str(ch)+".ts.b25"))
- tv2ts.tv2b25ts(os.path.join(tmppath,"ch_"+str(ch)+".ts"), ch, "1")
+ tv2ts.tv2b25ts(os.path.join(tmppath,"ch_"+str(ch)+".ts"), ch, "1",tsid)
if os.path.exists(os.path.join(tmppath,"ch_"+str(ch)+".ts.b25")):
os.remove(os.path.join(tmppath,"ch_"+str(ch)+".ts.b25"))
if os.path.exists(os.path.join(tmppath,"ch_"+str(ch)+".ts")):
else:
return 0
-def addCh(ch,bctype,chtxthead):
+def addCh(ch,bctype,chtxthead,tsid="0"):
prglist=getChProgNum(ch)##[prglist,logt]
for lstr in prglist[0]:
#print [bctype,chtxthead+"_"+lstr, ch, lstr]
if ch.find("bs")>-1:
if int(lstr)<300:
tnow=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- rec10d.rec10db.add_epg_ch(bctype,chtxthead+"_"+lstr, ch, lstr, u"2010-01-01 00:00:00", u"2010-01-01 00:00:00",tnow)
+ rec10d.rec10db.add_epg_ch(bctype,chtxthead+"_"+lstr, ch, lstr,tsid, u"2010-01-01 00:00:00", u"2010-01-01 00:00:00",tnow)
else:
tnow=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- rec10d.rec10db.add_epg_ch(bctype,chtxthead+"_"+lstr, ch, lstr, u"2010-01-01 00:00:00", u"2010-01-01 00:00:00",tnow)
+ rec10d.rec10db.add_epg_ch(bctype,chtxthead+"_"+lstr, ch, lstr,tsid, u"2010-01-01 00:00:00", u"2010-01-01 00:00:00",tnow)
except Exception, inst:
recdblist.addCommonlogEX("Warning", "addCh (scan_ch.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
checkB25Purchased(ch, prglist[1])
-def getChProgNum(ch):
+def getChProgNum(ch,tsid="0"):
pout=os.path.join(tmppath,"ch_"+str(ch)+".ts")
- logt=tv2ts.tv2tsmix(pout, ch, "10")
+ if tsid != "0":
+ pout=os.path.join(tmppath,"ch_"+str(ch)+"_"+tsid+".ts")
+ logt=tv2ts.tv2tsmix(pout, ch, "10",tsid)
retl=getTsProgNum(ch,pout)
try:
os.remove(pout)
#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
-# Copyright (C) 2009-2011 Yukikaze
+# Copyright (C) 2009-2012 Yukikaze
import datetime
import os
import os.path
if (dt < 58 * 60 and dt > 30 * 60):
bctypet = chdb.searchCHFromChtxt(chtxt)['bctype']
chdatat = rec10d.rec10db.select_by_bctype_epg_ch(bctypet)
- dt1 = bt - datetime.datetime.strptime(chdatat[0][4], "%Y-%m-%d %H:%M:%S")
+ dt1 = bt - datetime.datetime.strptime(chdatat[0][5], "%Y-%m-%d %H:%M:%S")
dt1 = dt1.days * 24 * 60 * 60 + dt1.seconds
if dt1 < 60 * 60:
recdata = epgdb.searchTime(title, btime, "5", chtxt)
else:
recdblist.printutf8(u"追いかけ機能エラー:番組データが見付かりません。")
else:
- if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][5] != "0":
+ if rec10d.rec10db.select_by_bctype_epg_ch(bctypet)[0][6] != "0":
rec10d.rec10db.update_status_by_bctype_epg_ch(bctypet, "3")
sys.exit()
elif (dt <= 30 * 60 and dt > 20 * 60):
if os.access(pout + ".ts", os.F_OK):\r
os.remove(pout + ".ts")\r
time.sleep(10)\r
- tv2ts.tv2b25ts(pout+ ".ts", ch, times)\r
+ tv2ts.tv2b25ts(pout+ ".ts", ch, times,"0")\r
logoopt=""\r
if islogo==1:\r
logoopt="/LOGO "\r
dt = et-tnow\r
rectime = dt.seconds-5\r
rectime = str(rectime)\r
- tv2ts.tv2b25ts(tsout + ".ts.b25", chdb.searchCHFromChtxt(chtxt)['ch'], rectime)\r
+ tv2ts.tv2b25ts(tsout + ".ts.b25", chdb.searchCHFromChtxt(chtxt)['ch'], rectime,chdb.searchCHFromChtxt(chtxt)['tsid'])\r
def b252ts(pout, chtxt, btime, etime, opt):\r
"""\r
poutはタイトル(自動的にtitle.b25 title.tsと名前がつきます。)\r
#!/usr/bin/python
# coding: UTF-8
# Rec10 TS Recording Tools
-# Copyright (C) 2009-2011 Yukikaze
+# Copyright (C) 2009-2012 Yukikaze
#import sys # モジュール属性 argv を取得するため
import commands
import os
import recdblist
import recording_earth_pt1
mypath = str(os.path.dirname(os.path.abspath(__file__))) + "/"
-def tv2tsmix(pout, ch, time,getlog=0):
- tv2b25ts(pout + ".b25", ch, time)
+def tv2tsmix(pout, ch, time,tsid="0",getlog=0):
+ tv2b25ts(pout + ".b25", ch, time,tsid)
txt=b252tsmix(pout + ".b25", pout)
return txt
#if os.access(pout, os.F_OK):
# os.remove(pout + ".b25")
# except:
# ""
-def tv2ts(pout, ch, csch, time):
+def tv2ts(pout, ch, csch, time,tsid):
if ch.replace(" ","").replace("CS","").isdigit():
if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
status.changeBSCSRecording(1)
else:
status.changeTERecording(1)
try:
- tv2b25ts(pout + ".b25", ch, time)
+ tv2b25ts(pout + ".b25", ch, time,tsid)
except Exception, inst:
recdblist.addCommonlogEX(u"Error",u"tv2ts(tv2ts.py)", str(type(inst)),str(inst)+traceback.format_exc(),log_level=200)
if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
else:
tch="0"
tsmix2ts(pout + ".tsmix", pout, tch)
-def tv2b25ts(pout, ch, time):
+def tv2b25ts(pout, ch, time,tsid):
if recording_earth_pt1.useDVB()==0:
exe = configreader.getConfPath('recpt1')
if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上
else:
status.changeTERecording(1)
try:
- recording_earth_pt1.record(ch,"0",pout,time,0)
+ recording_earth_pt1.record(ch,tsid,pout,time,0)
except Exception, inst:
recdblist.addCommonlogEX(u"Error",u"tv2b25ts(tv2ts.py)", str(type(inst)),str(inst))
if len(ch) > 2:#BS/CSは100とかCS??とかなので3文字以上