研究生的第一个假期作业终于在今天结束了。

寒假作业评比一共三轮,一共7个组,我们拿到了第一名,小组奖金900元

虽然金额不大,也算是没有辜负我们组所有人这么长时间花费的努力。

所以,简单记录一下这个寒假的工作吧~

接收到任务

1月10号学校放假,那时候新型冠状病毒还并不是一个新闻。我以为这又是一个枯燥的寒假。

本来我们的寒假期间是1月10号~2月5号(正月十二)

所以虽然我们腊月都感到截止日期的逐渐逼近,但我们还都是心照不宣的不讨论寒假作业这件事情。

到了正月初四,组长终于开始意识到“问题很大”。于是组长贴心的下午两点叫我们起床,开工。

那个时候虽然只是听说疫情挺严重,学校的通知也只是正月15之前禁止到校,但谁也不知道疫情竟然已经如此严重了,延迟开学居然延迟3月份还未能开学。

15833222376866.jpg

15833215732722.jpg
15833215732722.jpg
15833215911232.jpg
15833215911232.jpg
15833216055634.jpg
15833216055634.jpg

1月28号,正月初四,如果按照既定的时间截止的话,时间已经很紧急了,但是我丝毫没有开始写代码的欲望,甚至还有一种莫名的自信。

但是组长的任务安排也都是有更近的截止时间,所以每天下午3点左右简直就是灵魂拷问时间啊

15833233993798.jpg

2月4号之后,公司那边要求2月7号提供项目目前的进度报告:

15835723889295.jpg

所以我们必须在2月6号左右就得完成一个大概的初始版本。也就是至少客户端可以直播对话。


需要认真起来了

然后这个时候,我对整个项目的流程都不是很清楚,拉流推流啥意思。recorder、grabber是啥。player、client、capture关系又是什么,我真的不太清楚。

关于我们这次视频会议,公司之前在直播这方面有所研究,一直开发维护theia项目,这个项目的功能就是主播直播,观众观看、发弹幕、连线之类的。

15833241762834.jpg

不管怎样,到了2月7号晚上我们基本有一个可以用的版本了。

15833245673827.jpg
界面啥的基本都是沿用theia项目,我们为了简化流程,客户端拉流的只拉了一个多个用户的混合流。

就这样有一周暂时没怎么写寒假作业,2月15号我觉得学一下javafx,重新写一下客户端这边界面,现在的界面颇有一股复古的气息。


界面重构以及流程梳理

本科的时候用netbeans写过java的桌面端程序,netbeans是可以直接拖控件就创建好界面的。现在使用Scala+javafx,于是学习了screnbuilder的用法还有jxml的用法,以及在网上找到了一个Scala+javafx的helloworld demo。

15833262158328.jpg

到了19号我基本把界面重构出来,也把整个客户端的流程重新设计了一下,整个client模块我基本是重新写了一遍。

到了2月25号的时候,对照寒假作业的要求,发现我们还有一些功能没有完成:

15833266198543.jpg

这几个功能让整个会议的功能变得复杂了很多。

除此之外,之前client只拉一个混合后的流的做法虽然简单,但是问题是显而易见的,延迟太高,5、6s左右,而且用户自身的画面和声音在混合流中,都有延迟,就很奇怪。

所以,最后我们还是决定客户端拉多个用户的流,这样问题是增加了客户端这边的内存开销,但是效果是延迟更低,会议效果会更好。

不仅如此,在最后的几天根据发言人、支持人身份对客户端的画布进行动态分配。

写代码是一回事,等真正一起联调测试的时候,bug就是一个个的浮现水面了。


准备最后的评选
2月28号,我们开始了第一次测试,当时由于我开了全局代理,导致 new Image(url) 这个地方无法对图片进行加载,以至于我一打开会议界面就卡死了。所以第一次测试只有我们组的另外两个人。

当时测试问题还比较少。到了29号晚上3个人测试,问题就变得特别多,不仅客户端这边,后台那边对ws消息的处理也有一些问题。

3月1号下午我们又开始了测试,这才基本没什么影响使用的大功能了。

3月2号开始了第一轮评比,7进3,我们录制一个4~5分钟视频发到视频网站上,然后研二的学长学姐们评比
3月4号上午开始第二轮,3进2,同样是录制一个1~2分钟的视频发到视频网站上,然后参赛其他组评比
3月4号下午开始进行第三轮,2进1,是参赛其他组直接观看web端的录像(混流后的)进行评比。

由于我们客户端界面好看,第二轮我们录制的视频还特意做了一个小剧本,配上朱一旦的「完美搭档」的bgm,第三轮我们web查看的录像的混流效果很好,延迟较低,而且音画基本同步。

所以最后,我们拿到了第一名。

从一开始我们感觉好像来不及,到最后我们每个人都是朝着第三轮的目标开始完善自己的部分。

也算是没有辜负我们的努力吧~

最后的完成的界面:

IMG_1699.jpg

同时还有web端可以查看和管理录像。

相关技术和工具:

  • scala
  • javafx
  • srs 流服务器
  • ffmepeg

项目地址:https://github.com/HiddenTrackMJ/geek

有兴趣欢迎star,fork~

最后修改:2020 年 06 月 16 日
喜欢我的文章吗?
别忘了点赞或赞赏,让我知道创作的路上有你陪伴。