基于C/S架构和RTMP协议的机房教学系统
2019-05-24叶兴汪彦肖金琢
叶兴 汪彦 肖金琢
摘要:为了提高当前高校机房实验教学的信息化管理水平,改善实验教学质量,设计了一个机房教学管理系统。该系统利用C/S结构,以Visual Studio 2012作为开发工具,并使用SQL Server 2010作为数据库。本系统实现了基本的机房实验教学管理功能,并采用较为新颖的RTMP协议配合FFmpeg工具进行屏幕共享功能的实现,在保证画面质量的同时,实验教学效率有了进一步的提高。
关键词:教学系统;信息化;C/S;屏幕共享; RTMP协议;FFmpeg
中图分类号:TP311.5 文献标识码:A 文章编号:1009-3044(2019)04-0091-03
随着信息时代的高速发展,高校教学思想与教学平台发生了翻天覆地的变化[1]。越来越多的高校将机房规模扩大以便适应时代潮流,而在高校教学活动当中,机房实践教学处于突出位置,这使得这种现代化实验教学面对着十分严峻的挑战。不过囿于人力与资金的关系,现在许多高校仍然在使用比较传统的教学管理方式,这不但使得教学质量堪忧,也造成了较大的资源浪费。因此,需要一种方便而实用的机房实验教学系统来解决当前的问题。结合实际机房实验教学状况,我们设计和实现了一个机房教学系统,该系统使用Visual Studio 2012作为开发工具,使用SQL Server 2010实现后台数据库。
1 目前背景介绍
当前国内外同类的教学软件大部分为机房实验教学系统[2-3],大都具有广播教学、文件传输等功能,但有些系统已经不能适应如今信息化教学的潮流和软硬件环境的变化,笔者认为可以用更高效、更稳定的技术进行机房教学系统基本功能的改进与扩展。
2 系统分析
2.1 需求分析
经调研分析,我们了解到现阶段高校机房系统的管理需求主要存在于高效率的屏幕共享、文件传输、设备监管与签到签退等方面,同时系统需具有良好的可兼容性、可维护性。
2.2 可行性分析
文件传输与设备监管等需求可以使用传统的Socket通信技术来实现,作为授课主要功能的屏幕共享则使用更为稳定、高效的RTMP协议来进行实现,而使用数据库技术可以进行后台学生信息管理,实现课堂签到、签退等功能。这些技术都是比较成熟和稳定的,因此该系统从技术的角度来看具有可行性。
3 系统设计
3.1 系统构架设计
机房实验教学系统的总体框架结构分为后台数据库、分发服务器、教师端软件和学生端软件四部分。后台网络数据库采用SQL Server 2010与分发服务器都运行在Windows操作系统上。教师端软件运行在教师机上,学生端软件则运行在学生机上,教师端软件与学生端软件之间、运行于不同学生机的学生端软件之间通过Socket进行网络通信。教师端和学生端均采用EF(Entity Framework)框架访问后台数据库,EF框架在3.3节阐述。系统整体架构如图1所示。
3.2 系统功能模块设计
如构架图所示,机房教学系统分为后台数据库、分发服务器、教师端软件、学生端软件四部分。教师可以通过教师端软件广播屏幕功能向学生机广播自己的屏幕,共享文件功能对文件进行发送,在线讨论功能与学生进行交流,并可以设置是否允许讨论,还可以通过远程控制对学生端进行远程控制,如关闭学生机上的某个程序,远程关机等等。学生通过学生端软件可以进行签到,签退,进行讨论,接收教师机共享文件,观看教师机广播屏幕等功能。系统功能结构图如图2所示。
3.3 数据库设计
机房教学系统数据库除了使用功能强大的SQL Server 2010构建外,还使用了微软的EF(Entity Framework)框架。EF框架是ADO.NET (ActiveX Data Objects 活动数据对象)中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM(Object Relational Mapping对象关系映射)框架。此框架最大的作用就是够使用特定于域的对象来处理数据,而无需关注存储在此数据的基础数据库表和列,简而言之就是使用更少的代码创建和维护面向数据的应用程序,使得访问数据库像使用一个class类一般简单。
合理利用数据库可以大量减少日常工作任务,结合实际情况分析,本系统数据库共设计四张表,分别是教师信息表、学生信息表、实验记录表、课堂记录表。
1)学生信息表用于学生具体信息的记录,包括學生学号、姓名、班号、性别、登录密码和院系名称。
2)教师信息表用于记录教师的具体信息,包括教师工号、姓名、性别、登录密码和院系名称。
3)课堂记录表是记录本次课堂的详细信息,包括机房编号、授课时间、教师工号、班号、到课人数、缺勤人数、缺勤学号。
4)学生实验记录表是记录具体每次上机实验的信息,包括学号、机房编号、实验编号、教师工号、班号、实验分数。
4 系统实现的关键技术
4.1 RTMP协议简介
RTMP (Real Time Messaging Protocol实时消息传输协议) 是专门用来传输音视频数据的流媒体。它基于TCP/IP协议,是一个协议族,除了基本协议之外还包含RTMPT/RTMPS/RTMPE等多种变种。它最初由Macromedia公司创建, 后来归Adobe公司所有, 是一种应用非常广泛的通信协议,其研发目的是为了更好地完成实时的数据通信任务,实现音频视频文件的传递接收。但随着流媒体技术的发展应用,RTMP协议的使用范围也在不断扩大,多个在音视频传播领域有广泛影响力的,类似于Flash+AIR(Adobe Integrated Runtime )软件中,RTMP协议都可以完美支持[4]。
4.2 利用RTMP协议实现屏幕共享
所谓屏幕共享,是指在网络环境中,远程客户端可以在较短的时间延迟内重现主机屏幕界面的显示内容,并提供给远程用户一种如坐在主机旁一样的虚拟界面环境。屏幕共享是一种重要的数据共享应用,已在视频会议、远程教学、远程监控和股票分析系统等领域中取得到了良好的应用。
屏幕共享最开始源于苹果公司所提出GUI (Graphic User Interface图形用户界面),后因为其成本低、灵活和便于维护等优越性得以迅速发展[5-6]。在本系统中,整个屏幕共享功能的简要流程如图3所示。
其中本系统的分发服务器部分,利用SRS(Simple RTMP Server)搭建RTMP服务器,在配置方面较为简单方便,利于后面使用FFmpeg工具进行推流与拉流。FFmpeg是一套非常强大的视频、音频开源转换程序,能将视频、音频转换成流,FFmpeg内置的gdigrab就可以进行基于Win32 GDI(Graphics Device Interface圖形设备接口)的屏幕捕获,只要一条ffmpeg -f gdigrab -i desktop指令即可,在采集教师端的桌面画面后进行压缩转码操作,将其转换成流。至此之后就是进行推流的准备,将流封装成RTMP格式,且在传输时需要拆分成一个个的Chunk块。RTMP流的传输不是用Message划分的,而是用Chunk块,接下来使用FFmpeg即可进行推流,把利用RTMP协议封装好后的RTMP流传输到服务器上。其具体操作可概括为初始化、握手、建立连接和建立流等环节,此处以本机服务器地址为例,FFmpeg工具的推流的启动指令为ffmpeg -f gdigrab -i desktop–b4M –r 10 –preset ultrafast –turezerlatency–fflvrtmp:localhost:1935/live/room,在学生端同样利用FFmpeg进行拉流,此时也需要进行转码操作。值得一提的是使用FFmpeg的C# BindingFFmpeg.AutoGen直接用指针来操纵流,所造成的延迟较低,大概在1秒左右。在整个屏幕共享过程中RTMP流的转码是重中之重,视频文件的输出转码过程如图:
所谓转码即为视频信号从一种格式转换成另一种格式。这里即为视频流与RTMP流之间的相互转换,学生端只有正确地将RTMP流进行转码才能观看到教师端的画面。
学生端转码的部分核心代码如下:
_pFormatContext=ffmpeg.avformat_alloc_context();//创建一个内存
varpFormatContext = _pFormatContext;
//写入
ffmpeg.avformat_open_input(&pFormatContext, url, null, null).ThrowExceptionIfError();
ffmpeg.avformat_find_stream_info(_pFormatContext, null).ThrowExceptionIfError();
//查找第一个视频流
AVStream* pStream = null;
for(vari = 0;i< _pFormatContext->nb_streams; i++)
//判断是否为视频流
if(_pFormatContext->streams[i]->codec->codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO)
{
pStream = _pFormatContext->streams[i];
break;
}
//没有找到视频流就抛出异常
If(pStream == null) throw new InvalidOperationException("Could not found video stream.");
//设定流
_streamIndex = pStream->index;
_pCodecContext = pStream->codec;
//查找编码和解码
varcodecId = _pCodecContext->codec_id;
varpCodec=ffmpeg.avcodec_find_decoder(codecId);
if (pCodec==null)throw new
InvalidOperationException("Unsupported codec.");//不支持编码类型
//解码
ffmpeg.avcodec_open2(_pCodecContext, pCodec, null).ThrowExceptionIfError();
//设置解码名
CodecName=ffmpeg.avcodec_get_name(codecId);
//设置帧的大小
FrameSize=new Size(_pCodecContext->width, _pCodecContext->height);
//设置像素格式
PixelFormat = _pCodecContext->pix_fmt;
//创建视频
_pPacket = ffmpeg.av_packet_alloc();
_pFrame = ffmpeg.av_frame_alloc();
5 结束语
在计算机技术普及的时代,实验教学系统遇到更多的挑战是必然的。想要有效提升高校机房教学管理水平,需要对网络通信、数据库和机房教学等方面有着比较深刻的认知,了解机房具体管理运作和系统功能块上的优缺点,并结合日常机房实践管理案例,针对性地将系统进行修改与扩展。本文所介绍的系统,提高了实验课堂教学质量,简化了日常教学工作, 也使机房实验教学工作更加井然有序,这对当前高校信息化教学有着重要的现实意义和推动作用。
参考文献:
[1] 邱兆新.基于机房教学模式下大学计算机基础教学改革[J].广西民族师范学院学报,2016,33(3):38-40,43.
[2] 孙涛,焦媛.提升机房教学效果的措施分析[J].黑龙江教育:理论与实践,2016(Z1):83-84.
[3] 汪彦,刘智勇,龙振球.机房实验教学系统的优化研究与实现[J].计算机时代,2017(2):49-51,54.
[4] 黄波,张先辉.基于RTMP协议的IPTV监测系统设计与实现[J].广播电视信息,2018(7) .
[5] 张宗飞.VB中屏幕共享系统的设计与实现[J].计算机系统应用,2008(4):83-86,111.
[6] 汪彦,黄雪华,涂立.一种改进的应用于机房教学的屏幕共享方案[J].计算机与现代化,2011(9):82-85.
【通联编辑:朱宝贵】