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 个评论
要回复文章请先登录或注册
qjr
y***@163.com
王但是
1***@qq.com
1***@qq.com
1***@qq.com
天生DR (作者)
1***@qq.com
3***@qq.com
Tibbers