关于我在uni-app练手中遇到的坑
创始人
2024-02-10 05:17:27
0

目录

页面层级结构的加载和回退

filePath编码

对象的深度克隆

弹幕的加载

​编辑 

uni-app内置浏览器加载视频失败

后台报错 java.io.IOException: 你的主机中的软件中止了一个已建立的连接

 安卓里遍历uni-list-item错误

 手机自带浏览器无法加载视频

乱码问题

video中initial-time失效

手动设置视频初始时间

video的@progress失效

视频播放结束后,不能直接设置历史记录为结束时间

mybatis中关联查询

代码


       

前几周一直在用uni-app练手,于是乎写了一个视频播放器,从一开始粗糙版,到加入了数据库后的简易版。

        其中记录一下坑。

        代码的话已经提交到github,可能后续还会维护下去,看自己有什么好的想法吧。

        

页面层级结构的加载和回退

如图所示,在在加载数据后,进入第二层,第三层目录后,如何回退到父级目录。

这里就考虑一个数据接口,栈,先进后出。

页面中定义一个parentDir: [],

filePath编码

如果是运行在安卓手机中当app,则window.encodeURI是无效的,所以需要使用

this.nowFilePath = encodeURIComponent(this.nowFilePath);

对象的深度克隆

将一个object对象push到栈中时,加入的仅仅是这个对象的引用,改变了对象引用,栈里面的指向也会改变,所以需要深度克隆。

弹幕的加载

在页面上可以看到danmuList是一个数组,从后台请求这个视频的弹幕信息,而如果没有这个v-if的话,弹幕是不会展示的。

因为页面video组件已经加载完成,此时即使加载了弹幕数据,也压根无用。

 所以才需要在获取数据后展示video组件,如此加载弹幕。

uni-app内置浏览器加载视频失败

官网有说明,所以如果是调试,可以运行到chrome等浏览器

后台报错 java.io.IOException: 你的主机中的软件中止了一个已建立的连接

        此问题尚未真正解决 

这种有两种情况,第一种是视频的编码不符合video的编码格式。

HTML

所以如果不符合上述三种格式的,就需要使用代码转变格式。

com.lw.familysystem.video.VideoUtils#encode

第二中情况是视频流的跨域问题,

com.lw.familysystem.video.VideoService#playVideo

直接在此方法中加入允许跨域请求,

response.addHeader("Access-Contro1-A11ow-0rigin","*");

后记:其实还是会经常出现这个问题,但是不影响播放。

 安卓里遍历uni-list-item错误

在chrome中上述代码没问题,但是运行到手机中,就会出现,

TypeError: Invalid attempt to destructure non-iterable instance.

In order to be iterable, non-array objects must have a [Symbol.iterator]() method. at view.umd.min.js:1

 手机自带浏览器无法加载视频

这个问题暂时还没解决,换了手机里的chrome浏览器后,访问地址能加载视频。 

乱码问题

路径变成了ascii码,统一编码。

其实最好路径不要用中文,就不会有乱码。

 上述使用的是tag  V0.0.2中代码遇到的坑。

video中initial-time失效

猜测应该是只有当video第一次初始化,然后加载视频时有用,而我获取视频是在onLoad中加载视频,而video组件出现是在onShow中。

onLoad中请求后台视频数据时,video可能已经在页面加载,而此时还没有设置url,导致视频会出现加载失败,此时initial-time自然无效。

当onLoad中请求了视频数据后,给video设置了url后,虽然能播放后台数据,但此时initial-time已经没有效果了。

经验证,上述猜测错误,真正原因是在playVideo方法中,将response的返回状态码设置为200,而不是206。

返回206是客户端表明自己只需要目标URL上的部分资源的时候返回的,比如video组件只需要先知道视频的长度,而不需要全部加载视频。

而200则让完全加载视频信息等。

//返回码需要为206,而不是200
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);

手动设置视频初始时间

不可能每次都调整initial-time,所以需要手动设置,就需要使用到uni.createVideoContext创建的对象了。

所以就需要用到 videoContext.seek()方法了,

getVideoHistoryM() {var param = {loginName: this.loginName,videoId: this.videos[this.nowPlayIndex].videoId}getVideoHistory(param).then(res => {if (res?.result_code == "0") {if (res.data) {var history = res.data;this.startTime = history.playTime;this.videoContext.seek(this.startTime); //跳转到指定秒		}}});
},

video的@progress失效

当视频播放完后,一轮循环已经结束,再自动从头开始播放第一集的时候,此时并不会再进入@progress中的方法,所以就需要在@loadedmetadata 中的方法里判断下。

loadedMetaData(e) {//视频加载完毕const {duration} = e.detail// 记录视频总时间this.duration = durationif(!this.autoPlaying){if(!this.firstVideo){//非第一个视频,自动播放this.play();}}this.videoContext.playbackRate(1.5);
},
onProgressVideo(e){const {buffered} = e.detail;console.log(buffered)if(buffered>4){//视频加载了百分之 就自动播放if(!this.firstVideo){//非第一个视频,自动播放this.play();}}
},

视频播放结束后,不能直接设置历史记录为结束时间

比如,有个视频,时长18秒,再timeUpdate方法中监测到播放结束时,需要保存历史记录,那么此时不能保存为18秒,否则,下一刻再次点击这个视频时,就自动定位到18秒,然后跳转到下一个视频了,就永远也看不了这个视频了。

//播放结束后保存历史记录

this.currentPlayTime = 0;

this.savePlayHistoryM()

所以直接将当前时间重置,那么下次就是重头开始播放了。

mybatis中关联查询

left join 了多个表,需要将连接表的内容放入组合的vo中。如下所示,返回的Vo中内联了两个vo。

@Data
public class VideoPlayHistoryVo extends VideoPlayHistory {private String createTimeFmt;private String updateTimeFmt;private VideoPhysicsInfoVo videoPhysicsInfoVo;private VideoInfoVo videoInfoVo;
}

在xml中也需要编写内联的,association的property值要和VideoPlayHistoryVo中的内联名字相同。

在页面上就如下这样使用,例子可以看mine.vue

        上述问题是 tag V0.0.3遇到的问题

代码

后端

前端

相关内容

热门资讯

汪国真散文 汪国真散文  汪国真散文《我喜欢出发》  凡是到达了的地方,都属于昨天。哪怕那山再青,那水再秀,那风...
摸泥鳅的散文 摸泥鳅的散文  “池塘的水满了,雨也停了,田边的稀泥里到处是泥鳅。天天我等你,等着你捉泥鳅……”清脆...
弹指间掩袖含泪散文 弹指间掩袖含泪散文  漫漫人生寻寻觅觅,悠悠岁月走走停停,何处林花谢春红,让我抨然心动。走过的轨迹,...
雪落关山的抒情散文 雪落关山的抒情散文  窗外哪一幅偌大的落雪图,我的思绪又回到了血染的关山,回到那山坳里银白色的小村·...
山泉水优美散文 山泉水优美散文  山泉水象“大珠小珠落玉盆”似的,叮当叮当地从山上落下来。山泉水落到山下的一个平台,...
年华似水逝水流年散文 年华似水逝水流年散文  古人早就明白时间的宝贵。一寸光阴一寸金,劝诫人们要好好的珍惜。因为时间在永不...
我恨自己散文 我恨自己散文  时光飞快流失着,自己的心情也随着时光的飞过,沉痛的感觉越来越深!我痛恨自己的性格,软...
小学生必背的经典美文 小学生必背的经典美文(通用35篇)  好散文是美文,好诗歌是美文,好小说是美文,好论文是美文,一条写...
散文分类 散文分类  在平凡的学习、工作、生活中,大家都知道散文吧?广义上的散文是指不追求押韵和句式工整的文章...
母亲的零散记忆散文 关于母亲的零散记忆散文  从母亲照片上看,我的脸型像极了我的母亲,方形微圆。不同的是,母亲是单眼皮,...
持守的散文 持守的散文  人作为有思想的能动的生命个体,原则便成为约束其行为的标尺和准绳,而每个自觉的人,在他的...
空山寂寂水流花开的散文 空山寂寂水流花开的散文  春节的天气暖和得像是阳春三月,这让走亲访友的人心情好不舒畅。初五那天,我们...
北岛,本无晴散文随笔 北岛,本无晴散文随笔  我在守望着你,你却在守望着孤独。  一瓶秋香里,玲珑字,花间诗,错落在了两岸...
淡淡的女子,淡淡的人生抒情散... 淡淡的女子,淡淡的人生抒情散文  无论在学习、工作或是生活中,大家一定都接触过散文吧?散文是抒发作文...
雨帆爱怜意散文 雨帆爱怜意散文  在超市购物时,每每见到冷冻柜中那小如手指的小鱼,常心生恻隐。随之,一段往事萦绕于怀...
十五的月亮十六圆散文 十五的月亮十六圆散文(精选9篇)  在日常学习、工作或生活中,大家都经常接触散文吧?散文是一种自由、...
夜太美散文 夜太美散文  寒冬的夜,是如此美丽,因为你在我心间。夜半无眠正好去看你的空间,习惯的脚步就这样走进了...
男人说的狠话句子精选427句 男人说的狠话句子 精选111句1. 当你学会放弃,你才可以承受一切的失望和谎言,我什么都可以不要了,...
提醒别人注意说话语气的句子精... 提醒别人注意说话语气的句子 精选32句1. 三月开始的天,雨不知疲倦的滴着,所有的欲望和幻想都被时间...
描写人物肖像句子精选347句 描写人物肖像句子 精选55句1. 但见他面皮微黄,一双小圆眼。豆虫眉,蒜头鼻二,薄片嘴,螳螂脖子,窄...