天生DR
天生DR
  • 发布:2021-06-10 18:51
  • 更新:2024-09-24 16:25
  • 阅读:8379

video 组件 高阶晋级

分类:uni-app

video 组件 高阶晋级

前言

本文是为使用了uni-app 框架开发App时 使用video标签 但是播放部分视频有一定特殊需求时的解决方案。
如果现有功能已经满足日常开发,可以忽略本文。

IJKMediaFramework

  • 目前uni-app中 video的实现 是基于ijkplayer基础之上的二次封装, 框架已经设置了一些属性解决常见的问题,例如 seek不准确, http重定向跳转到rstp,https无法播放等问题。

通过 video 标签中的 advanced 可以实现对于一些高级属性的设置,下边是示例

    'format','codec','sws','player' 可以设置四种, 具体设置类型 通过文章所列或者 ijkplayer,ffmpeg 相关资料查询  

    <video :advanced= advanced> </video>  

    advanced = [  
        {  
            "key": "dns_cache_clear",  
            "value": 1,  
            "type": "format",  
        },  
        {  
            "key": "framedrop",  
            "value": 1,  
            "type": "player",  
        },  
        {  
            "key": "videotoolbox",  
            "value": 0,  
            "type": "player",  
        }  
    ]  

uni-app iOS端 video组件的设置

框架默认参数

Key 默认值 注释 所属类型
max-fps 30 最大fps player
framedrop 0 跳帧开关,如果cpu解码能力不足,可以设置成5,否则会引起音视频不同步,也可以通过设置它来跳帧达到倍速播放 player
video-pictq-size 3 暂无 player
videotoolbox 0 1开启 0关闭 硬解码(硬件解码CPU消耗低。软解,更稳定) player
videotoolbox-max-frame-width 960 指定最大宽度 player
enable-accurate-seek 1 某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少 player
auto_convert 0 自动转屏开关 fortmat
reconnect 1 重连次数 fortmat
timeout 30 1000 1000 (超时时间,timeout参数只对http设置有效。若果你用rtmp设置timeout,ijkplayer内部会忽略timeout参数。rtmp的timeout参数含义和http的不一样。) fortmat
user-agent Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/20) uni-app (具体值看真实设备的值) User-Agent fortmat
dns_cache_clear 1 清空DNS,有时因为在APP里面要播放多种类型的视频(如:MP4,直播,直播平台保存的视频,和其他http视频), 有时会造成因为DNS的问题而报10000问题的 fortmat

uni-app Android端 video组件的设置

框架默认参数

Key 默认值 注释 所属类型
max-fps 30 最大fps player
framedrop 5 跳帧开关,如果cpu解码能力不足,可以设置成5,否则会引起音视频不同步,也可以通过设置它来跳帧达到倍速播放 player
mediacodec 0 1开启 0关闭 硬解码(硬件解码更清晰。软解,更稳定) player
enable-accurate-seek 1 某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少 player
skip_loop_filter 0 环路滤波 0/8/16/24/32/48, 增强播放效率,其中48是指'AVDISCARD_ALL', 所有帧都不做环路滤波. codec
user-agent Mozilla/5.0 (Linux; Android 10; MXW-AN00 Build/HONORMXW-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 Html5Plus/1.0 (具体值看真实设备的值) User-Agent fortmat
dns_cache_clear 1 清空DNS,有时因为在APP里面要播放多种类型的视频(如:MP4,直播,直播平台保存的视频,和其他http视频), 有时会造成因为DNS的问题而报10000问题的 fortmat

高阶拓展参数

一些可能用到的参数

Key 可能设置的值 注释 所属类型
soundtouch 设置是否开启变调 1开启 0 不开启 player
skip_loop_filter 设置是否开启环路过滤,0开启,画面质量高,解码开销大,48关闭,画面质量差点,解码开销小 codec
analyzemaxduration 100L 设置播放前的最大探测时间 format
analyzeduration 设置播放前的探测时间 1,达到首屏秒开效果 format
probesize 1024*10 播放前的探测Size,默认是1M, 改小一点会出画面更快 format
flush_packets 1 每处理一个packet之后刷新io上下文 format
max-buffer-size 0 最大缓冲大小,单位kb player
packet-buffering 是否开启预缓冲,一般直播项目会开启,达到秒开的效果,不过带来了播放丢帧卡顿的体验 1开启 0 不开启 player
fflags fastseek 解决m3u8文件拖动问题 比如:一个3个多少小时的音频文件,开始播放几秒中,然后拖动到2小时左右的时间,要loading 10分钟 fortmat

还有一些更多的参数设置 大家可以参考 ffmpeg 和 一些网络文章

注意注意注意

ijkplayer 为开源项目,可以看得到源码,  
由于`iOS`和 `Android` 的差异性,部分属性可能只在一端生效,具体支持的参数,请查看 [ff_ffplay_options.h] (https://github.com/Bilibili/ijkplayer/blob/master/ijkmedia/ijkplayer/ff_ffplay_options.h)  
5 关注 分享
2***@qq.com 一抱一个胖猪猪 篮孓 1***@qq.com 易天

要回复文章请先登录注册

天生DR

天生DR (作者)

回复 Tibbers :
advanced参数肯定是有生效的 我们都测试过 文档上没有是因为这个属于附加功能 官方只是增加了设置项 具体效果需要开发者 自行查阅资料 或者对 ffmpeg 很熟悉才可以
2022-04-01 20:49
Tibbers

Tibbers

advanced参数都不生效,这个文档里也没看到advanced
https://www.html5plus.org/doc/zh_cn/video.html#plus.video.VideoPlayerStyles
2022-04-01 17:29
lihailan

lihailan

设置了analyzeduration 为1,打开怎么还是要转圈圈
2022-03-14 09:54
一抱一个胖猪猪

一抱一个胖猪猪

回复 天生DR :
你好管理,反馈的video组件bug地址:https://ask.dcloud.net.cn/question/138299
2022-01-15 23:02
一抱一个胖猪猪

一抱一个胖猪猪

回复 天生DR :
等一下提交个video的bug,然后把地址给你,你们修复下。此bug只在ios上是无效的
2022-01-15 22:39
一抱一个胖猪猪

一抱一个胖猪猪

回复 天生DR :
好的
2022-01-15 22:38
天生DR

天生DR (作者)

回复 一抱一个胖猪猪 :
videotoolbox 这个是是否硬解 具体效果要看你是什么设备 不同设备表现也不一样 跟硬件相关了
2022-01-15 11:20
天生DR

天生DR (作者)

回复 一抱一个胖猪猪 :
videotoolbox 这个是是否硬解 具体效果要看你是什么设备 不同设备表现也不一样 跟硬件相关了
2022-01-15 11:20
一抱一个胖猪猪

一抱一个胖猪猪

回复 天生DR :
最大宽度没有设置,但是设置了videotoolbox,这个是解码参数吧,有设置的
2022-01-14 20:41
一抱一个胖猪猪

一抱一个胖猪猪

回复 天生DR :
几乎都设置了,刚开始framedrop这个设置的0,播放视频,声音不卡,画面卡顿,像0.5倍速。不确定具体是不是framedrop这个参数,因为我设置的太多了。最后吧所有的参数都删除后,就恢复了正常。此问题只在iOS上
2022-01-13 22:04