h5与原生的大文件交互解决策略

h5与原生的大文件交互解决策略,第1张

最近项目有个新的需求,就是社区要实现本地的视频录制,预览,上传然后社区播放的功能,由于之前项目重构的时候,为了节省时间 整个社区的功能都交由h5开发,现在要添加本地视频,然后预览播放有两种实现方式:

我个人是倾向于第一种实现方式的,因为h5本身存在许多兼容性问题,再加上Android本身被各个国产厂商魔改,而且也有h5也有性能问题,h5播放视频也会有卡顿,全屏,手机硬件交互等等问题,总之我是很不推荐第二种方案的。但但但是呢,我们的产品说微博,微信h5播放视频不是挺好的么,视频播放那么流畅,也没有什么卡顿,兼容性问题呢。这我还能说什么呢,产品都坚持了,而且两周一个迭代周期也不允许我有什么可多说的了,只好按照产品的意愿做了撒,况且视频播放器那一套流程,各种状态的控制也挺复杂的,这些问题都交由h5开发的同学去考虑吧。

在确定了由h5进行视频的展示,预览,播放后,就开始寻找我们如何把视频数据传递给h5,按照项目里面已有的h5与原生的交互方案,使用JSBridge进行数据交互,但是数据有大小限制,视频动不动就几十M,即使将视频压缩,也还是不能完全保证能够把数据传递过去;然后就是使用webview的 input_file 机制,调起系统的文件选择器,选择文件,但是缺点是每次只能选择一个文件,而且界面UI不能自定义,这个方案也被放弃了;然后又尝试了把文件转化为二进制流传递给h5,但是发现h5根本无法识别,这种方案又失败了;最后在网上找到一种似乎可行的方案,那就是在本地启动一个本地服务器,然后定义一个文件请求接口,h5调起原生的视频选择控件选择一个视频后,我们把文件路径和本地服务器地址传给h5,然后h5点击预览时就通过这个接口把文件路径传给我,本地服务器在收到请求后,根据文件路径找到文件,然后把文件流返给h5,h5在拿到文件流后进行视频的播放。这种方案看来可行,而且也有成功的案例,比如局域网投屏和文件传输都是用的这种方案。

在确定了使用本地服务器实现文件传输方案后,就要着手实现了。由于之前没有做过而且项目时间比较紧,就在全球最大的同性交友网站上找寻找看有没有比较优秀的开源库,最后找到了几个比较好的三方库,经过比较选择了 AndServer ,根据说明文档就开始开发。首先,通过gradle方式引进项目

然后对项目进行简单的封装,也方便后续进行方案的替换

先实现一个Service,对服务进行启动和停止的控制

Service静态注册

NetUtils是一个工具类,主要是获取本地的IP地址

这里说一下我为什么要绑定127001的本地地址,因为我们项目中有缓存机制,选择的视频在切换网络过后还要求能够预览,如果绑定动态分配的ip地址,那么在切换网络过后,可能会造成ip地址发生变化,之前h5选择的资源文件会无法预览,如果我们绑定127001,无论是切换网络还是完全关闭网络,都可以访问到之前选择的文件资源(只要本地文件没有删除),并且只有在本应用内才能够访问到,安全性提高。

接下来就是ServerManager,AndServer的全局控制类

本地服务状态监听接口类定义

最后是文件请求Controler,处理文件请求响应

这里需要注意的一点是,如果你的文件路名含有&特殊字符,那么fileId请求参数就会被自动截断。遇到这种情况,一般有两种处理方式,第一种是使用post请求,把参数放在body中;第二种方式是我们在把文件路径传递给h5之前,我们先进行编码,将特殊字符替换掉,然后我们在收到请求后,去寻找本地文件之前对编码的路径进行还原

最后再对启动入口进行一次封装,对外提供启动服务的入口

然后在你需要使用服务之前,调用initWebServer()启动服务就可以了,需要注意一点的就是,你可能需要全局监听网络变化,网络变化后,你需要重启一次服务才能够访问到资源

视频聊天软件是非常受人欢迎的软件,也是开发起来工序十分复杂的软件,视频聊天软件开发中常常会遇到这样那样的问题,以下是小编整理的十五个常见小问题,不知大家是否也会遇到呢,如果你也会遇到类似问题的话,欢迎和小编进行讨论哦!
1、 服务器该怎么配置
在我的视频聊天软件开发生涯中,曾被无数次问到这个问题,很多人希望我能给她一个明确的性价比高且固定的解释,最好这个配置方案可以用一辈子。比如:2核服务器即可,每月五十元,再过十年也不需要更换……这当然是不可能的。
正经的回答是:视频聊天软件开发完以后,在初期测试阶段及刚开始运营的阶段,由于用户量低,只要普通配置即可,后期再随着用户量的增加,逐渐升级配置。
"普通配置"是指什么呢?假设我们最开始,平台的用户只有2000人,那我们用个8核16g内存的服务器,每月20m的带宽也就差不多了。当然这个配置是要不断升级的,等你平台用户超100万的时候,配置自然也会随之升级。
2、 美颜SDK如何做到离线使用?
视频聊天软件开发中,不可避免的要使用到美颜SDK,有些人希望,这些美颜特效,是可以做到离线使用的(比如在视频聊天软件的动态发布功能中有短视频发布的功能,如果用户希望能够在没网的情况下拍摄一个短视频等有网络的时候发布,这时就会用到离线的美颜),这个要求是可以实现的,只是要做一个key,并且在每次SDK更新时都要重新打包更新这个Key,只是稍微麻烦一点而已。
3、 播放端发生dns劫持怎么办?
有时候,一些黑客会将黑手下到小直播平台上,试图对用户播放器进行dns劫持,以实现自己的目的,中招的用户在打开被劫持的播放器时,页面会跳转到黑客想让他们看到的页面上,如此一样来,必然会导致百度及其他搜索引擎对平台站点的降权,同时也会导致平台用户的流失。
当管理员被用户反映该问题时,只需打开域名注册商网站,找到域名的选项,修改DNS即可。通常,视频聊天网站容易遇到这种事情,而视频聊天软件开发中极少遇到。
4、 视频聊天间的小游戏是原生开发的吗?
通常来说,我们会比较推崇原生开发的软件,因为用原生语言进行视频聊天软件开发,最终效果会比混合开发和H5开发的效果要好,但有一个地方不是这样的,那就是聊天室小游戏,这些小游戏通常使用H5页面制成,在这里,H5页面在流畅性上的表现更好。
更多与视频聊天软件开发行业相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
文章由驱动号作者:云豹直播系统 原创,转载请注明出处

上传h5视频前先进行压缩是为了减少视频文件的大小,从而减少上传和下载的时间和带宽消耗。同时,较小的文件大小也有助于提高视频的加载速度和用户体验。
在进行视频压缩时,需要注意以下几点:
1 压缩算法的选择:不同的压缩算法对不同类型的视频有不同的效果,需要根据实际情况选择合适的压缩算法。
2 压缩比例的控制:过度压缩会导致视频质量的下降,因此需要根据实际情况控制压缩比例。
3 分辨率的调整:较高的分辨率会导致文件大小增加,因此可以考虑降低分辨率以减小文件大小。
总之,进行视频压缩可以提高视频加载速度和用户体验,但需要在保证视频质量的前提下进行。

活体实名认证,需要移动端H5上传视频,需求是只调取摄像头、文件格式为mp4格式

这个地方有个问题,iOS摄像头拍出来的视频是mov格式,前端很难转成MP4,可以让后端Java实现

HTML5是前端技术,并不影响网站的后台功能,亲放心,做H5响应式网站,也可以在后台上传视频并在前端播放的。亲可以百度搜下我们做的家来福这个网站,就是H5响应式,并且有视频播放功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13376409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存