APP下载

基于Flash流媒体服务器的北大视频资源库的设计与实现

2016-11-11杨公义

软件 2016年8期
关键词:院系控件调用

杨公义

(北京大学 教师教学发展中心,北京 100871)

基于Flash流媒体服务器的北大视频资源库的设计与实现

杨公义

(北京大学 教师教学发展中心,北京100871)

自主研发视频资源库更易于和校内第三方系统集成。北大采用Flash流媒体服务器研发了视频资源库,功能模块包括用户管理,院系管理,课程管理,视频管理。摄像机的直播流能通过分布式转码自动存入北大视频资源库。后期经过非线性编辑的教学录像能通过自主研发的大文件上传控件从前台以web方式存入北大视频资源库。通过流权限控制保证了只有经过授权的摄像机才能向服务器端发送视频流,只有经过授权的第三方系统才能引用流媒体服务器的视频资源。北大视频资源库为校内七大系统提供RTMP协议的视频流支持、元数据管理和内容发布。

视频资源库;流媒体服务器;大文件上传控件;流权限控制

本文著录格式:杨公义. 基于Flash流媒体服务器的北大视频资源库的设计与实现[J]. 软件,2016,37(8):05-10

0 引言

视频资源库是高校网络教学、远程教育、公开课等系统的重要基础。在北大自主研发视频资源库之前,北大曾经使用过Real公司“Helix Server”和确然公司的“视频服务系统”。随着Adobe公司的Flash流媒体服务器的兴起,Real流媒体技术的不足之出明显暴露出来,比如它要求客户端必须安装RealPlayer,同时RealPlayer会和客户端的Flash Player冲突,而客户端90%以上的用户已经安装了Flash Player。北大大学英语网络测试表明并发用户过多时Helix Server服务器会死机。

确然公司的“视频服务系统”因为使用的是私有流媒体协议,技术上相对封闭,二次开发难度较大,委托公司开发费用太高。而北大教学网采用的是Blackboard,而Blackboard中缺少流媒体及视频管理模块,教学视频在网络教学中具有图文内容所不可替代的作用。通过自主研究并与Blackboard合作,北大具备了Blackboard的二次开发能力,同时北大视频公开课、北大网络教育电视台、北大讲座网等七大系统也需要视频资源库的支持,为此,我们基于Adobe Flash流媒体服务器自主研发了北大视频资源库。

1 北大视频资源库的功能模块与实体设计

北大视频资源库的功能模块包括:用户管理,院系管理,课程管理,视频管理,每个模块都开发了增、删、改、查功能[1]。

1.1用户管理模块

管理员有三级:①“最高级管理员”,可以管理所有院系、所有课程、所有课程中的所有视频,“视频删除”功能是真正的删除。能为所有课程指定相应的“课程管理员”。②“全部课程视频管理员”,可以管理所有课程中的视频,“视频删除”功能只是打一个标记,并不是真正删除。③“部分课程视频管理员”,只能管理部分课程的视频[2]。

如图1所示,用户(User)实体的属性包括:用户ID(主键),用户名(唯一约束),真实姓名,密码,电子邮箱,院系名称,联系电话,角色(通过数据字典把管理员分成三个级别),备注,院系编号,创建者的用户名,创建者用户ID(外键关联自身实体User),院系ID(外键关联院系实体Department),时间。

1.2院系管理模块

可管理北大所有的院系。管理员登录后单击“院系管理”进入本模块,如图2所示。首先得到按照“课程数量”降序排列的院系列表。“课程统计”功能能自动统计出每个院系在系统中的“课程数量”。院系(Department)实体的属性包括:院系ID,院系编号,院系名称,课程数量。

1.3课程管理模块

从图2“院系管理”的“院系列表”页面,单击任意一个院系名称进入本模块,如图3所示。可以管理该院系的所有课程。首先得该院系的课表列表,在新增、删除某个课程时,会级联更新“院系管理”模块中本课程所在院系的“课程数量”字段。在新增课程时,用程序保证“课程id+教师id”不能重复。课程(Course)实体的属性包括:课程ID(主键),课程名称,教师姓名,教师ID,院系ID(外键关联院系实体Department),院系名称,北大教学网对应ID,管理员帐号,是否是公开课,一级学科名称,课程缩略图地址,本硕标志位,视频数量,课程访问量[3]。

图2 院系管理

图3 课程管理

1.4视频管理模块

在图3“课程管理”的“课程列表”页面,单击任意一个课程名称进入本模块,如图4所示。首先得到该课程的视频列表。单击任意一个视频的“播放按钮”,可以播放该视频。

“假删除”功能:为了防止视频资源的误删除,假删除功能只是对视频打个删除标志,同时把要删除的文件改名为“_时间戳”,并以新文件名更新数据库。为避免多次假删除后,导致文件名很长,从程序上规定一个文件只能被假删除一次。在假删除后,还能保证序号像真删除一样排列。在图3中单击“查询假删除视频”,能查询出所有课的已经假删除的视频。查出的视频标题命名为“课程名称_视频标题”。“视频管理”模块的视频列表是按第几次课,第几讲排序,因为“查询假删除视频”功能是查询所有课程的已删除视频,就不能再按第几次课,第几讲排序了,所以程序按照id降序排列,采用的技术为用url传数组。对于普通用户假删除视频后,该记录自动隐藏,对于最高级管理员,可以看到已经假删除的视频,并且可以实施真正的删除操作。

图4 视频管理

在图4“视频管理”页面,单击“添加”进行视频新增操作,如图5所示。第几次课和第几段的智能自动设置:首先查询数据库得出下一个是第几讲、第几段并自动填入。因为一次课把视频最多分成3段,实现了下列几种情况。①如果一门课是第一次添加视频,则默认为第1次课第1段。②如果一门课已经存在n次课的第03段,则新增视频时,“次数”n加1,“段数”置1,录制日期置空。③如果一门课已经存在第n次课01段,则新增视频时,次数n不变,段数加1,录制日期不变。④单击“下一次”按钮时,则“次数”n加1,“段数”置1,录制日期置空。因为当前浏览器都限制从表单input type=file中获取操作系统文件的真实路径,我通过编码突破了这一限制,实现了能从form的input type=file字段取得视频文件的真实路径,并支持中文路径。进而以参数形式将路径交给applet进行FTP方式上传。通过代码优化和FTP服务器的参数配置实现多用户并发大文件上传。向大文件上传控件applet传递参数时采用了加密机制,并通过算法优化提高加密和解密速度。允许上传的文件的格式包括flv、mp4、f4v和m4v,这与flash流媒体服务器支持的类型一致,对其他类型的文件,给出警示对话框的同时给出转码工具的链接。添加录制日期时,输入框可以直接输入日期,也可以用时间选择器。对用户的表单输入作了前后台双重验证。

在图5中单击下一步,启动JavaApplet,这是基于FTP协议自主研发的大文件视频上传控件,如图6和图7所示。前台用户能以web方式将大于5 G的大视频文件上传到指定目录中,上传目录和Flash流媒体服务器的媒体目录关联,该上传控件能提取视频长度等媒体元数据,能返回供外部系统调用的RTMP流路径。系统把元数据信息自动存入数据库中,元数据信息包括院系、课程、第几讲、第几段、文件路径、视频时长等,视频上传有进度条。视频上传成功后,可按院系、课程、第几讲、第几段导航视频资源,并可以播放、编辑和删除。

如图8所示,文件的目录结构和文件命名是根据用户输入的元数据自动创建的,程序保证如果元数据信息相同则不允许再次上传。视频(Video)实体的属性包括:视频ID,视频标题,第几次课,第几段,显示用的标题(课程名称-第几讲:视频标题),视频地址,视频缩略图,是否删除,是否显示,是否是申报视频,视频访问量,录制日期。

图5 元数据的采集与自动处理

图6 基于JavaApplet的视频上传控件

图7 支持5G以上的大文件并带进度条

图8 由元数据生成文件的目录结构

图9 北大视频资源库的流程图

图10 对Flash流媒体服务器二次开发实现流权限控制

2 北大视频资源库的运行机制

如图9所示,北大资源库的视频资源来自两方面:①摄像机的直播流通过分布式转码自动存入库中。②后期经过非线性编辑后的教学录像通过自主研发的多媒体上传控件从前台以web方式存入库中。分布式转码采用Apple公司的Podcast Producer进行,实现自动转码、添加片头片尾水印、自动备份管理、自动发布等。北大视频资源库和Oracle数据库、文件服务器协同工作:教学录像存入文件服务器的同时把文件地址等元数据信息存入Oracle数据库,并把文件地址与北大视频资源库的流媒体目录关联起来,并保证各个服务器之间协同工作与权限控制。

3 对Flash流媒体服务器的二次开发实现流权限控制的关键技术

为保障Flash流媒体服务器的安全,需要保证只有经过授权的摄像机才能向服务器端发送视频流,还要保证只有经过授权的第三方系统才能引用流媒体服务器的视频资源[4]。采用脚本语言对Flash流媒体服务器二次开发实现[5]:①如图10所示,移动摄像机通过Flash Media Live Encoder向服务器发送直播流时,采用用户名和密码的方式进行权限控制,因为移动摄像机的IP地址不固定。②针对固定摄像机的直播流和第三方系统点播流采用黑白名单权限控制。

流权限控制的关键技术如下:在Flash流媒体服务器的媒体目录(/usr/keieproject/adobe/fms/applications)中创建若干个文件夹作为直播频道,如dianjiao104、dianjiao114等。在每个频道下面部署如下关键文件:allowedHTML、domains.txt、allowed-SWFdomains.txt、Application.xml、main.ase。在文件allowedHTMLdomains.txt和allowedSWFdomains.txt中输入允许调用本Flash流媒体服务器的第三方系统的服务器IP地址列表,一行输入一个IP地址。main.ase文件是由main.asc编译得到的。main.asc关键代码如下:

4 基于Ftp协议的自主研发的JavaApplet多媒体上传控件的关键技术

4.1JavaApplet多媒体上传控件在jsp页面中的调用方法与接口参数

4.1.1jsp页面中applet回调的js函数

function myFunction(text) {document.forms[0]. accessory.value =text; document.forms[0].submit(); }该函数通过参数text能接受applet传回的成功上传的文件地址,并将该地址存入jsp页面中名为accessory的表单域,并触发表单提交事件

4.1.2applet嵌入jsp页面的方法和接收的参数

4.1.3参数说明

param_host,param_user, param_pass分别为ftp服务器的主机地址、用户名、密码;这3个参数在jsp页面传入applet之前按自定义算法加密,在applet中对接收的参数值再按相应的算法解密。param_allowFileType:允许上传的文件类型;param_path:文件要存储的相对于ftp帐户根目录的路径;param_saveAsFileName:文件将另存的文件名;param_postscript:文件上传成功后回调的jsp页面中的js函数。

4.2Zupload.java实现的关键技术

4.2.1父类及实现的接口

2018年11月4日,面对新疆队的比赛,易建联因伤缺阵,周鹏、威姆斯被禁赛,三巨头无缘面对新疆第二战,无胜负之压力的年轻球员获得更多出场时间。

包括ConnectionListener和ActionListener。

4.2.2实现ConnectionListener接口中的方法

//程序调用chdir()时触发。

updateRemoteDirectory(BasicConnection con){}

//当建立ftp连接时调用。

connectionInitialized(BasicConnection con) {connected = true;}

//每成功传输bytes的数据就调用。

//更新进度条并重绘窗体

updateProgressBar();repaint();

//当连接失败时调用

connectionFailed(BasicConnection con, String why)。

//上传完成一个文件后触发该事件,如果所有文件alFiles非空,继续上传下一个文件,否则调用jsp接口中的js函数。

actionFinished(BasicConnection con){}

4.2.3实现ActionListener接口中的唯一的方法:actionPerformed(ActionEvent e)。

因为本类有该方法,所以在init()方法中可为按钮Add Files、Remove Files、Upload Files增加事件监听者.addActionListener(this);这里通过e.getSource()判断事件源,进而调用相应的代码块。如果事件源是bAddFile就通过弹出一个打开文件的文件选择器对话框,选择一个文件。如果事件源是bRemov-eFile从将要上传的所有文件alFiles动态数组中删除指定位置的文件,并更新需要上传的所有文件大小。如果事件源是bUpload就调用uploadFiles()将所有的文件一个接一个地上传。uploadFiles():如果alFiles所有文件为空,就退出该方法,否则创建一个FtpConnection对象con,利用con对象将所有的文件一个接一个地上传,调用con的方法addConnectionListener(this)增加事件监听者;login(…)登录;chdir()切换目录;mkdir()创建目录;con.handleUpload(…)进行文件上传;con.abort()终止文件传输;con.disconnect()断开连接。通过下面的代码块实现断点续传while(!connected){try {Thread.sleep (10);}catch(Exception ex) { ex.printStackTrace(); }} 4.2.4重载Applet类的下列方法:init(),start(),stop(), destroy()

init():当Applet第一次load的时候调用这个函数,在Applet的生存周期中只调用一次。构造图7所示的applet界面并增加按钮的事件监听者this。用到的组件有文件选择器JfileChooser、按钮Jbutton、水平进度条JprogressBar、列表框Jlist、JScrollPane滚动条、抽象窗口工具箱容器Container、布局管理器GridBagLayout、布局管理器的约束GridB-agConstraints。通过getParameter()得到上述jsp页面中的接口参数,需要解密的参数在这里进行解密。

start():init()初始化之后,紧接着自动调用start()方法。当用户离开包含Applet的主页后又再返回时,系统都会自动再执行一遍start()方法,该方法在Applet的生存周期中可能被调用多次。如何jsp页面中的接口参数非空,就把名为bParamsSet的类成员变量设为true.

stop()和destroy():进行ftp连接资源(con)的销毁,如果con非空,就执行con.abort(); con.disconnect(); con=null。当浏览器离开Java Applet所在的页面转到其他页面时,stop()方法被调用。当用户关闭浏览器时,destroy()方法被调用。

5 结语

“基于Flash流媒体服务器的北大视频资源库”为北大如下七大系统提供RTMP协议的视频流支持、元数据管理和内容发布:北大公开课、全校大学英语一二三级网络测试、北大组织部的党课、北大教学网、北大讲座网、北大网络教育电视台、北大移动课堂视频终端。北大视频资源库目前有视频课程114门,教学视频3364讲,与基于Blackboard的北大教学网进行了嵌入式完美无缝对接,与北京大学移动课堂视频终端无缝对接[5]。

[1] 杨公义. 大学生创新能力培养的网络平台设计与开发[J].远程教育杂志, 2008, (01): 59-62. YANG Gongyi. The Design of Network Platform for Undergr aduate’s Cr eative Talents Cultivation[J]. Distance Education Journal, 2008, (01): 59-62. (in Chinese).

[2] 杨公义, 张亦工. 北京大学教室管理系统的设计与实现[J].现代教育技术, 2015, (4): 115-120. YANG Gongyi, ZHANG Yigong. Design and Implementation of Peking University Classroom Management System[J]. Modern Educational Technology, 2015, (4): 115-120. (in Chinese).

[3] 杨公义. 基于SSH的播客资源平台的设计与实现[J]. 现代远程教育研究, 2009, (1): 66-68. YANG Gongyi. A Podcast Resource Platform Basing on SSH[J]. Modern Distance Education Research, 2009, (1): 66-68. (in Chinese).

[4] 杨公义, 张亦工. 基于Red5的网络教育电视台的设计与实现[J]. 现代教育技术, 2012. (8): 109-112. YANG Gongyi, ZHANG Yigong. Design and Implementation of Red5-Based Net Education TV Station, 2012. (8): 109-112. (in Chinese).

[5] 陈飞, 杨公义, 李志刚, 等. 基于Blackboard系统的“北大教学网”扩展开发研究[J]. 北京大学教育评论, 2013, (12): 201-211. CHEN Fei, YANG Gongyi, Li Zhigang, et al. Extension and Development of Peking University Academic Online Based on Blackboard System[J], 2013, (12): 201-211. (in Chinese).

Design and Implementation of Peking University Video Resource Library Based on Flash Streaming Media Server

YANG Gong-yi
(Center for Excellent Teaching and Learning, Peking University, Beijing 100871, China)

Video resource library made by independent research and development integrates more easily to the third party system in school. Flash streaming media server has been used to develop the video resource library in Peking University. The function modules include: user management, department management, curriculum management, video management. The live stream of the video camera can be stored in this library. The teaching video after the nonlinear editing can be uploaded to this library in browser through large file upload component which are independent research and development. Streaming permission control ensures that the camera can't send the video stream to the library until it passes through the authorization. Only the authorized third party system can reference the video resources of the streaming media server. For the school's seven major systems this library provides RTMP protocol video stream support, metadata management and content distribution.

Video resource library; Streaming media server; Large file upload component; Streaming permission control

TP315

A

10.3969/j.issn.1003-6970.2016.08.002

中国下一代互联网示范工程CNGI项目的子项目(CNGI2008-129-116);教育部项目

杨公义(1978-),男,工程师,主要研究方向:基于流媒体的视频资源库开发、基于SSH的轻量级J2EE应用开发。

猜你喜欢

院系控件调用
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
高师音乐院系艺术实践周实效提升策略
基于系统调用的恶意软件检测技术研究
关于高等院校院系党政关系的思考
ASP.NET服务器端验证控件的使用
利用RFC技术实现SAP系统接口通信
Spreadsheet控件在Delphi数据库系统中的编程与应用