小组头脑风暴了几个idea,最终经过投票,在幽灵般的第五票下决定了我们的项目主题:NEU-TV Player
。项目将在我们已有的视频播放器经验上进行开发,并添加一些有趣的功能。
项目描述
描述
一个基于东北大学IPV6视频直播源的弹幕视频播放器。
功能
观看节目
涵盖中央、地方各大卫视频道,内容覆盖电影、音乐、体育、卡通应有尽有。只要连接校园网,打开本应用,在电视墙内选择你中意的频道,轻轻一点尽享缤纷精彩。
频道搜索
频道太多眼花缭乱找不到想要的那一个?有想看的节目却不知道是在哪个频道?想回看某部电影却忘了之前是在什么时候播出?只要点击搜索栏,输入你想看的频道或节目名称,我们为你锁定它!
弹幕吐槽
快乐分享给他人会加倍快乐,那么和别人一起吐槽就更是爽翻天啦。不管是背景科普还是高能预警,通过弹幕分享你的观看体验,即使是一个人也能享受大家一起看电视的快乐!
收藏回看
最近在追某项比赛,然而每次都要搜索体育频道很麻烦呐!不要急,收藏这个频道,让你直接追上比赛热点。
最近在追某部剧,然鹅某一天学业繁忙漏看了!不要方,点开节目单回看即可,最长支持7天内的视频回看哟,可以养肥后周末一口气追更。
特色
免流量
只要连接校园网,不登录账号也可直接观看视频。追剧看球再也不怕流量不够了!校园网完美覆盖,走到哪里看到哪里。
无广告
超清流畅无码节目源点开即看,没有烦人的弹窗广告,也没有煎熬的等待90s,毕竟你的时间,非常宝贵。
可互动
通过弹幕和小伙伴分享自己的观影体验,吐槽视频的各种梗,你的弹幕可能比视频更加好玩!
可补漏
收藏你喜欢的频道,免去搜索的麻烦。回看一周内的视频,错过直播也不怕!
项目设计
主界面
上方是标签页,通过标签页来对不同类别频道进行分类展示。标签页右侧是一个小的搜索栏。标签页下是页面主体,通过照片墙的方式来展示该类别的各个频道。点击照片即可进入对应频道观看视频。
搜索页
通过点击主页面的搜索栏可以转到搜索功能,动画是搜索栏向左延长横跨整个页面,上方的标签页消失,下方照片墙展示搜索结果。
播放页
播放页面主要分为两部分,左侧为节目单,右侧为播放器。左侧,通过标签页展示周一到周日七天的节目单,对应日期的节目单通过垂直方向的列表显示,点击某一节目即可在播放器中回看该节目。
右侧,播放器类似于普通播放器,有播放/暂停按钮,进度条,音量调整,全屏按钮等。播放器下方是弹幕功能区。主要有一个文本编辑框和发送按钮构成 。文本框内输入文字,并选择不同的弹幕格式,然后点击发送按钮即可发送弹幕。
市场调查
小方对三位小伙伴进行了采访。先通过视频介绍我们的App,然后提问一些相关问题来帮助我们进行调整,最后将视频剪辑打码发布。
一个制作精良超级棒的视频
但是分析采访内容,大家对我们的鼓励支持远远大于批评和建议,我们自己又深刻反思分析了一下,提出如下改进:
搜索页面改进
搜索功能应当细化到具体节目才更有意义,但是照片墙只能展示到频道。所以对之前通过照片墙展示搜索结果的方式进行改进。点击搜索按钮后跳至新的页面,通过列表展示搜索结果。
播放控制改进
在播放器上,因为新加了弹幕功能,所以相应的也要加上关闭弹幕的功能。需要重写控制器。
技术分析
在确定设计之后,代锟dalao根据设计图与讨论的功能,对每个页面可能用到的技术及实现方法进行了分析。
主页面
标签页
不得不说,我最喜欢的浏览器是firefox和chrome,尤其是chrome的标签页的设计实在是太讨喜了,一点也不拖泥带水。然而,我google了半天,没有找到等腰梯形可重叠标签页的uwp现有的成熟实现方案。捉急之下我询问了老师,
然后找到了类似的解决方案。
大体的解决方案是这样的:
用一个stackpanel做模板?大概是这个意思,把它水平放过来
增加style
用一个水平方向排列的ListBox来解决标签页的问题,然而,仅仅拥有标签页是不够的
然而,这并不能解决这个问题
没错,根本无法实现这种边的交替效果,而且也不具有chrome的那种随着标签页增加而标签缩短的效果。
好菜啊,从没有学过uwp的我,居然要定制UI耶QAQ。
那算了,实际一点,先使用edge和firefox那种扁平化的风格堆叠吧,那个稍微简单,而且我们先不考虑标签页增加而标签缩短的问题。
搜索栏
这个功能可以使用AutoSuggestBox来实现
basic code:
|
|
官方demo :
这三个函数使用来分别监听前端搜索字体改变,搜索请求提交,给出建议等事件的处理函数
前端demo:
其中,PlaceholderText代表默认的占用字符串
Icon用的微软官方自带的图标
TextChanged=”AutoSuggestBox_TextChanged”
QuerySubmitted=”AutoSuggestBox_QuerySubmitted”
SuggestionChosen=”AutoSuggestBox_SuggestionChosen”
这三条对应后端的三个句柄(handle),用来处理相应的事件demo(but),原本在我们组dalao的设定中要点击搜索栏的时候搜索烂要有一个平滑延长的动画,然后标签页消失,最后过度到页面二的画面。我…..被水淹没不知所措。
后来了解到了一种解决方案,就是用StoryBoard做动画
具体的方法还没有做出来,但是还可以参考其他方案
https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.animation.storyboard
basic demo
|
|
这种控件细究起来还是有很多拓展性的
先上官方demo:
这个动画一共有四个部分,创建的时候也会有动画
这个扩展性非常强,每一个事件发生都可以调用相对应的story board的产生的animation
当我们设定好动画之后,就可以体验到那种顺滑的感觉
搜索页面
搜索栏
这个我之前已经提到过了,这里不再细讲
节目缩略图
这个图片来源主要来自于后端提供,简单来说,其实就是Image这个博客就有一个很好的demo来展示如何显示出一个图片墙。
不过他是用的某种选择文件夹的方式,我们改改也就可以用了,用服务器的某个文件夹这样?
效果图
播放页面
回看标签
这个之前已经讲过,定制过的listbox就是解决方案,只不过把水平方向换成垂直方向
当然,如果可以我还是想弄成等腰梯形(
回看节目栏
StackPanel就可以搞定,当然还需要定制一下ui,但是这个回看栏的翻页方式,目前我们还没有决定,是继续沿用纵向滚动的方式来加载往期节目(当然,只是滚动太low了,如果是我我也许会考虑使用异步加载来增加用户体验,用动画来掩盖加载慢的事实,用来让用户产生好流畅好惊艳的错觉,就像苹果公司经常干的。。。。。辱果了,异教徒!处死!)
还可以在stackpanel最后加入两个按钮,用来横向翻页。。。这个也挺简单的,stackpanel套两个水平的button,当然button的图案上要使用箭头作为图标,具体怎么加图标嘛
https://stackoverflow.com/questions/41191758/uwp-xaml-how-to-display-a-button-with-icon-and-text-in-it
这个老哥的解释和代码我们可以看看
这样可以让button上面有多重存在了
然后像这样设置一下icon就好了,icon的来源嘛
百度呀,谷歌呀,一大堆
iconfinder
https://www.iconfinder.com/easy icon
https://www.easyicon.net/
p.s. 补充,这里回看节目单的效果个人认为也可以做一个ListView的列表滑动特效,不考虑加载速度etc.就是觉得这样的动态效果比较活泼。实现可以参照一篇博客。
弹幕/评论区
这种很简单的文本堆叠区域用stack panel + text block很容易实现
弹幕/评论输入栏
TextBox就可以了,提交给后端,后端存到相对应的数据库
弹幕/评论发送按钮
一个button就可以了,设置一下onclick,上面的文本和图标已经提到过了
视频播放器
|
|
之前已经写过类似的小作业了,很简单的调用一下api就好了
具体的代码可以看一下我的小作业
https://github.com/HallWoodZhang/SimpleMediaPlayer_UWP
注释
https://blog.csdn.net/hall_wood/article/details/79788564
(扩展)弹幕显示层
陷入江局.jpg
这个应该是最难的部分了。。。
这个问题的解决方案,应该是现有的,首先,我们应该明确一个问题,弹幕是不是可以实时更新?
如果可以实时更新,就像挂鱼直播那样的(呸),或者youtube那样的评论浮现方式,都不太好实现,可能涉及到一些websocket的实现(todo: extention # 1)
- 那么,有没有一种方法可以偷懒呢?
干脆就不要实时更新弹幕了,那这就好解决了,每次打开视频,就加载某个danmaku(b站确实就叫这个)文件,然后用某种形式显示在媒体播放器上,每次有人发弹幕,就先存起来,然后刷新页面就可以看到更新的danmaku了
以前我用you-get爬某个大型同性交友网站视频的时候,爬到的弹幕库文件都是xml格式的,我们可以学习一个,约定好储存格式,能够适用于校园网用户规模的用户访问就行了
储存和发送的方法定好了,我们该如何显示弹幕,就是之后需要讨论的问题了,近年来有许多现成的实现代码,我们可以考虑参考一下他们的经验,然后自己改进一下
https://github.com/SkylarkWorkshop/SkylarkWsp.DanmakuEngine
ORZ已经有大佬实现了uwp弹幕库的引擎了,惊了!
看看接口学习一个,看看自己是否能DIY一下
真的是大佬吃肉,菜鸡喝汤就能够不饿死的时代啊,感谢上帝赐我大佬
目前我们还没有完全确定是否要加弹幕,毕竟工作量不小,但是网上(某hub)还是有实现弹幕视频网站的实例的
我们可以看看别人是怎么实现弹幕图层的
https://github.com/DaweiX/bilibili
这位仁兄把一个空间上的grid分成了10行用来显示弹幕
这个是这位仁兄的后端代码,可以说是十分规整,解决了我们如何显示弹幕在某一控件上的问题
那么问题来了,我们如何把这个控件和微软自带的媒体播放器接合在一起呢?
这需要我们进一步讨论解决方案,是采用bilibili uwp端的代码改装呢,还是使用现有的弹幕引擎,这仍然待定
毕竟,我们有可能压根就不实现这个功能。。。。
总结
只做了一点微小的工作很惭愧。队里氛围很好哇,dalao们都非常可爱。只是一讨论就会给自己不断挖坑,目前新增一坑缓存视频
功能。
软件工程还是很重要的,避免疯狂堆加功能,开发模型有利于把握开发进度。还是要学习一个。