知乎视频播放器 Griffith 开源了~

2019-04-03 19:30:45 +08:00
 xiaoyuhen

知乎视频播放器 Griffith 开源介绍

Griffith 是什么?

Griffith 是一个基于 React 的视频播放器,目前已在知乎 web 和 mobile web 内使用,并在 GitHub 上开源。

开源地址及示例

GitHub 地址: https://github.com/zhihu/griffith

CodeSandbox 示例: https://codesandbox.io/s/74olr5z02x

特性

简洁易用的 UI

Griffith 提供了简洁易用的播放器 UI。目前知乎网页端视频播放器就是使用的 Griffith。

快捷键支持

Griffith 参考 YouTube 进行了快捷键支持,后续还会添加更多的快捷键。

React-friendly

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} />)

standalone 模式

<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 变得更好。

10927 次点击
所在节点    JavaScript
51 条回复
tutustream
2019-04-04 08:50:48 +08:00
这玩意开源是不是就是实在做不出来,所以扔出来让大家免费改 bug 的
hongch
2019-04-04 09:14:05 +08:00
所以那 1000 多的 star 都是内部员工点的吗?
PhpBestRubbish
2019-04-04 09:16:25 +08:00
真·面向 kpi 开源
strugglexiang
2019-04-04 09:24:55 +08:00
各位的评论把我逗笑了
xiaoyuhen
2019-04-04 10:26:14 +08:00
@Nicoco

移动端自定义 UI 没有做,因为手机浏览器劫持太严重,仅保留了基础播放功能。
1v9
2019-04-04 10:35:32 +08:00
这评论区哈哈
ljspython
2019-04-04 10:43:23 +08:00
哈哈,评论笑尿
impressioncr
2019-04-04 10:45:58 +08:00
我选择西瓜播放器
mnsw
2019-04-04 10:51:10 +08:00
这么垃圾还开源?这是内部搞不定,开源让人帮忙修复的意思?
jefferycai
2019-04-04 10:54:10 +08:00
小编,这是叫测试。不叫开源
SEARCHINGFREE
2019-04-04 10:56:42 +08:00
emmm 各位老哥都这么暴躁吗

不管你 star 没,我反正 fork 了
glues
2019-04-04 11:05:58 +08:00
就没见过比知乎视频播放体验更差的播放器,91p 的都比你们好用
jefferycai
2019-04-04 11:26:48 +08:00
小编,我帮你测试吧。
我测试了简单的 html demo,视频都不播放 [重点重点重点重点重点重点重点重点重点重点重点重点重点]
引入了线上 js 路径,也有 mp4 资源。也把 scrpit 代码放到里面执行
测试点:QQ 浏览器
------------------------- IS NO [不行]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>123</title>
</head>
<body>
<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: {
// https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_hd.mp4
playurl: 'https://media.w3.org/2010/05/sintel/trailer.mp4',
} ,
sd: {
// https://zhstatic.zhihu.com/cfe/griffith/zhihu2018_sd.mp4
playurl: 'https://media.w3.org/2010/05/sintel/trailer.mp4',
},
}

// 创建播放器
const player = Griffith.createPlayer(target)

// 载入视频
player.render({sources})

// console.log(sources);
// 销毁视频
// player.dispose()
</script>
</body>
</html>
jefferycai
2019-04-04 11:27:31 +08:00
是我的操作有问题么?
HorseMa
2019-04-04 11:27:46 +08:00
开源测试法?
xiaoyuhen
2019-04-04 11:53:26 +08:00
@jefferycai

应该是 play_url,这里写错了,抱歉。
xiaoyuhen
2019-04-04 11:54:29 +08:00
scalaer
2019-04-04 12:24:00 +08:00
评论区的老哥笑死我了
easylee
2019-04-04 12:28:25 +08:00
这是让大家帮着填坑啊!

为了简历好看,我先上为敬。
liprais
2019-04-04 12:47:48 +08:00
面向 kpi 开源的车祸现场

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/551792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX