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)
32 个评论
要回复文章请先登录或注册
天生DR (作者)
7***@qq.com
天生DR (作者)
天生DR (作者)
天生DR (作者)
9***@qq.com
一抱一个胖猪猪
7***@qq.com
天生DR (作者)
浙江小牛寻宝