中国学术文献网络出版总库

刊名: 课程·教材·教法
       Curriculum, Teaching Material and Method
主办:  人民教育出版社 课程教材研究所
周期:  月刊
出版地:北京
语种:  中文
开本:  大16K
ISSN: 1000-0186
CN:   11-1278/G4

历史沿革:
1981年创刊期刊荣誉:
国家新闻出版总署收录 ASPT来源刊

中国期刊网来源刊

2011年度核心期刊,国家新闻出版总署收录 ASPT来源刊,中国期刊网来源刊,百种重点期刊,社科双百期刊,首届全国优秀社科期刊。



关于Python编程助力OBS studio 网络推流自动化的初探

【作者】 毛国林

【机构】 浙江省绍兴市柯桥区湖塘中学



【正文】  【摘 要】 根据教育部停课不停学的文件精神,我区教育技术中心承担了这次学生线上同步教学视频网络推流活动,笔者有幸参与了八年级网络推流,在工作过程当中,发现OBS studio网络推流手动操控,存在人为忘记切换、节目间切换不流畅导致黑屏等现象,通过Python编写鼠标键盘模拟程序,达到了切换精准,节目播放流畅,实现了网络推流自动化,大大降低了人为因素导致节目播放出错的风险。
  【关键词】 Python ;OBS studio;网络推流

  2020年,一场突如奇来的新型冠状病毒疫情从湖北武汉蔓延开来,席卷整个中国大地,短短数月,夺去了我数千同胞的生命。一时间,人们纷纷居家隔离,防止交叉感染。教育部发文停课不停学的指令后,各地线上教学如雨后春笋,纷纷推出了由各地名师录制的教学视频,同时,部分学校任课教师转战成为了线上为学生答疑的角色。我区教育技术中心承担了这次网络推流活动,笔者有幸参与了八年级网络推流。在工作过程当中,发现OBS studio网络推流软件手动操控,存在人为忘记切换、节目间切换不流畅导致黑屏等现象,通过Python编写鼠标键盘模拟程序,达到了切换精准,节目播放流畅,实现了网络推流自动化,大大降低了人为因素导致节目播放出错的风险。
  一、OBS studio网络推流流程及分析
  (一)OBS studio网络推流操作流程
  经过数天的OBS studio网络推流操作,发现其操作流程较简单,可大致分为以下几个步骤:
  1、 启动计算机。
  2、 用鼠标双击打开OBS studio网络推流软件。
  3、 鼠标定位到第一个直播场景。
  4、 在规定时间用鼠标点击“开始推流”,开始网络推流。
  5、 在规定时间按键盘向下箭头切换场景。
  6、 场景播完后,在规定时间“停止推流”结束推流。
  7、 关闭OBS studio软件。
  8、 关闭计算机。
  (二)OBS studio网络推流操作流程自动化分析:
  1、 启动计算机
  启动计算机比较简单,可在BIOS中设置,在工作日开启即可。
  2、用鼠标双击打开OBS studio网络推流软件(图1)
  Python中调用pyautogui模块,可以实现鼠标、键盘的模拟控制。
  3、光标定位到第一个场景
  用Python中调用pyautogui模块,模拟键盘“Tab”健实现。
















(图1)

  4、在规定时间用鼠标点击“开始推流”,开始网络推流
  用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”D”,模拟键盘实现。
  5、在规定时间按键盘向下箭头切换场景
  用Python中调用openpyxl模块,读取excel节目表中的对应节目播放时间存入列表,与计算机系统时间比对,比对成功,模拟键盘“↓”健实现。
  6、场景播完后,在规定时间“停止推流”结束推流
  用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”S”,模拟键盘实现。
  7、关闭OBS studio软件
  用Python中调用pyautogui模块,模拟键盘“AlT”+F4健实现。
  8、关闭计算机
  用Python中OS模块,调用shutdown程序实现。
  二、Python软件安装及控制推流程序解析
  为保证程序运行,首先要给计算机安装Python程序及Python第三方模块,可按以下方法操作进行。
  1、Python下载及安装
  笔者使用操作系统为win10 64,程序在python3.8.2 win64 下编译通过, 软件下载链接:https://www.python.org/downloads/,下载后运行安装,直至完成。
  2、 Python第三方模块下载及安装
  Pyautogui、openpyxl模块属于第三方模块,Python没有自带,?Python第三方模块下载链接https://pypi.python.org/pypi
  第三方模块通常都需与Python版本对应,否者安装后将不能使用,模块安装可在DOS下进行。
  模块安装 :pip install Pyautogui
  PiP install openpyxl
  注:pip安装程序在python3.8.2已经自带,安装模块时,需将模块包与pip程序在同一目录。
  3、 控制推流程序及注释
  程序通过while循环,模拟鼠标键盘操作,完成在指定时间加载节目列表,对OBS studio网络推流软件进行开始推流、切换节目,关闭推流,关装推流软件等操作,实现节目推流自动化。
  以下是程序tuiliu.py代码及注释,外部数据库program.xlsx,与tuiliu.py放置同一目录。
  #加载第三方模块及系统模块
  import pyautogui,time,datetime,openpyxl,os
  #主程序进入循环
  while True:
  t_date=datetime.date.today()
  daynum=t_date.strftime(“%w”)
  #推流日期为工作日周一至周五
  if (daynum==“1”) or (daynum==“2") or (daynum==“3") or (daynum==“4") or (daynum==“5"):     
  #获取计算机系统日期,显示时、分、秒   
  xttime=time.strftime(“%H:%M:%S",time.localtime())
  if(xttime==“07:00:00"):
  #推流开启之前清空推流时间列表
  timedat=[]
  time.sleep(2)    
  #节目播放时间在时间列表内,按向下箭头,切换到下一各节目场景     
  if (xttime in timedat):       
  pyautogui.hotkey('down')
  #为避免重复判断执行,设置2s等待时间,跳过这一节目时间点
  time.sleep(2)
  #因任务为上午推流,设置12:45:00停止推流
  if (xttime==“12:45:00"):    
  #键盘按下'ctrl','shift','s'   停止推流热键,退出推流 
  pyautogui.hotkey('ctrl','shift','s')
  #设置退出时间延长8S,确保成功退出推流
  time.sleep(8)
  #键盘按下'Alt',”F4t,   退出软件 
  pyautogui.hotkey('Alt',”F4t'')
  time.sleep(4)
  #07:28:00,打开推流软件,切换至第一个节目,打开推流
  if (xttime==“07:28:00"):
  #推流软件图标定位于桌面左上角,光标(40,43)位置双击,打开推流软件
  pyautogui.doubleClick(40,43)
  #延时16S等待打开
  time.sleep(16)   
  #在推流软件中设定'ctrl','shift','D'热键,按下'ctrl','shift','D'组合键,开始网络推流
  pyautogui.hotkey('ctrl','shift','D')
  #延时14S等待推流直播
  time.sleep(14)
  #点击推流界面,激活推流软件窗口为当前窗口
  pyautogui.click(1365,401)
  #启动pyautogui自动防故障功能,防止光标移动出错
  pyautogui.PAUSE=1
  pyautogui.FAILSAFE=True
  #按下Tab键,切换至第一个节目      
  pyautogui.hotkey('tab')
  time.sleep(2)
  #13:00:00,调用系统shutdown程序,强制关闭计算机
  if (xttime==“13:00:00"):
  os.system('shutdown -s -f -t 10')
  #退出循环
  break
  #每周07:15:00点载入推流时间列表
  if(xttime==“07:15:00"):  
  #excel工作簿中由Sheet1-Sheet5,5张工作表组成(图2),分表代表周一
  #至周五的直播节目时间表
  sheetnum=“Sheet"+str(daynum)
  #显示星期
  print(“今天是星期:"+str(daynum))
  #初始化时间列表
  timedat=[]
  s1=“"
  #加载工作簿'program.xlsx',路径位于解析器同一目录,,data_only=True
  #表示将工式计算后引用
  wb=openpyxl.load_workbook('program.xlsx',data_only=True)
  #读取当前工作日工作表名
  sheet=wb[sheetnum]
  #将播放时间列读入至列表
  for i in range(2,sheet.max_row+1):
  #读取excel第3列节目播放时间
  s1=s1+“\"“+str(sheet.cell(row=i,column=3).value )+"\“,"
  timedat=“["+s1+“]"          
  #显示节目单
  for i in range(1,sheet.max_row+1):   
  print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
  print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
  print(str(sheet.cell(row=i,column=1).value).rjust(12),end="")    
  print(str(sheet.cell(row=i,column=4).value).rjust(12))
  #退出工作表
  del wb
  time.sleep(2)












(图2)

  三、控制推流程序改进及注意事项
  (一)程序改进
  以上程序若中途退出,又错过加载节目表时间,程序播放时间列表将得不到节目播放时间,导致不能定时切换节目。为解决这一问题,可在程序开头加载一遍节目表时间代码。
  #加载周一至周五节目时间表 将这段程序放置while循环前,解决程序中途退出问题。
  sheetnum=“Sheet"+str(daynum)
  print(“今天是星期:"+str(daynum))
  timedat=[]
  s1=“"                
  wb=openpyxl.load_workbook('program.xlsx',data_only=True)
  sheet=wb[sheetnum]
  for i in range(2,sheet.max_row+1):
  s1=s1+"\""+str(sheet.cell(row=i,column=3).value )+"\","
  timedat="["+s1+"]"          
  for i in range(1,sheet.max_row+1):   
  print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
  print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
  print(str(sheet.cell(row=i,column=1).value).rjust(12),end="")     print(str(sheet.cell(row=i,column=4).value).rjust(12))
  del wb time.sleep(2)
  (二)其他注意事项
  1、在程序运行过程中,为避免弹窗出现影响键盘按键操作,需关闭杀毒软件,删除或关闭弹窗软件。
  2、需将系统日期与网上校对,并显示秒数,方便推流查看。
  3、当日推流完毕后,需将下一日推流内容在OBS studio网络推流软件中排好,若播放中途机器重启,需将当前节目重新打开。
  4、一周节目表可在program.xlsx工作簿中提前输入。
  5、zb.bat批处理,将其添加到开机启动文件夹下,实现开机加载控制推流程序,内容如下:
  @echo off
  cd\
  C:
  cd  "Users\HTZX\AppData\Local\Programs\Python\Python38"
  python c:\Users\HTZX\AppData\Local\Programs\Python\
Python38\tuiliu.py
  pause
  @cmd.exe
  四、结语
  该程序笔者在直播期间应用6周以上,稳定、可靠,切换精准,节目播放流畅,提高了工作效率,发挥了Python编程的优势,实现了疫情期间OBS studio网络推流自动化,惠及广大师生。
  参考文献:
  [1]美AlSweigart.Python编程快速上手[M].人民邮电出版社,2016
  [2]李永华.PYTHON算法指南[M].人清华大学出版社,2019