带视频.js的低延迟 RTMP 播放



我正在尝试使用低延迟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 的路径。

这大大减少了延迟,但根据我的经验,延迟可能因连接而异。

最新更新