# -*- coding: UTF-8 -*- import sys import os from os import path, access, R_OK import subprocess from subprocess import CalledProcessError import delegator import time from ssat_sdk import sat_environment from ssat_sdk.utils import string_util __version__ = '0.0.1' __author__ = 'Red Leaf' class DektecManager(): DtPlay_exe = sys.prefix + r"/Tools/DtPlay/DtPlay.exe" child = None cmdline = "" def __init__(self): self.deviceType = self.getTypeNO() print "DektecManager() : " + sys.prefix, self.deviceType print "DektecManager() : " + DektecManager.DtPlay_exe if path.exists(DektecManager.DtPlay_exe) and path.isfile(DektecManager.DtPlay_exe) and access( DektecManager.DtPlay_exe, R_OK): print "DtPlay_exe : exists and is readable" else: print "DtPlay_exe : file is missing or is not readable, please check if " \ "Python27\Tools\DtPlay\DtPlay.exe is exists" # 强制结束所有DtPlay.exe self.taskkill() print "DtPlay_exe start!!!" def getTypeNO(self): type = sat_environment.getDTVSelected() if type.__contains__("2115"): return "2115" elif type.__contains__("115"): return "115" elif type.__contains__("215"): return "215" else: return "215" def playStream(self, streamFile, times, type, channelPoint): self.interrupt() DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + streamFile + " -l " + str(times) + " -mt " + type + " -mf " + channelPoint) DektecManager.child.wait() def playStreamAtThread(self, streamFile, times, type, channelPoint ): self.interrupt() DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + streamFile + " -l " + str(times) + " -mt " + type + " -mf " + channelPoint) def isPlaying(self): if DektecManager.child is not None and DektecManager.child.poll() is None: return True else: return False def interrupt(self): if DektecManager.child is not None and DektecManager.child.poll() is None: DektecManager.child.kill() def taskkill(self): # 强制结束任务管理器所有 DtPlay.exe 进程 try: command = 'taskkill /F /IM DtPlay.exe' os.system(command) except Exception,e: print u"没有杀死DtPlay进程:", e def set_cmd_clear(self): DektecManager.cmdline = "" def set_playfile(self, playfile): # 码流文件 DektecManager.cmdline = str(playfile) + " " + DektecManager.cmdline def set_Device_type(self, type=''): # 设备选择 if type.__len__() > 0: DektecManager.cmdline = DektecManager.cmdline + " -t " + str(type) else: DektecManager.cmdline = DektecManager.cmdline + " -t " + str(self.deviceType) def set_Modulation_carrier_frequency(self, frequency): # 频点 DektecManager.cmdline = DektecManager.cmdline + " -mf " + str(frequency) def set_Modulation_type(self, Modulation_type): # 制式选择 DektecManager.cmdline = DektecManager.cmdline + " -mt " + str(Modulation_type) def set_Modulation_bandwidth(self, Modulation_bandwidth): # 带宽 DektecManager.cmdline = DektecManager.cmdline + " -mB " + str(Modulation_bandwidth) def set_Modulation_transmission_mode(self, transmission_mode): # 载波数 DektecManager.cmdline = DektecManager.cmdline + " -mT " + str(transmission_mode) def set_Modulation_constellation (self, constellation ): # 调制方式 DektecManager.cmdline = DektecManager.cmdline + " -mC " + str(constellation ) def set_Modulation_guard_interval(self, guard_interval): # 保护间隔 DektecManager.cmdline = DektecManager.cmdline + " -mG " + str(guard_interval) def set_Modulation_Convolutional_rate(self, Convolutional_rate): # 信号纠错码 DektecManager.cmdline = DektecManager.cmdline + " -mc " + str(Convolutional_rate) def set_Modulation_Output_level(self, Output_level): # 信号强度 DektecManager.cmdline = DektecManager.cmdline + " -ml " + str(Output_level) def set_loop_times(self, loop_times): # 播放次数 DektecManager.cmdline = DektecManager.cmdline + " -l " + str(loop_times) def set_rate(self, rate): # 输出码率 DektecManager.cmdline = DektecManager.cmdline + " -r " + str(rate) def play_out(self): self.DtPlay_exe_CMD(DektecManager.cmdline) def play_out_wait(self): self.DtPlay_exe_CMD_wait(DektecManager.cmdline) def DtPlay_exe_CMD(self, str): self.interrupt() DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + str, stdout=subprocess.PIPE) print DektecManager.child.stdout.read() def DtPlay_exe_CMD_wait(self, str): self.interrupt() DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + str) DektecManager.child.wait() def help(self): output = subprocess.check_output(DektecManager.DtPlay_exe + " " + "-?") print "\n*******DtPlay_exe CMD help**********" + output def __del__(self): self.__class__.cmdline = "" # if self.__class__.child is not None and self.__class__.child.poll() is None: # self.__class__.child.kill() # print "DtPlay_exe exit!!!" print "StreamCard_SCBC() exit!!!" #for debug # for i in range(0, 100): # print "testing..." # time.sleep(1) # ------------------------------------------------------------------------------ if __name__ == "__main__": scscbc = DektecManager() scscbc.help() streamFile = r"D:\test\482_1218_105425.ts" times = 1 type = "DTMB" channelPoint = "52.5MHz" # scscbc.playStream( streamFile, times, type, channelPoint) # scscbc.help() # scscbc.DtPlay_exe_CMD( streamFile + " -mt DTMB -mf 52.5MHz") # 按照 SteamXpress 界面的设置 scscbc.set_playfile(streamFile) scscbc.set_Device_type("") scscbc.set_Modulation_carrier_frequency("578MHz") scscbc.set_Modulation_type("DVBT") # scscbc.set_Modulation_bandwidth("8") # scscbc.set_Modulation_transmission_mode("8k") # # scscbc.set_Modulation_constellation("QAM64") # scscbc.set_Modulation_constellation("QPSK") # scscbc.set_Modulation_guard_interval("1/32") # scscbc.set_Modulation_Convolutional_rate("7/8") # scscbc.set_Modulation_Output_level("-90dBm")#单位可以不写,前面的负号"-"一定要写 # scscbc.set_loop_times("0") # scscbc.set_rate("18661765") print scscbc.cmdline # 频繁操作注意延迟3秒,画面才播放出来。 scscbc.play_out()