123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- # -*- 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()
|