quasar-ui-qmediaplayer icon indicating copy to clipboard operation
quasar-ui-qmediaplayer copied to clipboard

Hls.js integration with underlying video element not working

Open FadhiliNjagi opened this issue 1 year ago • 0 comments

I'm having trouble integrating Hls.js with QMediaPlayer. I'm using Quasar v2 with webpack. When I do it with HTML video tag, it works:

<template>
  <q-page class="video-page">
    <div class="vp-container">
      <h5>Video test Page</h5>
      <video controls ref="mediaPlayer" class="vp-video" crossorigin="use-credentials">
      </video>
    </div>
  </q-page>
</template>

<script>
import { defineComponent, ref, onMounted, onBeforeUnmount } from 'vue'
import Hls from 'hls.js'

export default defineComponent({
  name: 'VideoPage',
  props: {
    url: {
      type: String,
      default: 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8'
    }
  },
  setup (props) {
    const mediaPlayer = ref(null)
    let player = null

    onMounted(() => {
      if (Hls.isSupported()) {
        player = new Hls()
        player.loadSource(props.url)
        console.log('Loaded')
        // console.log(mediaPlayer.value)
        player.attachMedia(mediaPlayer.value)
        player.on(Hls.Events.MANIFEST_PARSED, () => {
          mediaPlayer.value.play()
        })
      }

    onBeforeUnmount(() => {
      if (player) {
        player.destroy()
      }
    })

    return {
      mediaPlayer, player
    }
  }
})
</script>

But when I try with QMediaPlayer it doesn't work

<template>
  <q-page class="video-page">
    <div class="vp-container">
      <h5>Video test Page</h5>
      <q-media-player ref="QMediaPlayer" class="vp-video" crossorigin="use-credentials">
      </q-media-player>
    </div>
  </q-page>
</template>

<script>
import { defineComponent, ref, onMounted, onBeforeUnmount } from 'vue'
import Hls from 'hls.js'

export default defineComponent({
  name: 'VideoPage',
  props: {
    url: {
      type: String,
      default: 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8'
    }
  },
  setup (props) {
    const QMediaPlayer = ref(null)
    let player = null

    onMounted(() => {
      if (Hls.isSupported()) {
        player = new Hls()
        player.loadSource(props.url)
        console.log('Loaded')
        // console.log(QMediaPlayer.value.$media)
        player.attachMedia(QMediaPlayer.value.$media)
        player.on(Hls.Events.MANIFEST_PARSED, () => {
          QMediaPlayer.value.play()
        })
      }
    })

    onBeforeUnmount(() => {
      if (player) {
        player.destroy()
      }
    })

    return {
      player, QMediaPlayer
    }
  }
})
</script>

FadhiliNjagi avatar Jun 13 '23 08:06 FadhiliNjagi