Video.js 博客

Jim Whisenant2013-09-18

使用Karma在真实浏览器中运行Video.js单元测试

如果你曾经克隆过video.js仓库,无论是为了贡献代码还是构建自己的版本,你无疑都运行过video.js单元测试。然而,直到最近,我们才支持使用grunt和PhantomJS浏览器运行单元测试。现在,随着我们与Karma集成第一阶段的完成,这种情况已经改变了。你将能够在真实浏览器中运行测试。

设置起来非常简单。从video.js拉取最新代码并运行npm install后,只需将test/karma.conf.js.example文件复制到test/karma.conf.js,将你希望测试的浏览器添加到browsers数组中,然后运行grunt karma:dev。就这么简单。当然,你还可以配置更多选项,但如果你想快速启动,只需添加浏览器并运行测试即可。有关更多说明,请参阅test/karma.conf.js.example文件。

对于接下来的集成阶段,我们计划支持在移动设备上运行测试,以及在公共可用位置运行这些测试,以便任何人都可以一目了然地了解情况。

你可以在这里了解更多关于Karma的信息。

祝好!

-Jim

Steve Heffernan2013-09-15

Video.js CDN文件未经授权修改

更新日期:2013-09-19

CDN持续安全,我们已采取重大措施确保其不再遭受类似攻击。

  • CDN的访问权限已限制给少数关键人员
  • 第三方服务现正监控CDN的更改
  • 已定义流程以应对未来任何此类问题

此次事件的原始来源是Sendori自动更新漏洞,该漏洞可能影响了数百万人,不幸的是,其中包括一名CDN管理员。


2013年9月14日上午6:25(PDST),我们发现从内容分发网络(CDN)提供的一些Video.js版本已被未知攻击者修改。该文件被更改为包含恶意代码,试图在任何加载Video.js文件的Windows或Macintosh电脑上安装恶意软件。该恶意软件已被确认为Trojan.PWS.Stealer.1932或Trojan.Ransom.ED的变种。我们迅速恢复到安全的Video.js文件版本,并采取措施确保此类问题不再发生。

受影响的具体文件是:

vjs.zencdn.net/c/video.js

vjs.zencdn.net/4.0/video.js

vjs.zencdn.net/4.1/video.js

补丁级别的版本(例如vjs.zencdn.net/4.1.0/video.js)均未受影响,最新版本(4.2)也未受影响。自行托管Video.js的用户也未受影响。

潜在影响:在受影响期间加载了受损文件的任何浏览器,可能已提示用户在其计算机上安装恶意软件。

经确定,这些文件最初于PDST时间上午4:30被修改。文件于PDST时间上午7:15修复,并于PDST时间上午7:51完成向全球CDN边缘缓存的传播。

请放心,Video.js现在可以再次安全加载。我们目前正在调查根本原因。一旦我们完全了解事件的性质,我们将提供包含更多信息的更新。

确保用户安全是我们的首要任务之一,对于受到此次事件负面影响的任何人,我们深表歉意。

Steve Heffernan2013-09-06

Video.js 4.2.0发布!RTMP支持、CSS设计器和稳定性改进

九月快乐!Video.js 4.2.0版本带来了一些有趣的更新,以及大量的稳定性改进和完善。

RTMP支持

首先,多亏了社区成员之间令人印象深刻的协作,我们现在拥有了RTMP支持(测试版)。查看示例

目前对RTMP的支持还比较基础,但我们认为它能涵盖许多通用用例。功能支持包括:

  • 单流(不支持客户端自适应)
  • 仅限Flash,HTML5视频不支持RTMP(但iOS设备支持HLS)t support RTMP (but HLS is supported on iOS devices)
  • 仅限点播。我们尚未更新UI以支持直播。t updated the UI to support live yet.

要在Video.js播放器中加载RTMP流,您将以与其他源类型相同的方式使用源标签:ll use a source tag in the same way you would other source types

<source
  src="rtmp://your.streaming.provider.net/cfx/st/&amp;mp4:path/to/video.mp4"
  type="rtmp/mp4"
/>

连接和流部分通过在第一个“&”(&)或最后一个斜杠(/)处分割URL来确定。

[http://myurl.com/streaming&amp;/is/fun](http://myurl.com/streaming&amp;/is/fun) --&gt;
  connection: [http://myurl.com/streaming](http://myurl.com/streaming)
  stream: /is/fun

-or-

[http://myurl.com/streaming/is/fun](http://myurl.com/streaming/is/fun) --&gt;
  connection: [http://myurl.com/streaming/is](http://myurl.com/streaming/is)
  stream: fun

可用的源类型包括rtmp/mp4rtmp/flv

RTMP多年来一直是备受要求的功能,很高兴终于将其加入播放器。s great to finally have it in the player. Thanks to everyone involved in that work.

播放器皮肤设计器

如果你错过了之前的博客文章,请务必查看新的播放器皮肤设计器界面。它很好地展示了video.js控件的可定制性,这些控件完全由HTML和CSS构建。

随着4.2版本的发布,设计器中的样式已更新至与最新播放器样式保持一致。

控制栏更新

之前的文章中,我描述了控制栏的一些更新,旨在修复跨浏览器/设备问题并改善整体功能。截至4.2.0版本,所有这些更新都已纳入稳定版本。

其他更新

除了之前的更新,还有许多补丁和增强功能。以下是完整列表:s been a number of patches and enhancements along the way. HereAdded LESS as a CSS preprocessor for the default skin (查看)

  • 将LESS作为默认皮肤的CSS预处理器(查看
  • 为API导出了MenuButtons(查看
  • 修复了通过one()添加的监听器无法移除的问题(查看
  • 更新了buffered()以支持多个已加载范围(查看
  • 为自定义菜单导出了createItems()(查看
  • 阻止媒体事件在DOM中冒泡(查看
  • 控制栏进行了重大改造并修复了许多问题(查看
  • 修复了在Windows系统上压缩代码时的一个问题(查看
  • 添加了通过Flash进行RTMP流媒体传输的支持(查看
  • 使tech.features可用于外部技术(查看
  • 次要代码改进(查看
  • 更新了时间格式以支持NaN和Infinity(查看
  • 修复了未加载技术时出现的undefined错误(查看
  • 为播放器组件导出了addClass和removeClass(查看
  • 使回退消息可自定义(查看
  • 修复了加载指示器位置和旋转的问题(查看
  • 修复了IE8中字体不稳定的问题

最新版本可在videojs.com通过下载链接或CDN托管版本获取。

此致,

-heff

Steve Heffernan2013-08-09

隐藏和显示视频播放器控件

上周,我决定着手解决控制栏方面的一些悬而未决的问题,然后就陷入了与播放器更新相关的“兔子洞”。谢天谢地,我现在已经浮出水面,我想写一些关于由此产生的一些更新。ve thankfully resurfaced now, and figured Id write about a few of the updates that came from it.

播放器控制栏的一个预期行为是,当用户在观看视频时处于非活动状态时,它会在几秒钟后淡出。以前,我们在video.js中实现这一点是通过一个CSS技巧。当用户的鼠标移出视频播放器区域时,控制栏会被赋予类名vjs-fade-out。这个类有一个可见性过渡,并额外增加了2秒的延迟。s control bar is that it will fade out after a couple of seconds when the user is inactive while watching a video. Previously, the way we achieved this with video.js was through a bit of a CSS trick. When the users mouse would move out of the video player area, the control bar would be given the classname vjs-fade-out. This class had a visibility transition with an added 2 second delay.

.vjs-fade-out {
  display: block;
  visibility: hidden;
  opacity: 0;

  -webkit-transition: visibility 1.5s, opacity 1.5s;
  -moz-transition: visibility 1.5s, opacity 1.5s;
  -ms-transition: visibility 1.5s, opacity 1.5s;
  -o-transition: visibility 1.5s, opacity 1.5s;
  transition: visibility 1.5s, opacity 1.5s;

  /* Wait a moment before fading out the control bar */
  -webkit-transition-delay: 2s;
  -moz-transition-delay: 2s;
  -ms-transition-delay: 2s;
  -o-transition-delay: 2s;
  transition-delay: 2s;
}

当用户的鼠标移回播放器时,该类将被移除,取消任何延迟的淡出效果。这提供了类似于你期望控件淡出效果的工作方式,并且只需几行JavaScript代码即可添加/移除该类。s mouse moved back over the player, the class would be removed, canceling any delayed fade-out. This provided a similar experience to how you might expect the controls fading to work, and only took a few lines of javascript to add/remove the class.

player.on('mouseout', function() {
  controlBar.addClass('vjs-fade-out');
});

player.on('mouseover', function() {
  controlBar.removeClass('vjs-fade-out');
});

然而,这种方法存在一些缺点,使得我们有必要放弃它。s a few drawbacks though that have made it necessary to move away from this approach.

  1. 在全屏模式下,控件不会淡出,因为鼠标永远无法移出播放器区域。t fade out in fullscreen mode because the mouse can never move out of the player area.

  2. 移动设备上没有鼠标,因此需要不同的事件和交互来显示/隐藏控件。

除了这些问题,我们还希望任何播放器组件或插件都能挂接到相同的触发器来隐藏控件。像社交分享图标这样的组件应该以与控件相同的方式淡出。

用户状态

首先添加的是播放器上的userActive属性,它可以是truefalse。这样做是将控件隐藏功能抽象化,使其关注我们真正关心的问题:用户当前是否正在与播放器交互,还是仅仅被动地观看视频。这还将控制栏与跟踪用户活动本身解耦,并允许其他组件通过播放器级别的状态更容易地实现与控制栏相同的行为。re actually concerned with, that is, whether the user is currently interacting with the player or just passively watching the video. This also decouples the control bar from tracking the user activity itself, and allows other components to more easily behave the same way as the control bar, through a player-level state.

实际属性是player.userActive(),它返回truefalse。当此值改变时,它会触发播放器上的一个事件。

player.userActive(true);
// -&gt; 'useractive' event triggered
player.userActive(false);
// -&gt; 'userinactive' event triggered

播放器元素上也会添加vjs-user-activevjs-user-inactive的CSS类名。现在,这个类名被实际用于隐藏和显示控制栏。s actually used now to hide and show the control bar.

.vjs-default-skin.vjs-user-inactive .vjs-control-bar {
  display: block;
  visibility: hidden;
  opacity: 0;

  -webkit-transition: visibility 1.5s, opacity 1.5s;
  -moz-transition: visibility 1.5s, opacity 1.5s;
  -ms-transition: visibility 1.5s, opacity 1.5s;
  -o-transition: visibility 1.5s, opacity 1.5s;
  transition: visibility 1.5s, opacity 1.5s;
}

2秒的延迟已从CSS中移除,取而代之的是通过JavaScript超时机制,内置于将userActive状态设置为false的过程。任何时候播放器上发生鼠标事件,此超时都会重置。例如:

var resetDelay, inactivityTimeout;

resetDelay = function() {
  clearTimeout(inactivityTimeout);
  inactivityTimeout = setTimeout(function() {
    player.userActive(false);
  }, 2000);
};

player.on('mousemove', function() {
  resetDelay();
});

mousemove事件在鼠标移动时非常频繁地被调用,我们希望在此操作期间尽可能少地占用播放器进程,因此我们正在使用John Resig撰写的一种技术re using a technique written about by John Resig.

不是为每次mousemove重置超时,而是mousemove事件将设置一个变量,该变量可以由以受控速度运行的JavaScript间隔获取。s running at a controlled pace.

var userActivity, activityCheck;

player.on('mousemove', function() {
  userActivity = true;
});

activityCheck = setInterval(function() {
  // Check to see if the mouse has been moved
  if (userActivity) {
    // Reset the activity tracker
    userActivity = false;

    // If the user state was inactive, set the state to active
    if (player.userActive() === false) {
      player.userActive(true);
    }

    // Clear any existing inactivity timeout to start the timer over
    clearTimeout(inactivityTimeout);

    // In X seconds, if no more activity has occurred
    // the user will be considered inactive
    inactivityTimeout = setTimeout(function() {
      // Protect against the case where the inactivity timeout can trigger
      // before the next user activity is picked up  by the
      // activityCheck loop.
      if (!userActivity) {
        this.userActive(false);
      }
    }, 2000);
  }
}, 250);

这可能有点难以理解,而且与现在播放器中实际实现的功能相比,它被简化了一些,但本质上它允许我们在鼠标移动时减轻浏览器的一些处理负担。s a bit simplified from whats actually in the player now, but essentially it allows us to take some of the processing weight off of the browser while the mouse is moving.

全屏模式下隐藏控件

得益于新的userActive状态和JavaScript超时延迟,控件不再需要鼠标移出播放器区域即可隐藏,现在可以在全屏模式下以与在页面中播放器相同的方式隐藏。这也意味着我们现在可以像隐藏控件一样隐藏鼠标光标,这样在全屏观看时它就不会停留在播放器上方。t sit over the player while watching in fullscreen.

.vjs-fullscreen.vjs-user-inactive {
  cursor: none;
}

触屏设备上隐藏控件

触屏设备上的预期行为与桌面浏览器略有不同。没有mousemove事件来帮助判断用户是活跃还是不活跃,因此通常会在控件淡出前添加更长的延迟。此外,虽然在桌面浏览器中点击视频本身通常会在播放和暂停之间切换,但移动设备上轻触视频会切换控件的可见性。

幸运的是,我们围绕userActive建立的框架使得最后一部分的设置变得足够简单。ve set up around userActive has made this last part easy enough to set up.

video.on('tap', function() {
  if (player.userActive() === true) {
    player.userActive(false);
  } else {
    player.userActive(true);
  }
});

在true和false之间手动切换userActive将应用适当的类名并触发显示和隐藏控件所需的事件,正如您在移动设备上所期望的那样。d expect on a mobile device.

tap事件实际上是一个自定义事件,类似于你在jQuery mobileHammer.js以及其他移动触控库中会发现的轻触事件。当touchstart事件被触发,并且相关的touchend事件在250毫秒内触发时,就会发生轻触事件。如果touchend事件的触发时间更长,或者在这两个事件之间发生了touchmove事件,则不被视为tapll find in jQuery mobile, Hammer.js, and other mobile touch libraries. A tap event occurs whenever a touchstart event is fired with the associated touchend event firing within 250 milliseconds. If the touchend event takes longer to fire, or if a touchmove event happens between the two, it is not considered a tap.

总结

我希望这能让你对Video.js中控件的这一部分如何运作,以及如果你正在为Video.js构建自己的插件时如何模仿相同的交互有所了解。我们始终感谢反馈。re building your own plugins for Video.js. Feedback is always appreciated.

此致,

-heff

Steve Heffernan2013-07-15

Video.js的新播放器皮肤设计器

上周Brightcove举办了一次内部黑客周活动,每个人都可以自由选择项目进行开发。其中一个成果是新的video.js皮肤设计器

该设计器允许你在编辑CSS时实时查看皮肤的变化,从而更轻松地创建自定义外观。

看看这个熟悉的示例,只用了几分钟就完成了。

尝试创建你自己的,并告诉我们你的想法。更好的是,创建你自己的,分享到CodePen.io并在评论中发布链接。(如果你从这个未编辑的示例分叉开始,可能会更容易。)s probably easiest if you start by forking this unedited example.)

我最喜欢video.js的一点是,皮肤是用HTML和CSS构建的,同时支持HTML5和Flash视频。我认为这个设计器很好地展示了定制播放器皮肤是多么容易。s skin.

关于我们如何构建它的一些注意事项…

作为起点,我们使用了Brian Frichette出色的LESS2CSS,这给我们带来了巨大的领先优势。Brian也主动提出要帮助皮肤设计器,这真是太棒了!s awesome LESS2CSS, which gave us a huge head start. Brian has offered to help with the skin designer as well, so thats great!

我们之前没有为video.js添加CSS预处理器,因为我们不希望有额外的抽象层,也不希望在构建过程中增加额外的步骤。然而,当查看新设计器中的CSS时,很明显像变量这样的东西对于帮助人们理解CSS中发生了什么非常有价值。尽管如此,我们仍在努力寻找使用LESS特性和保持CSS易于任何只懂CSS的人阅读之间的平衡。这意味着要避免一些更高级的LESS特性,例如条件语句(尽管我们确实为大播放按钮定位使用了一个)。t added a CSS preprocessor to video.js before because we didnt want the extra layer of abstraction, or the extra step in the build process. When looking at the CSS in the new designer however, it became clear how valuable things like variables can be for helping people understand whats happening in the CSS. Still, were trying to find the balance between using LESS features and keeping the CSS easily readable by anyone who just knows CSS. That means avoiding some of the more advanced LESS features like conditional statements (though we do use one for big play button positioning).

我们选择使用LESS是因为它能够在浏览器中通过JavaScript解析LESS标记。我不知道有什么最新的浏览器内SASS解析器。LESS2CSS的完整性也影响了这一决定。我们使用的功能子集足够小,因此使用哪一个无关紧要,尽管我确实喜欢使用\$作为变量而不是@的想法。m not aware of any up-to-date in-browser SASS parsers. The completeness of LESS2CSS also influenced that decision. Were using a small enough subset of features that it doesnt really matter which one we use otherwise, though I do like the idea of using \$ for variables over @.

它托管在Nodejitsu上,我们正在利用他们为开源项目提供的免费托管服务。不得不说,使用他们的命令行工具部署应用程序非常简单。re taking advantage of their free hosting for open source. I have to say, it was pretty simple to get the app deployed with their command line tool.

如果您有任何想法,请告诉我们。设计器的代码可以在这里找到:https://github.com/videojs/designer

此致,
-heff

Steve Heffernan2013-06-28

Video.js 4.1.0 发布

恰逢周末,Video.js的下一个次要版本现已发布。更新包括:

  • 为未就绪的播放技术(Flash)启用了方法排队(查看
  • 阻止用户在播放器组件上选择文本(查看
  • 在压缩版本中导出了requestFullScreen()和cancelFullScreen()(查看
  • 导出了全局播放器引用videojs.players(查看
  • 将Google Analytics添加到CDN版本(查看
  • 为组件API导出了fadeIn/fadeOut(查看
  • 修复了自动播放时IE海报错误(查看
  • 为API导出了bufferedPercent(查看
  • 增强用户代理检测,特别是针对Android版本(查看
  • 修复IE9 canPlayType错误(查看
  • 修复了字幕的各种问题(查看

您可以从videojs.com获取最新版本,无论是下载还是从我们的CDN托管版本。

祝您周末愉快!

-heff

Steve Heffernan2013-05-09

Video.js 4.0 现已发布!

今天我们我们正在发布Video.js 4.0,这是迄今为止最稳定、最轻量级、也敢说是最美观的版本。它可供下载,可在Github上获取,并免费托管在我们的CDN上。s available for download, on Github, and hosted for free on our CDN.

4.0版本获得了前所未有的社区协作,这体现了JavaScript社区日益增长的活力、HTML5视频日益普及以及Video.js使用量的增加。过去一年中,使用Video.js的网站数量翻了一番,仅CDN托管版本每月就有超过2亿次访问!感谢所有Video.js社区成员的代码贡献和错误报告。

此版本也是一个里程碑,因为它是自去年Brightcove收购Zencoder以来发布的第一个版本。对于那些错过公告的人来说,这对Video.js来说是件大好事。过去,Video.js只是Zencoder的一个副业项目,我在履行日常职责的同时进行维护(好像创业生活还不够刺激一样)。收购后,Brightcove不仅让我全职投入Video.js,Brightcove的视频播放器团队也成为了该项目的贡献者。Brightcove团队可能是世界上最有经验的视频播放器团队,他们支持最先进的视频技术,为各大品牌提供跨所有设备的服务。能与他们合作是我的荣幸,他们为这个版本做出了重大贡献。s the first version released since Brightcove acquired Zencoder last year. For those who missed the announcement, it was a very good thing for Video.js. In the past, Video.js was a side project for Zencoder that I maintained on top of my regular responsibilities (as if startup life isnt exciting enough). Post-acquisition, Brightcove has not only put me full-time on Video.js, but the Brightcove video player team has become contributors to the project. The Brightcove team is probably the most experienced video player team in the world, supporting the most advanced video technology, for the biggest brands, across all the devices. Its been a privilege to work with them and theyve made major contributions to this version.

4.0 主要功能摘要

通过使用Google Closure Compiler高级模式,代码大小减少18%,性能得到提升

  • 通过使用TravisCI、Bunyip和Browserstack的自动化跨浏览器/设备测试套件,稳定性更高
  • 新的插件接口和插件列表,用于扩展Video.js
  • 新的默认皮肤设计,使用字体图标,可实现更大程度的定制
  • 响应式设计和视网膜显示支持
  • 通过更好的ARIA支持改进可访问性
  • 迁移至Apache 2.0许可证
  • 100% JavaScript开发工具集,包括Grunt

性能提升

在4.0版本中,性能是我们的首要任务,而加载库所需的时间是性能的一个重要因素。看似微小的尺寸缩减可以产生巨大的影响,尤其当一个库每月要在全球范围内加载数百万次时。我们选择使用Google的Closure Compiler,因为它的“高级模式”目前提供了最激进的代码压缩选项,到目前为止,我们已经实现了18%的代码大小缩减,并且还有进一步缩减的潜力。

Closure Compiler还声称可以重写代码以获得更好的运行时性能,尽管我们还没有机会对其进行基准测试。

一些初步的加载时间基准测试*显示:

  • 播放器加载时间在50毫秒以下
  • 播放开始时间在150毫秒以下
  • 实际视频播放时间在0.5秒以下(使用CDN托管的MP4)

*初始测试使用Chrome浏览器,在现代MacBook Pro上清除缓存,并通过Wi-Fi连接。更正式的测试将随后进行。

更高稳定性

自动化跨浏览器、跨设备测试是JavaScript库测试的梦寐以求的目标。在构建4.0版本时,我们通过使用多种工具实现了这一目标,其中包括:

  • TravisCI - 自动对Video.js源代码的每个拉取请求通过PhantomJS运行单元测试
  • Bunyip + Browserstack - 允许我们在云托管实例中运行从IE6到最新Chrome的任何浏览器,以及各种iOS和Android设备的测试。

这种在新版本发布前轻松进行跨环境测试的能力,将为我们提供更多防止回归的保护,并允许更快的特性发布周期。

新插件接口

新的插件API允许开发者更轻松地为Video.js添加自定义功能。该API的工作方式类似于jQuery插件接口,使开发者能够添加或覆盖Video.js的任何部分。插件创建后,可以在维基百科上的Video.js插件列表页面上分享。

新默认皮肤

在Brightcove UX团队的帮助下,我们创建了一个新的默认皮肤,它更简洁、更精致、更具可定制性。其中最有趣的功能之一是,我们从使用图片作为图标转向使用字体图标。使用字体图标,您只需更改CSS值即可更改图标的颜色和大小。您可以在Video.js主页上看到一个示例。

改进的可访问性

Video.js社区成员,来自NCSU.edu的Greg Kraus,在测试和改进Video.js通过更好地使用ARIA角色方面的可访问性方面做了大量出色的工作。这些更改使得仅使用键盘的用户、屏幕阅读器用户和语音界面用户都能够与视频播放器进行交互。更新:在Greg的博客文章中阅读更多内容。

迁移至Apache 2.0许可证

早期版本的Video.js是根据LGPLv3许可证发布的。LGPL经常与其更严格的兄弟版本GPL混淆,GPL要求软件所涉及的所有代码也必须是开源的。Video.js旨在在所有情况下都能开放和免费使用,我们希望这一点明确,因此4.0版本现已在Apache 2.0下发布,这与Twitter Bootstrap发布的许可证相同。

100% JavaScript 工具集

以前,Video.js使用Ruby作为开发工具,包括用于部署任务的Rake,以及zenflow——一个基于gitflow构建的内部Zencoder工具,用于开发过程工作流。在4.0版本中,我们已迁移到Grunt进行任务管理,并且我们正在Node.js中构建一个类似于zenflow的工具。

Videojs.com 现已开源

作为本次发布的一部分,我们还将Videojs.com网站开源。因此,如果您发现有什么应该添加或修复的地方,请分叉它

未来展望?

尽管上面列出了所有更新,但这仅仅是Video.js激动人心的一年的起点。我们将继续通过插件和皮肤改进性能、多平台稳定性以及可定制性。社区成员已经开始为一些最受欢迎的功能(如播放列表、分析和广告)开发插件。

关注@videojs或订阅我们的邮件列表,以获取新功能和路线图更新的最新信息。

如果您想参与该项目,请查看我们的贡献指南

此致,
-heff

Steve Heffernan2013-05-06

仓库已迁移!

为了准备下一个版本,我们已将源代码仓库从github.com/zencoder/video-js迁移到github.com/videojs/video.jsve moved the source code repository from github.com/zencoder/video-js to github.com/videojs/video.js

如果您有本地克隆,可以通过以下命令更新您的克隆的上游URL:s upstream URL with

git remote set-url upstream git://github.com/videojs/video.js.git

您的分叉(例如github.com/you/video-js)与主仓库的关系应保持不变,包括任何拉取请求。

此致,
-heff

Steve Heffernan2012-11-15

网站和支持更新

在协助Brightcove和Zencoder合并短暂休整之后,我将全职投入到Video.js的开发和支持工作中。感谢所有继续贡献代码并在论坛中提供帮助的人。m moving full time to developing and supporting Video.js. Thank you to everyone who has continued to commit code and help out in the forums.

作为此次调整的一部分,我正尝试优化用于Video.js项目管理和支持的工具。第一个重大变化是,论坛将被Stack Overflow(标签使用m trying to optimize the tools used for video.js project management and support. The first big change is that the forums are being replaced with Stack Overflow (tag withvideo.js)和Github Issues取代。

在过去几年中,Video.js比我预期的更受欢迎,同时Stack Overflow也成为了支持开发者社区的绝佳工具。因此,与FacebookAndroidHTML5 Boilerplate等许多其他项目一样,我很高兴能将支持转移到Stack Overflow的强大工具和社区。我将保留论坛一段时间,但从现在起,请将问题发布到Stack Overflow并使用m excited to move support to Stack Overflows awesome tool and community. I标签。video.jstag.

我还开始清理和组织Video.js的Github Issues,这些问题以前就存在,但分散在论坛和Github之间。如果您发现Video.js的特定bug,请在那里提交

在项目管理方面,我将使用Trello,并公开看板,以便其他人可以看到开发进度。ll be using Trello, and exposing boards so others can see the progress of development.

我也在精简网站,并将更复杂的部分转移到可以更好处理它们的其他服务。我已经将博客迁移到Tumblr,并且我正在将文档迁移到Github仓库,该仓库内置了文档格式功能。ve already moved the blog to Tumblr, and Im moving the docs to the Github repo, which has built-in docs formatting.

对于今天开始开源项目的人来说,你可以把这看作是我支持开源项目的指南。我真希望在我开始Video.js时就能知道这一切。

更多项目更新即将发布。

此致,
-heff

Steve Heffernan2012-07-26

Brightcove收购Zencoder

今天,Zencoder宣布被Brightcove收购,Brightcove是一家领先的在线视频平台(OVP)。您可以在Zencoder博客文章新闻稿中了解更多具体细节,但我也想明确这对于Video.js意味着什么。正如您可能知道的,Video.js是由我(Steve Heffernan,Zencoder联合创始人)创建的,Zencoder仍然是其核心贡献者和赞助商(就像37signals对于Rails,或者Joyent对于Node.js)。

此次收购对Video.js来说只意味着好事。简而言之,Video.js将继续是一个免费开源的视频播放器框架,而Brightcove将投入比Zencoder以往任何时候都更多的资源到Video.js中。&framework, and Brightcove will be investing more in Video.js than Zencoder ever could.

我在2010年初Zencoder参加Y Combinator期间(当时我们隐居在圣克鲁斯山脉深处的租屋里)编写了Video.js的第一个版本。在过去几年中,我继续构建该库并吸纳了其他Zencoder团队成员和社区的贡献,但这只是我在Zencoder担任创始人兼市场副总裁的日常职责之余进行的。尽管Video.js在开发者中持续获得普及,目前已在超过25,000个网站上使用,但仍有工作要做,也有成长空间。因此,即将发生的一个更重要的变化是,Brightcove将让我全职投入Video.js,使我能够专注于项目核心,并更好地支持Video.js社区(包括用户和贡献者)。

除此之外,Brightcove拥有一支一流的播放器开发团队来支持其平台的视频播放器。虽然两个团队和播放器将如何协同工作的具体细节仍在讨论中,但我们在播放器技术发展方向上的理念和观点已达成一致。这种知识和协作的结合必将对这两个播放器产生积极影响。

虽然额外的资源将产生巨大影响,但最好的开源软件项目之所以能达到今天的成就,都是通过社区开发者的贡献。因此,如果您以前对深入研究源代码或推动特定功能或错误修复持谨慎态度,我希望这个消息能鼓励您积极参与,帮助Video.js成为浏览器中处理视频的最佳资源。

随着事情的进展,将会有更多信息发布,但请随时在下方评论中提出任何问题。

此致,

Steve&Zencoder团队