plyr - 使用 .m3u8 文件中的 HLS 将质量级别设置为 Plyr 播放器
问题描述
我在一个角度组件中使用 Plyr 播放器和 HLS 实现,我做了下面帖子中提到的所有设置
尽管如此,我还是无法在 UI 中获得质量设置选项。单击齿轮图标后,仅显示 8 个选项的速度选项(0.75 到 4 )。对于 .m3u8 文件,即使我将质量级别设置为播放器质量选项,它也不会在 UI 中显示。
在控制台中,从 player.config.speed 属性中,我可以找到播放器 UI 中显示的速度选项,但 player.config.quality 显示了一些构建值,例如 { default: 576, options: [4320, 2880, 2160 , 1440, 1080, 720, 576, 480, 360, 240] } 与 plyr README.md 文件相同
我试图从 Hls.Event.Manifest.Parsed 事件中设置质量级别。
有人知道如何设置从 .m3u8 文件到 Plyr 播放器的质量级别吗?请帮忙
解决方案
这是我的第一篇 stackoverflow 帖子。抱歉,我不知道 Angular,但我是用 vue 创建的。我对 codepen 片段进行了一些修改,它对我有用。
<template>
<video ref="video" controls crossorigin playsinline>
<source
ref="source"
type="application/x-mpegURL"
src="https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8"
/>
</video>
</template>
<script>
import Hls from 'hls.js'
import Plyr from 'plyr'
import 'vue-plyr/dist/vue-plyr.css'
export default {
mounted() {
const video = this.$refs.video
const source = this.$refs.source.src
const defaultOptions = {}
if (!Hls.isSupported()) {
video.src = source
} else {
const hls = new Hls()
hls.loadSource(source)
hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) {
const availableQualities = hls.levels.map((l) => l.height)
defaultOptions.quality = {
default: availableQualities[0],
options: availableQualities,
forced: true,
onChange: (e) => updateQuality(e),
}
defaultOptions.captions = {
active: true,
update: true,
language: 'en',
}
const player = new Plyr(video, defaultOptions)
player.on('languagechange', () => {
setTimeout(() => (hls.subtitleTrack = player.currentTrack), 50)
})
hls.attachMedia(video)
window.hls = hls
window.player = player
})
function updateQuality(newQuality) {
hls.levels.forEach((level, levelIndex) => {
if (level.height === newQuality) {
hls.currentLevel = levelIndex
}
})
}
}
},
}
推荐阅读
- javascript - 使用 Rails 5 导入 Webpack
- python - 如何从一列中的每一行找到过渡量?
- asp.net-core - 使用带有 .net 核心应用程序的 IIS 进行日志记录(W3C 日志)(无托管代码)
- ios - 在 UILabel 上,如何判断是否设置了文本或属性文本?
- java - 在面板上的缓冲图像上绘制文本
- c++ - 菜单中的逻辑错误和读取功能以保存和读取文件
- java - 以相反的顺序将一个数组的元素存储到另一个数组中
- php - 如何将特殊字符作为查询参数传递 guzzle
- sql - 通过 pyspark 在 databricks 上的数据库中查找具有特定列名称的表
- spring-boot - 与 springdoc-openapi 一起使用时,spring boot 2.2 无法提供 swagger-resources