Griffith 是一个基于 React 的视频播放器,目前已在知乎 web 和 mobile web 内使用,并在 GitHub 上开源。
GitHub 地址: https://github.com/zhihu/griffith
CodeSandbox 示例: https://codesandbox.io/s/74olr5z02x
Griffith 提供了简洁易用的播放器 UI。目前知乎网页端视频播放器就是使用的 Griffith。
Griffith 参考 YouTube 进行了快捷键支持,后续还会添加更多的快捷键。
Griffith 是一个基于 React 开发的 web 视频播放器。对于 React 应用,可以直接通过组件调用的方式使用。
Griffith 使用 Context API 进行状态管理。对于 React 应用,可以通过引入 Griffith 的 Context 来实现弹幕等自定义功能。
对于非 React 应用,或者不愿意通过 npm 包安装的用户,Griffith 提供 standalone 模式可以免构建工具直接在浏览器中使用。
Griffith 定义了丰富的事件系统。
对于视频播放器中常见的首帧时长,缓冲次数等指标,可以通过接收 Griffith 事件来进行打点记录。
对于一些需要与播放器进行通信的功能,可以通过往 Griffith 发送事件来与播放器进行交互。
Griffith 使用了 Media Source Extensions™ ,支持对 mp4 和 m3u8 格式的视频进行流式播放。
###React 应用
import Player from 'griffith'
const sources = {
hd: {
playurl: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018hd.mp4',
},
sd: {
playurl: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018sd.mp4',
},
}
render(<Player sources={sources} />)
<div id="player"></div>
<script src="https://unpkg.com/griffith-standalone/dist/index.umd.min.js"></script>
<script>
const target = document.getElementById('player')
const sources = {
hd: {
playurl: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018hd.mp4',
} ,
sd: {
playurl: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018sd.mp4',
},
}
// 创建播放器
const player = Griffith.createPlayer(target)
// 载入视频
player.render({sources})
// 销毁视频
player.dispose()
</script>
Griffith 所有的工作都会在 GitHub 上进行(知乎内部使用的也是同一个仓库)。如果有任何相关的疑问和 bug,欢迎在 GitHub 提交 issue、PR 帮助 Griffith 变得更好。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.