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

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 (作者)

回复 7***@qq.com :
可以提供一个完整的配置调试代码么,能够很明确修改了高级参数是有作用的 这个目前没法提供 毕竟也是调用IJK的接口 IJK->FFmpeg 这代码量太大了 而且音视频相关参数有太多 专业性强 我们能力也有限 但是像这个设置videotoolbox-max-frame-width 时 videotoolbox是否开启?
2022-01-13 16:55
7***@qq.com

7***@qq.com

回复 天生DR :
比如我设置videotoolbox-max-frame-width,为360或者 720 或者 480 都没有效果,不清楚这么设置有没有用,也不清楚是不是书写错误,可以提供一个完整的配置调试代码么,能够很明确修改了高级参数是有作用的
2022-01-13 15:22
天生DR

天生DR (作者)

回复 9***@qq.com :
App 视频封面 跟这个显示库 无关 视频封面的地址发一下 看看
2022-01-13 10:44
天生DR

天生DR (作者)

回复 一抱一个胖猪猪 :
是设置了哪个参数?
2022-01-13 10:44
天生DR

天生DR (作者)

回复 7***@qq.com :
哪个没生效?
2022-01-13 10:43
9***@qq.com

9***@qq.com

APP视频封面不显示的问题有解决的吗?
2022-01-13 08:26
一抱一个胖猪猪

一抱一个胖猪猪

设置后,很卡顿
2022-01-13 08:10
7***@qq.com

7***@qq.com

advanced这个参数不管设置哪个参数都感觉不到任何效果,这个要怎么设置才行呢,我是按照<video :advanced=“advanced”> </video> 在data 里边配置的数据
advanced: [
{
"key": "dns_cache_clear",
"value": 1,
"type": "format",
},
{
"key": "framedrop",
"value": 1,
"type": "player",
},
{
"key": "videotoolbox-max-frame-width",
"value": '240',
"type": "player",
},
{
"key": "videotoolbox",
"value": 1,
"type": "player",
},
{
"key": "max-fps",
"value": 10,
"type": "player",
},
{
"key": "auto_convert",
"value": 0,
"type": "fortmat",
},
{
"key": "timeout",
"value": 10,
"type": "fortmat",
},
{
"key": "skip_loop_filter",
"value": 48,
"type": "codec",
},
{
"key": "fflags",
"value": 'fastseek',
"type": "fortmat",
},
{
"key": "safe",
"value": 0,
"type": "fortmat",
},
{
"key": "analyzeduration",
"value": 1,
"type": "fortmat",
},
{
"key": "probesize",
"value": 1024 * 5,
"type": "fortmat",
},
{
"key": "http-cache",
"value": true,
"type": "fortmat",
},
{
"key": "start-on-prepared",
"value": true,
"type": "player",
},
{
"key": "max_cached_duration",
"value": 100000,
"type": "player",
},
]
2022-01-12 17:20
天生DR

天生DR (作者)

回复 浙江小牛寻宝 :
这个可能涉及到 ffmpeg 的相关知识 可能要自己去编译一下ffmpeg 和 ijkplayer 的库
2021-11-12 15:23
浙江小牛寻宝

浙江小牛寻宝

uniapp在电视机上播放流媒体rtmp/flv等格式加载出来很慢,有的一直加载不出来,网络良好。有没有属性设置来解决
2021-11-12 15:04