VideoJS событие для отсутствующего HLS PLaylist - PullRequest
0 голосов
/ 25 февраля 2019

Если у меня достаточно хорошо проигрывается проигрыватель VideoJS, воспроизводящий список воспроизведения HLS, который внезапно исчезает, он будет многократно перезагружать этот файл списка воспроизведения на вечность, и в консоли он будет печатать:

VIDEOJS: WARN: Problem encountered with the current HLS playlist. Trying again since it is the final playlist.

Обычно у меня естьобработчик событий, когда при первой загрузке страницы источник недоступен, но я не уверен, как прослушать источник, исчезающий во время воспроизведения видео.Есть ли событие для этого?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Мне нужен был триггер 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')

Я пытался найти способ перезагрузить VideoJS после завершения прямой трансляции HLS, но в итоге я сдался и вместо этого просто принудительно перезагрузил страницу.

0 голосов
/ 26 февраля 2019

Почему бы просто не использовать HLS.JS?Это работает для любого браузера, кроме Safari на MacOS и любом устройстве iOS.Тем, кто даже не нуждается в HLS.JS, hls работает в них изначально.

https://github.com/video-dev/hls.js/

У меня есть скрипт, который обнаруживает браузер и затем решает, какую версию загрузить: с HLS.JS или просто вставьте m3u8 в качестве источника видео.

Примечание: Hls.Js потрясающе, и за ним стоит большое сообщество.Это позволяет вам помещать списки воспроизведения HLS в собственный проигрыватель для большинства браузеров.

Если вы не можете жить без VideoJs, переходите на Hls.Js.

...