Griffith 是一個基於 React 的視頻播放器,目前已在知乎 web 和 mobile web 內使用,並在 GitHub 上開源。html
GitHub 地址:https://github.com/zhihu/griffithreact
CodeSandbox 示例:codesandbox.io/s/74olr5z02…webpack
Griffith 提供了簡潔易用的播放器 UI。目前知乎網頁端視頻播放器就是使用的 Griffith。
git
Griffith 參考 YouTube 進行了快捷鍵支持,後續還會添加更多的快捷鍵。github
Griffith 是一個基於 React 開發的 web 視頻播放器。對於 React 應用,能夠直接經過組件調用的方式使用。web
Griffith 使用 Context API 進行狀態管理。對於 React 應用,能夠經過引入 Griffith 的 Context 來實現彈幕等自定義功能。npm
對於非 React 應用,或者不肯意經過 npm 包安裝的用戶,Griffith 提供了 standalone 模式能夠免構建工具直接在瀏覽器中使用。瀏覽器
Griffith 定義了豐富的事件系統。bash
對於視頻播放器中常見的首幀時長,緩衝次數等指標,能夠經過接收 Griffith 事件來進行打點記錄。ide
對於一些須要與播放器進行通訊的功能,能夠經過往 Griffith 發送事件來與播放器進行交互。
Griffith 使用了 Media Source Extensions™ ,支持對 mp4 和 m3u8 格式的視頻進行流式播放。
import Player from 'griffith'
const sources = {
hd: {
play_url: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_hd.mp4',
},
sd: {
play_url: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_sd.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: {
play_url: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_hd.mp4',
} ,
sd: {
play_url: 'https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_sd.mp4',
},
}
// 建立播放器
const player = Griffith.createPlayer(target)
// 載入視頻
player.render({sources})
// 銷燬視頻
player.dispose()
</script>複製代碼
Griffith 全部的工做都會在 GitHub 上進行(知乎內部使用的也是同一個倉庫)。若是有任何相關的疑問和 bug,歡迎在 GitHub 提交 issue、PR 幫助 Griffith 變得更好。