我正在尝试使用低延迟uinsg HTML5,vido.js和videojs-flash播放RTMP流。现在,我可以让流以 3-4 秒的延迟显示,但使用 ffplay 播放相同的流会产生亚秒级延迟。
查看较旧的videojs版本,似乎一些允许指定要传递给swf对象的flashvar的代码从未合并过。在较新的video.js版本中,可以使用videojs-flash插件播放flash视频,并且该插件似乎在播放器选项中支持flashVars,并且此变量将传递给swf对象。
有没有人使用过此功能,我如何为 videojs 对象提供 flashVars 选项。
这是我到目前为止尝试的代码:
var player = videojs('my-video', {
autoplay: true,
muted: true,
preload: "auto",
sources: [{
type: "rtmp/flv",
}],
flashVars: {
buffertime: 0
}
});
如果找到我自己的问题的答案,可以大大减少延迟。目前它不是很稳定,因为我有时会得到 ~1s 的延迟,但可以达到 3 秒。解决方案是使用修补的 swf,该 swf 将考虑缓冲选项。现在播放器初始化变为:
var player = videojs('my-video', {
techOrder: ['flash'],
autoplay: true,
sources: [{
type: "rtmp/flv",
}],
bufferTime: 0,
flash: {
swf: "js/video-js.swf",
flashVars: {
bufferTime: 0,
autoPlay: true,
bufferTimeMax: 0.25
}
}
});
video-js.swf 是从修补后的版本编译的
:https://github.com/sea-kg/video-js-swf.git
只需编译此版本并使用"swf:"闪存选项即可提供此 swf 的路径。
这大大减少了延迟,但根据我的经验,延迟可能因连接而异。