dektec_manager.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # -*- coding: UTF-8 -*-
  2. import sys
  3. import os
  4. from os import path, access, R_OK
  5. import subprocess
  6. from subprocess import CalledProcessError
  7. import delegator
  8. import time
  9. from ssat_sdk import sat_environment
  10. from ssat_sdk.utils import string_util
  11. __version__ = '0.0.1'
  12. __author__ = 'Red Leaf'
  13. class DektecManager():
  14. DtPlay_exe = sys.prefix + r"/Tools/DtPlay/DtPlay.exe"
  15. child = None
  16. cmdline = ""
  17. def __init__(self):
  18. self.deviceType = self.getTypeNO()
  19. print "DektecManager() : " + sys.prefix, self.deviceType
  20. print "DektecManager() : " + DektecManager.DtPlay_exe
  21. if path.exists(DektecManager.DtPlay_exe) and path.isfile(DektecManager.DtPlay_exe) and access(
  22. DektecManager.DtPlay_exe, R_OK):
  23. print "DtPlay_exe : exists and is readable"
  24. else:
  25. print "DtPlay_exe : file is missing or is not readable, please check if " \
  26. "Python27\Tools\DtPlay\DtPlay.exe is exists"
  27. # 强制结束所有DtPlay.exe
  28. self.taskkill()
  29. print "DtPlay_exe start!!!"
  30. def getTypeNO(self):
  31. type = sat_environment.getDTVSelected()
  32. if type.__contains__("2115"):
  33. return "2115"
  34. elif type.__contains__("115"):
  35. return "115"
  36. elif type.__contains__("215"):
  37. return "215"
  38. else:
  39. return "215"
  40. def playStream(self, streamFile, times, type, channelPoint):
  41. self.interrupt()
  42. DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + streamFile + " -l " + str(times) +
  43. " -mt " + type + " -mf " + channelPoint)
  44. DektecManager.child.wait()
  45. def playStreamAtThread(self, streamFile, times, type, channelPoint ):
  46. self.interrupt()
  47. DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + streamFile + " -l " + str(times) +
  48. " -mt " + type + " -mf " + channelPoint)
  49. def isPlaying(self):
  50. if DektecManager.child is not None and DektecManager.child.poll() is None:
  51. return True
  52. else:
  53. return False
  54. def interrupt(self):
  55. if DektecManager.child is not None and DektecManager.child.poll() is None:
  56. DektecManager.child.kill()
  57. def taskkill(self):
  58. # 强制结束任务管理器所有 DtPlay.exe 进程
  59. try:
  60. command = 'taskkill /F /IM DtPlay.exe'
  61. os.system(command)
  62. except Exception,e:
  63. print u"没有杀死DtPlay进程:", e
  64. def set_cmd_clear(self):
  65. DektecManager.cmdline = ""
  66. def set_playfile(self, playfile):
  67. # 码流文件
  68. DektecManager.cmdline = str(playfile) + " " + DektecManager.cmdline
  69. def set_Device_type(self, type=''):
  70. # 设备选择
  71. if type.__len__() > 0:
  72. DektecManager.cmdline = DektecManager.cmdline + " -t " + str(type)
  73. else:
  74. DektecManager.cmdline = DektecManager.cmdline + " -t " + str(self.deviceType)
  75. def set_Modulation_carrier_frequency(self, frequency):
  76. # 频点
  77. DektecManager.cmdline = DektecManager.cmdline + " -mf " + str(frequency)
  78. def set_Modulation_type(self, Modulation_type):
  79. # 制式选择
  80. DektecManager.cmdline = DektecManager.cmdline + " -mt " + str(Modulation_type)
  81. def set_Modulation_bandwidth(self, Modulation_bandwidth):
  82. # 带宽
  83. DektecManager.cmdline = DektecManager.cmdline + " -mB " + str(Modulation_bandwidth)
  84. def set_Modulation_transmission_mode(self, transmission_mode):
  85. # 载波数
  86. DektecManager.cmdline = DektecManager.cmdline + " -mT " + str(transmission_mode)
  87. def set_Modulation_constellation (self, constellation ):
  88. # 调制方式
  89. DektecManager.cmdline = DektecManager.cmdline + " -mC " + str(constellation )
  90. def set_Modulation_guard_interval(self, guard_interval):
  91. # 保护间隔
  92. DektecManager.cmdline = DektecManager.cmdline + " -mG " + str(guard_interval)
  93. def set_Modulation_Convolutional_rate(self, Convolutional_rate):
  94. # 信号纠错码
  95. DektecManager.cmdline = DektecManager.cmdline + " -mc " + str(Convolutional_rate)
  96. def set_Modulation_Output_level(self, Output_level):
  97. # 信号强度
  98. DektecManager.cmdline = DektecManager.cmdline + " -ml " + str(Output_level)
  99. def set_loop_times(self, loop_times):
  100. # 播放次数
  101. DektecManager.cmdline = DektecManager.cmdline + " -l " + str(loop_times)
  102. def set_rate(self, rate):
  103. # 输出码率
  104. DektecManager.cmdline = DektecManager.cmdline + " -r " + str(rate)
  105. def play_out(self):
  106. self.DtPlay_exe_CMD(DektecManager.cmdline)
  107. def play_out_wait(self):
  108. self.DtPlay_exe_CMD_wait(DektecManager.cmdline)
  109. def DtPlay_exe_CMD(self, str):
  110. self.interrupt()
  111. DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + str, stdout=subprocess.PIPE)
  112. print DektecManager.child.stdout.read()
  113. def DtPlay_exe_CMD_wait(self, str):
  114. self.interrupt()
  115. DektecManager.child = subprocess.Popen(DektecManager.DtPlay_exe + " " + str)
  116. DektecManager.child.wait()
  117. def help(self):
  118. output = subprocess.check_output(DektecManager.DtPlay_exe + " " + "-?")
  119. print "\n*******DtPlay_exe CMD help**********" + output
  120. def __del__(self):
  121. self.__class__.cmdline = ""
  122. # if self.__class__.child is not None and self.__class__.child.poll() is None:
  123. # self.__class__.child.kill()
  124. # print "DtPlay_exe exit!!!"
  125. print "StreamCard_SCBC() exit!!!"
  126. #for debug
  127. # for i in range(0, 100):
  128. # print "testing..."
  129. # time.sleep(1)
  130. # ------------------------------------------------------------------------------
  131. if __name__ == "__main__":
  132. scscbc = DektecManager()
  133. scscbc.help()
  134. streamFile = r"D:\test\482_1218_105425.ts"
  135. times = 1
  136. type = "DTMB"
  137. channelPoint = "52.5MHz"
  138. # scscbc.playStream( streamFile, times, type, channelPoint)
  139. # scscbc.help()
  140. # scscbc.DtPlay_exe_CMD( streamFile + " -mt DTMB -mf 52.5MHz")
  141. # 按照 SteamXpress 界面的设置
  142. scscbc.set_playfile(streamFile)
  143. scscbc.set_Device_type("")
  144. scscbc.set_Modulation_carrier_frequency("578MHz")
  145. scscbc.set_Modulation_type("DVBT")
  146. # scscbc.set_Modulation_bandwidth("8")
  147. # scscbc.set_Modulation_transmission_mode("8k")
  148. # # scscbc.set_Modulation_constellation("QAM64")
  149. # scscbc.set_Modulation_constellation("QPSK")
  150. # scscbc.set_Modulation_guard_interval("1/32")
  151. # scscbc.set_Modulation_Convolutional_rate("7/8")
  152. # scscbc.set_Modulation_Output_level("-90dBm")#单位可以不写,前面的负号"-"一定要写
  153. # scscbc.set_loop_times("0")
  154. # scscbc.set_rate("18661765")
  155. print scscbc.cmdline
  156. # 频繁操作注意延迟3秒,画面才播放出来。
  157. scscbc.play_out()