APP下载

基于AutoIt的卫星远教课程自动录制系统设计

2015-03-02黄皓

软件导刊 2015年1期
关键词:远程教育

黄皓

摘要:视频课程资源在远程教育和社区教育中占据重要地位,为了录制教育卫星电视教学节目,使用Autoit脚本设计自动录制系统。通过互联网获取节目表,定时器根据节目时间调度录制、停止、频道切换、文件命名、对时等任务。应用实践证明,该系统设计实现了自动录制。

关键词:AutoIt;视频录制;远程教育;CETV

DOIDOI:10.11907/rjdk.143643

中图分类号:TP319

文献标识码:A 文章编号文章编号:16727800(2015)001011503

0 引言

广播电视大学构建了天网、地网、人网三网合一的世界上最大的远程教育系统。中央广播电视大学通过中国教育电视台的CETV1、CETV2频道,经由东经134°的亚太1A和东经110.5°的鑫诺1号卫星,向全国传送远程教育课程,每天播出近18小时的远程教育节目。各地电大均安装卫星接收装置,不仅可以接收到这些视频节目,而且还可以接收用于“电大在线”教学平台的IP数据资源。

教育电视播出的节目既包括专业课程,也有大量通识课程,将这些教学内容录制下来,既能用于开放教育的课程学习,也可在社区教育中发挥重要作用。节目播出通常是从早上6:00开始,直到晚上24:00结束,假如不间断地采用电脑进行录制,那么有6个小时录制的是空白,而且由于卫星电视卡录制的是接收到的视频流,格式为MPEG2,分辨率为标清720*576,码率通常为4Mbps,一个小时的录制文件大小就达1.8GB,一天超过40GB,后期文件的分割、命名、格式转换也费时费力。假如采用人工方式进行录制,必须有人一直在电脑前值守,在每个节目开始时按下录制按钮,在结束时按下停止按钮,然后把录下的文件改名,再进行格式转换,不仅工作枯燥乏味,而且人力成本很高,有时也不免会出现纰漏和差错。因此,本文设计一个可以实现自动录制的系统,自动将远教课程的节目录制下来,按节目名称自动命名,最后再转换为互联网上可以使用的流媒体,既节省存储空间,也方便教学点播、学习。本文设计的就是这样一个可以进行自动录制的系统。

1 卫星电视远教系统构成

系统硬件由Ku波段卫星天线、卫星电视接收卡和台式计算机构成。

图1 硬件构成

本系统使用的是双汉1020卫星电视接收卡,该卡既可以接收卫星电视节目,也可以接收远教IP广播数据,类似的卫星电视接收卡有很多品牌,如同洲2030S、清华永新卫星接收卡NDB-NS11、九洲2001S卫星卡等。计算机配备一个可抽取式硬盘盒,便于快速更换储存视频资源的大容量硬盘。

软件工作在Windows XP操作系统中,安装好接收卡驱动程序和接收卡录播软件,可正常接收CETV节目。系统使用的录播软件为DVBTV,安装在C:Program FilesPCTVDVBTV下。

2 自动录制系统设计

在Windows系统中,图形用户界面极大地方便了用户和计算机之间的交互,但也带来了一个问题,就是在不需要用户交互的情况下,一个或多个应用程序如何自动完成指定的处理。DOS系统通过批处理命令来进行应用程序的协同与控制,而Windows系统本身没有提供类似的工具。

AutoIt正是一个Windows应用程序级的调度处理软件,可以编写脚本调用不同的应用程序协同完成某一件工作。AutoIt是免费的脚本语言,其语法类似于BASIC,简单易用;能够模拟键盘操作和鼠标移动、点击等操作;可以管理进程和窗口,对窗口中的菜单、标准控件等进行操作;支持Windows API、DLL和COM;可使用正则表达式及生成图形用户界面;能被编译成独立运行的EXE文件。通过模拟键盘按键、鼠标移动、窗口或控件操作等,编写重复性任务的脚本来实现自动化。

在该系统中,用AutoIt替代人手,自动完成以下工作:①在指定时间取得当天的CETV节目表;②在每一个节目开始时进行录制;③在每一个节目结束时停止录制;④重命名录制下来的文件。

由于所有的操作都是严格按时间顺序进行,所以采用一个定时器来进行任务调度,并将每一步的处理细分为独立的任务,用相应的AutoIt脚本程序来实现,对应的可执行程序文件如表1所示。

2.1 定时器

定时器是自动录制系统的核心,负责所有任务的调度工作。调度根据一个文本文件c:clock.txt来进行,格式为:

时间 执行程序 说明

如:05:00:00 OpenEdu.exe 取电大平台节目表

定时器执行流程如下:①如有新调度表文件c:clock.txt则读入数组A;②取当前时间t;③比对当前时间t与数组A中的时间;④如相等,执行数组A中对应的程序;⑤脚本休眠500ms以让出CPU资源;⑥转步骤①。

为了精确地进行时间比对,在该程序中将hh:mm:ss格式的时间转换为系统Tick计数,使用AutoIt的_TimeToTicks函数,并且使用FileOpen、FileReadLine、FileClose进行文件操作,使用GUICreate、GUICtrlCreateList、GUISetState、_GUICtrlListSelectIndex、_GUICtrlListClear、_GUICtrlListAddItem、_GUICtrlListCount、_GUICtrlListGetText进行用户图形界面处理。定时器是一个无限循环,因而使用Sleep进行脚本休眠,释放CPU资源。

2.2 获取节目表

在中央电大的网站上有最近一周在CETV1、CETV2上播出的节目表,格式如表2所示。

根据此节目表,就可以进行录制、命名等处理。大致操作流程如下:①打开网页;②读取本日的节目播出表;③生成调度文本。

AutoIt支持IE浏览器操作,使用_IECreate打开IE,使用_IELinkGetCollection获取链接集合,通过_IEPropertyGet得到IE对象属性,用_IENavigate跳转到相应链接,_IELoadWait等待网页下载完毕,通过_IEFrameGetCollection得到IE框架集合、_IETableGetCollection取得页面中的表格集合,使用_IETableWriteToArray将表格内容写入AutoIt数组、FileWriteLine写入文本文件。

节目表的格式如下:

05:20 平衡养生说 116

05:50 开放课堂 国画山水9

通过cetv2clock.exe将c:cetv.txt的节目表内容转换为任务调度表,保存到c:clock.txt。除了节目表规定的录制任务以外,还加入一些常规的任务,如对时、切换频道等。考虑到对于录播软件的操作都需要一些时间,而节目与节目之间均有2min左右的间隔,所以在调度表中录制开始的时间会比节目表提前5s。

2.3 运行接收卡录播软件

事先根据程序安装位置得到其路径,通过AutoIt中的工具Au3Info.exe,取得接收卡录播软件的窗口及控件信息,如窗口、类型、控件号等。

首先判断录播程序是否运行,如未运行则运行之,根据运行的进程号PID取得进程对应的窗口句柄HWND。

$pid=ProcessExists("DVB-TV.exe")

If $pid=0 Then ; 程序未运行

$pid=Run("C:Program FilesPC-TVDVB-TVDVB-TV.exe")

Sleep(3000)

EndIf

$a=WinList("[CLASS:#32770]")

$sWin=0

For $i=1 To $a[0][0]

If $pid=WinGetProcess($a[$i][1]) Then ;查找DVB-TV的HWND

$sWin=$a[$i][1]

ExitLoop

EndIf

Next

然后再激活程序窗口,根据控件号模拟鼠标点击操作“停止”、“下一频道”。

If $sWin<>0 Then

WinActivate($sWin)

WinWaitActive($sWin)

Sleep(100)

ControlClick($sWin,"",32777) ;停止

Sleep(1000)

ControlClick($sWin,"",32778);下一频道

EndIf

2.4 录制

模拟人机交互,根据录播软件中“录制”按钮的Control性质,编程发送消息,模拟一个Click事件。

先检测录播程序是否运行,如程序未运行则运行之,根据运行的进程号PID取得进程对应的窗口句柄HWND,然后执行以下代码:

WinActivate($sWin)

WinWaitActive($sWin)

Sleep(100)

ControlClick($sWin,"",32777) ;停止

Sleep(500)

ControlClick($sWin,"",32771);播放

Sleep(3000)

ControlClick($sWin,"",32775);录制

2.5 停止

模拟人机交互,根据录播软件中“停止”按钮的Control性质,编程发送消息,模拟一个Click事件,执行以下代码:

WinActivate($sWin)

WinWaitActive($sWin)

Sleep(100)

ControlClick($sWin,"",32777);停止

Sleep(2500)

2.6 文件重命名

按节目表中的节目名称,将录制的视频文件改名。比对节目表文件中的节目时间与已录制文件的时间,将吻合者改为节目名称。由于一些特殊字符如“*、?、|、>、<”等在Windows系统中有特定含义,所以必须去除这些符号,否则改名会失败。

程序流程描述如下:

①读节目表文件c:cetv.txt的一行;

②读取失败,转结束;

③取行中的时间、节目;

④过滤节目中的特殊字符;

⑤查找并重命名视频保存目录下,与时间相符的.mpg文件;

⑥跳转到第①步。

2.7 退出接收卡录播软件

根据录播软件的可执行程序名称,关闭软件相应进程。

ProcessClose("CaptureData.exe")

ProcessClose("PlayProgram.exe")

ProcessClose("DVB-TV.exe")

2.8 系统时间校对

用于卫星教学课程视频录制的电脑是24小时不间断运行,由于程序严格按照节目表的时间来调度,如果时间不准确就会对整个系统的正常运行造成影响,所以在任务调度中每天都通过互联网对时。程序为UpTime,源代码如下:

Dim

$a[6]=["210.72.145.44","time.windows.com","time.nist.gov","time-nw.nist.gov","time-a.nist.gov","time-b.nist.gov"]

run("control.exe timedate.cpl")

Sleep(100)

$s="日期和时间 属性"

WinWaitActive($s)

Send("^{TAB 2}")

$j=0

While $j<50

$j=$j+1

$i=int(Random()*6)

WinActivate($s)

Sleep(500)

ControlSetText($s,"",1001,$a[$i])

Sleep(500)

WinActivate($s)

Send("!u")

Do

Sleep(1000)

WinActivate($s)

$t=ControlGetText($s,"",725)

$p=StringInStr($t,"请等待")

Until $p=0

WinActivate($s)

$t=ControlGetText($s,"",725)

$p=StringInStr($t,"成功")

if $p>0 Then ExitLoop

WEnd

WinActivate($s)

ControlClick($s,"",1)

3 应用实践

在AutoIt的IDE中将源程序编译为可执行程序。首先运行OpenEdu.exe,从网上获取当天的节目表,然后运行cetv2clock.exe,根据节目表生成当天的任务调度表,接着运行clock.exe任务定时调度程序,屏幕界面如图2所示。

图2 定时任务调度程序界面

系统在定时器的控制下,自动调度各任务所需程序,完成课程视频录制工作。投入运行以来,系统录制了大量的远程教育课程视频,大概每2周就需要更换一个500GB的硬盘。录制的视频可通过Mediacoder批量转化为H.264格式的MP4文件作为网上教学资源,所占空间压缩到原来的1/10以下,而硬盘可以循环使用。

4 结语

视频教学课程是远程教育、社区教育中不可或缺的资源,通过卫星电视进行节目录制是获取这些资源的重要途径。然而,由于缺乏有效的自动录制手段,这些视频资源往往得不到有效利用,难以发挥应有的作用。基于AutoIt的自动录制系统的研究和使用,为解决该问题提供了新思路,也为Windows下的其它应用自动化操作提供了可借鉴的思路。

猜你喜欢

远程教育
关于军队任职院校发展远程教育的思考
远程教育中教学交往策略探究
发挥远程教育平台优势?探索社区教育数字化学习模式