缺少 HLS 播放列表的 VideoJS 事件
VideoJS event for missing HLS PLaylist
如果我有一个非常愉快地播放 HLS 播放列表的 VideoJS 播放器,它突然消失了,它将永远重复加载该播放列表文件,并在控制台中打印:
VIDEOJS: WARN: Problem encountered with the current HLS playlist. Trying again since it is the final playlist.
通常我有一个事件处理程序,用于在您首次加载页面时没有可用的源,但我不确定如何在播放视频时监听源消失。有这方面的活动吗?
为什么不直接使用 HLS.JS 呢?对于每个浏览器,它都适用,但 MacOS 上的 Safari 和任何 iOS 设备除外。这些甚至不需要 HLS.JS,hls 可以在其中原生运行。
https://github.com/video-dev/hls.js/
我有一个脚本可以检测浏览器,然后决定加载哪个版本:使用 HLS.JS 或仅插入 m3u8 作为视频源。
注意: Hls.Js 很棒,背后有一个庞大的社区。它允许您将 HLS 播放列表放入大多数浏览器的本机播放器中。
除非你不能没有 VideoJs,否则请选择 Hls.Js。
我需要的触发器是 retryplaylist
,在 Coffeescript 中这样使用:
player.tech_.on("retryplaylist", ->
blah
)
如果有人感兴趣,这就是我正在使用的:
# Configure player
videojs("stream", {
controlBar: {
playToggle: false
}
hls: {
smoothQualityChange: true
}
}).ready(->
player = this
# Display a modal on error
player.on("error", ->
$('.vjs-modal-dialog-content').remove()
displayError()
)
requestStream = ->
FailCount = 0
# Check if the remote is live
# @formatter:off
$.ajax({
url: __HLS_URI__
# If so add the source to videojs
success: ->
$('.vjs-poster').removeClass('vjs-hidden')
$(".vjs-poster").css({'background-image': 'url("/branding/poster-online.png")'})
$(".vjs-big-play-button").show()
player.src([{src: __HLS_URI__, type: "application/x-mpegURL"}])
player.hlsQualitySelector()
#player.play()
player.volume(0.5)
player.tech_.on("retryplaylist", ->
if FailCount>=5
window.location.reload()
else
FailCount++
console.log(FailCount)
)
# If not display the error
error: ->
displayError()
setTimeout((-> requestStream()), 5000)
})
#@formatter:on
requestStream()
)
# Helper to display errors on the player
displayError = ->
$(".vjs-big-play-button").hide()
$('.vjs-controls-disabled').removeClass('vjs-controls-disabled')
$(".vjs-poster").css({'background-image': 'url("/branding/poster-offline.png")'})
$('.vjs-poster').removeClass('vjs-hidden')
我试图找到一种方法在 HLS 直播结束后重置 VideoJS,但最终我放弃了,而是强制重新加载页面。
如果我有一个非常愉快地播放 HLS 播放列表的 VideoJS 播放器,它突然消失了,它将永远重复加载该播放列表文件,并在控制台中打印:
VIDEOJS: WARN: Problem encountered with the current HLS playlist. Trying again since it is the final playlist.
通常我有一个事件处理程序,用于在您首次加载页面时没有可用的源,但我不确定如何在播放视频时监听源消失。有这方面的活动吗?
为什么不直接使用 HLS.JS 呢?对于每个浏览器,它都适用,但 MacOS 上的 Safari 和任何 iOS 设备除外。这些甚至不需要 HLS.JS,hls 可以在其中原生运行。
https://github.com/video-dev/hls.js/
我有一个脚本可以检测浏览器,然后决定加载哪个版本:使用 HLS.JS 或仅插入 m3u8 作为视频源。
注意: Hls.Js 很棒,背后有一个庞大的社区。它允许您将 HLS 播放列表放入大多数浏览器的本机播放器中。
除非你不能没有 VideoJs,否则请选择 Hls.Js。
我需要的触发器是 retryplaylist
,在 Coffeescript 中这样使用:
player.tech_.on("retryplaylist", ->
blah
)
如果有人感兴趣,这就是我正在使用的:
# Configure player
videojs("stream", {
controlBar: {
playToggle: false
}
hls: {
smoothQualityChange: true
}
}).ready(->
player = this
# Display a modal on error
player.on("error", ->
$('.vjs-modal-dialog-content').remove()
displayError()
)
requestStream = ->
FailCount = 0
# Check if the remote is live
# @formatter:off
$.ajax({
url: __HLS_URI__
# If so add the source to videojs
success: ->
$('.vjs-poster').removeClass('vjs-hidden')
$(".vjs-poster").css({'background-image': 'url("/branding/poster-online.png")'})
$(".vjs-big-play-button").show()
player.src([{src: __HLS_URI__, type: "application/x-mpegURL"}])
player.hlsQualitySelector()
#player.play()
player.volume(0.5)
player.tech_.on("retryplaylist", ->
if FailCount>=5
window.location.reload()
else
FailCount++
console.log(FailCount)
)
# If not display the error
error: ->
displayError()
setTimeout((-> requestStream()), 5000)
})
#@formatter:on
requestStream()
)
# Helper to display errors on the player
displayError = ->
$(".vjs-big-play-button").hide()
$('.vjs-controls-disabled').removeClass('vjs-controls-disabled')
$(".vjs-poster").css({'background-image': 'url("/branding/poster-offline.png")'})
$('.vjs-poster').removeClass('vjs-hidden')
我试图找到一种方法在 HLS 直播结束后重置 VideoJS,但最终我放弃了,而是强制重新加载页面。