uni-app 新版本Video问题
uni-app 新版本Video问题
信息类别 | 详情 |
---|---|
开发环境 | Windows |
操作系统版本号 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.1.2 |
手机系统 | Android |
手机系统版本号 | Android 9.0 |
手机厂商 | 小米 |
手机机型 | 9 |
页面类型 | vue |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
产品分类:uniapp/App
操作步骤:
- NVUE 复制代码即可实现
预期结果:
- 正常播放
实际结果:
- 播放失败
bug描述:
<video src="http://yuledy.helanzuida.com/20210109/18004_b6d563c6/index.m3u8" controls :http-cache="true"></video>
<!-- m3u8 http-cache 开启 直接播放失败 -->
<video src="http://listen.92kk.com/%2F2020%2F%E8%BD%A6%E8%BD%BD%E8%A7%86%E9%A2%91%2F2020-08%2F2020-08-22%2F%5BMp4%5D%E5%AE%89%E9%9D%99-%E9%9B%AA%E5%A4%9C-%E8%BD%A6%E8%BD%BDDJ%E9%9F%B3%E4%B9%90%E7%B2%BE%E5%93%81%E7%BE%8E%E5%A5%B3%E5%A4%9C%E5%BA%97DJ%E8%A7%86%E9%A2%91%5B%E7%8B%AC%5D.mp4" controls :http-cache="true" codec="software" playStrategy="1"></video>
<!-- MP4 软解 software + play-strategy 1平滑播放模式 卡 PPT -->
playStrategy 1平滑播放模式 open sl解码音频 视频前两秒钟无声音 视频前两秒钟无声音 视频前两秒钟无声音 ,视频播放完毕会触发 error: "detail": "network error"
新增加的API (codec,http-cache,play-strategy)并不支持动态修改!需要提前知道视频解码方式(硬解/软解) + 播放策略(默认策略/平滑播放模式)
需求:
- video支持本地加密m3u8播放!
- video播放支持自定义Header(视频防盗链配置)
更多关于uni-app 新版本Video问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 新增加的API (codec,http-cache,play-strategy)并不支持动态修改!需要提前知道视频解码方式(硬解/软解) + 播放策略(默认策略/平滑播放模式)
是的,目前只支持静态配置。
2
video支持本地加密m3u8播放
目前还没支持,稍后会考虑支持
3 video播放支持自定义Header
下一个版本会支持 video 播放携带本地cookie 字段。 以便支持资源鉴权。
4
http cache只支持普通视频播放,不支持 m3u8
m3u8本身就是分片的。和普通视频的缓冲会冲突
5 关于 play-strategy 1平滑播放模式的问题。
play-strategy = 1 开启平滑模式,实际上是一个降级方案。(文档上描述不太对,我稍后调整一下)
你可以看一下更新记录中对应的ask地址。 他解决的问题是 一位开发者在 有限的带宽环境下 播放高比特率mp4视频的问题。导致卡顿进而音视频脱轨的问题。
付出的代价是: 限制了最大帧率25,开启了opensles(硬件音频,可能会有兼容性问题导致你说的开屏2s没声音,我这里没有复现),非流媒体协议开启流媒体缓存。
其实他并不能解决你 提升m3u8播放速度的问题。 你说的播放结束会抛出错误的问题 我不知道怎么观察。
总结一下解决方案:
1 你不要采用这个字段,他不能解决你的问题。我调整一下文档,更新描述
2 你留一下qq,在线沟通一下后续支持m3u8优化相关的需求
6 对于第五点的补充。 跟开发者沟通了一下。 目前解决方案如下:
1 play-strategy 新增字段属性3 下个版本生效。 支持m3u8加速
2 关于开发者反馈的失败情况下 事件响应异常的情况 暂时无法复现。
更多关于uni-app 新版本Video问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
大哥,最重要的东西没抓住:playStrategy 1平滑播放模式(会提升m3u8缓存播放能力) 但是 open sl解码音频 视频前两秒钟无声音 视频前两秒钟无声音 视频前两秒钟无声音 ,视频播放完毕会触发 error: “detail”: “network error”.(个人怀疑m3u8播放开始时由于open sl解码音频,导致视频已经开始播放后才调用音频解码,视频无法正常播放完毕)这是我提到的新BUG
回复 DCMarvel: 一条一条写的。 正在写这条。
回复 DCMarvel: 大哥。给点时间,每天要做的事情很多的。
回复 DCMarvel: 你把复现这个问题的 链接给我。 我测试一下。
回复 DCMarvel: 好 我试试
回复 DCloud_Android_DQQ: Android NVUE页面
回复 DCloud_Android_DQQ: 嗯,您辛苦,另外以后在更新API文档中是不是写清楚点,也不用在一个一个试了.如:http-cache(注:开启后不支持m3u8),另外如果支持不太友好是不是可以默认关闭(这无所谓…). 上边哪个音乐视频用 我的手机软解会卡成ppt…但是如果默认用硬解,文档中又提示(部分硬件可能存在兼容性问题).不支持动态切换,播放第三方视频就不知道用那种模式合适了.所以就很纠结了.video的情况太多了,需要顾及的面太广了
回复 DCMarvel: 我在上面回复你了。 文档 我现在调整一下 。 你留一下qq。
回复 DCMarvel: m3u8 开启 http-cache 没有做判断。稍后版本会修复
回复 DCloud_Android_DQQ: 平时不上QQ,您不如站内私信我都比qq及时
开工了吗?
此BUG还没复现吗
2021/2/25等待中…
好像自己回复自己帖子越多,处理权重就越低,帮你顶一下
权重无所谓,顶一下就会在问答首页了,总不会一直视而不见吧
回复 DCMarvel: 不是这样的,他们处理是按权重来的,权重高的优先,如果你的问题权重低,他们看到了也是视而不见的,如果说一天有上千个问题,他们依旧是按照原来的权重高低处理,如果今天处理不完明天可能又会增加新的权重,你的就一直会往后排,所以就导致有些问题好几年都没人处理。这也是为什么bug确认以后需要加分的原因
回复 突然好想你: BUG处理还要看排行的?真的这么奇葩吗…
回复 DCMarvel: 这并不奇葩啊,不这样每天都处理新的,没看到的怎么办,每天只处理首页好了,老需求没办法做了;就想你们公司给你需求一样,总有轻重缓急吧,不能给你一堆你就做那一堆,之前没完成的就不做了?
回复 突然好想你: 其实可以增加一个积分消耗机制,发帖人自定义积分多少用于体现权重
回复 MonikaChen:这不就是相当于插队吗?后面的问题只要积分设置得高永远在前面,等大家积分都没了,又回归这种状态了,治标不治本
回复 突然好想你: 嗯,也是.不过还是佩服视而不见的行为!
回复 DCMarvel: 不是视而不见 如楼上这个兄弟所说 工作也会有个优先级的排序 你这个部分问题属于新需求 肯定要走排期 而且我们也会酌情 看这个需求是否具有通用性和广泛性 决定他的优先级顺序
回复 天生DR: 我下边是写了需求,上边反馈的BUG是video 更新带来的新问题,也是需求行列吗…
回复 突然好想你: 那就付费付费吧,遵循经济学规律,官方也赚点钱
回复 MonikaChen: 官方早就开通了付费咨询啊,不顾感觉也不是太合适,毕竟有些bug是官方更新弄出来的,又不是用户捣鼓出来的,具体怎么做还是看官方自己的意思吧,毕竟是免费在用人家的产品,自然得按人家的规矩办事,只是希望能在处理问题这方面加快一些效率吧
APP安卓和苹果,http-cache开启没效果,是不是只针对nvue才有效果?
看看文档,前几天官方更新的文档.如果没更新 强制刷新一下
play-strategy = 3 试试
play-strategy = 3 后你那里还卡吗?
回复 makeit: 一样很卡,。,,浏览器访问应该提供了加速效果
针对您提到的uni-app Video组件问题,以下是简要分析:
- m3u8播放失败问题:
- 可能是HLS协议支持问题,Android原生VideoView对m3u8支持有限
- 建议尝试使用uni.createVideoContext控制播放
- 可测试其他m3u8链接确认是否源站问题
- MP4卡顿问题:
- 软解码性能较差,建议优先使用硬件解码
- playStrategy=1平滑模式会牺牲部分性能换取流畅度
- 前2秒无声音可能是音频解码初始化延迟
- 功能需求建议:
- 本地加密m3u8需要原生插件支持
- 自定义Header目前需通过原生插件实现
临时解决方案:
- 对于m3u8可尝试:
<video :src="videoUrl" controls autoplay></video>
// 或使用videoContext
this.videoCtx = uni.createVideoContext('myVideo')