就在 The Lodge 在这里开张后,我立即开始收到关于一些视频在 iPad 上无法播放的报告。哎呀,糟了,这些都是付费客户,他们应该能够在现代设备上观看这些内容。
我实际上使用 HTML5 <video>
来显示视频,并将它们托管在 Amazon S3 上(这样可以保护它们)。我一直在使用 Screenflow 以尽可能高的质量导出它们,从而获得 H.264 .mov
文件。
显然,这对于 iPad 来说不太好,最好使用 .mp4 格式。在 Mac 上,您可以从 Quicktime(以及 Screenflow)导出为 .mp4,但只能使用预设设置,例如“iPhone”或“iPad”或“Apple TV”。我想这很好,我只需选择“iPad”即可。质量很好,并且它们继续通过 HTML5 视频在桌面 WebKit 浏览器上运行。
为记录在案,我也在做
AddType video/mp4 mp4
AddType video/ogg ogv
AddType video/webm webm
从我的根 .htaccess 文件中,以便视频以正确的内容类型提供服务。尽管我不确定这在多大程度上有所帮助,因为视频位于 S3 上。
在一些快速测试中,视频也在 iPad 上播放,太好了!
但是随后,关于人们尝试在 iPad 上观看某些视频并失败的报告不断涌现。确切的行为是加载指示器一直在旋转、旋转、旋转。我实际上在这里使用的是 MediaElements.js(据我所知,原生 UI 上没有加载指示器),但播放视频的根本原因仍然只是原生 HTML5 视频(在支持的浏览器中)。我只是将 MediaElements.js 用作播放器的更美观的皮肤。
我验证了这一点。有些视频可以播放,有些则不能。我唯一能想到的是文件大小。我有一个 75MB 的视频可以播放,还有一个 99MB 的视频无法播放。奇怪但真实。
因此,我返回并重新导出了到目前为止我发布的所有视频,格式为“iPod” .mp4,分辨率略低,因此文件大小也更小。但我不想让每个人都因为视频质量降低而受到惩罚。该怎么办?
我最近才了解到 您可以在视频元素上使用媒体属性,例如
<video controls>
<source src="video-small.mp4" type="video/mp4" media="all and (max-width: 480px)">
<source src="video-small.webm" type="video/webm" media="all and (max-width: 480px)">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
</video>
(确实让 <picture>
元素更有意义,对吧?)
这很棒,显然 Chrome 和 Safari 支持。但遗憾的是,iPad 不支持(我测试过)。它也 有可能被移除。
我需要一些现在就能正常运行的东西,所以我决定将源动态注入到视频中。首先,我测试屏幕宽度以查看它是否是一个相当小的屏幕(在这里测试 1200px,iPad 报告为 1024px)。使用 jQuery,并假设我已设置了一些包含视频源 URL 的变量
var mainVideo = $('#the-video');
if ($(window).width() < 1200 && medQualVersion) {
mainVideo.append("<source type='video/mp4' src='" + medQualVersionSrc + "' />");
} else {
mainVideo.append("<source type='video/mp4' src='" + highQualVersionSrc + "' />");
}
mainVideo.append("<source type='video/webm' src='" + webMSrc + "' />");
// Wait until sources are appended to call MediaElements.js
mainVideo.mediaelementplayer();
我并不完全喜欢这样。首先,我希望原始的高质量文件能够正常工作。其次,仅仅因为某人在使用 iPad,并不意味着他们想要更低的质量。他们可能不想要。但这是我目前唯一能想到的解决方法。
我不知道这是否是每个人的普遍问题,还是与我正在使用的各种技术有关,但我认为我应该记录下来。
关于视频的好文章,我会用到的!
您的问题是否与 <source> 标签的顺序有关?我相信对于 iPad 来说,您始终需要将 MP4 视频放在首位。
查看此页面源代码的第 45 行
http://camendesign.com/code/video_for_everybody/test.html
这是我的 <video> 代码的首选页面
HTML5 视频的可移植性仍然是一个非常困难的问题。经过多次测试后,我放弃了。存在编码问题、格式问题、设备问题、文件大小问题……
向所有人提供良好的视频体验而不丧失理智的最佳方法是使用 YouTube 或 Vimeo 等第三方服务。它们会将您的视频重新编码为多种配置并确保完全的可移植性。
同意!此处 CSS-Tricks 上的所有公开视频都来自 YouTube,它在这方面做得非常出色。我只需要这项工作在内部完成以控制访问权限。
Vimeo 具有许多功能来托管具有访问控制的私有视频。
我们在这里使用 Vimeo 用于付费在线培训产品。效果完美。
我认为文件大小问题可能仅仅与您分发电影的方式有关。由于它们是从 S3 直接托管的,我认为视频没有被正确地流式传输/缓冲。
Cloudfront 将是您的朋友,您显然还可以使用私有文件来保护您的内容
http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html
依我个人意见,您只需调整视频转换,基本上就像 lynda.com 一样,他们的视频即使文件大小很小也很清晰,也许您也可以使用 http://www.sorensonmedia.com/video-encoding/ 甚至 Handbrake 也会帮助您进行转换:D,因为就我个人而言,我宁愿观看低质量视频,也不愿观看高质量视频但根本无法加载,即使我为此付费了
我们为 Kicktastic 选择了 Vimeo Pro,因为您可以将嵌入限制到特定域,并且它绕过了他们的整个商业化内容。您应该查看一下,看看是否有意义。它比所有其他选项都便宜得多,而且显然播放器非常可靠。
您是否已排除 S3 是罪魁祸首的可能性?将其中一个挑剔的视频上传到 CSS-Tricks 服务器,然后尝试从那里播放。
我还没有完全排除它……我可能只需要按照上面 Jonathan 的建议去做 =)
您是如何将视频上传到 s3 的?
最好为文件添加 MIME 内容类型标头,因为您在 htaccess 文件中的内容将不起作用。
我使用 Firefox 的 s3fox 扩展程序上传视频,因为这允许您在上传时设置内容类型
我使用免费的 JWPlayer,http://www.longtailvideo.com/players,它使用 Javascript 进行 Flash 检测。如果存在 Flash,则使用 Flash 播放器显示视频,但如果不存在 Flash,则提供 HTML5 播放器。我使用单个源文件(.mov 文件,H.264 结合 AAC),iPhone、iPad 和 Flash 都可以播放使用 H.264 和 ACC 编码的 .mov 视频,因此一个源文件适用于桌面和 iPad。而且,如果您想支持其他不支持 Flash 和 .mov 的移动设备,则可以指定备用视频格式(ogg、webm)
我也有同样的问题,但在 iPhone 上。您是否遇到过同样的困难——如果它在 iPad 上无法播放,那么它在 iPhone 上也无法播放?
我做了很多视频编码工作,您遇到的症状(加载指示器一直在旋转)听起来像是视频工作正常,但没有针对流式传输进行编码。
在编码为 MP4 时(顺便说一句,MP4 绝对是用于流式传输视频的文件格式,以及 h.264 作为编解码器,因为许多移动设备都内置了硬件解码),有大量的选项可用,但大多数选项在使用基本编码软件时都是隐藏的。我不熟悉 Screenflow 的编码设置,但熟悉 Quicktime 的设置,并且我知道它偶尔会出现此类问题,而且实际上不太好。
对于所有视频编码,我使用 Sorenson Squeeze(这可能有点过分了),它可以很好地完成工作,并且从未给我带来任何问题。
基本上我认为问题归结为:视频没有设置为“流式传输”;这意味着在下载时播放。可能发生的情况是视频一直加载、加载、加载,等待文件完全下载后再播放,这会让人感觉视频永远不会加载。H.264(以及 MP4)。
或者你可以选择真正简单的方法:将视频上传到 YouTube 或 Vimeo(设置为私密视频,这样就没人能看到),等待它以 720 HD 处理完成,然后下载该文件(你可以使用 KeepVid 或 Offliberty 来下载;这两个都是免费服务)。现在你得到的文件很可能保证在大多数(如果不是全部)设备上都能正常播放,你可以使用它来代替 Screenflow/Quicktime 导出的文件。
但是,如果问题确实是 HTML 和/或 Javascript 导致的,那么我的建议就没有多大帮助了。不过,值得一试,而且你得到的质量会比 iPod 导出更好。
虽然我知道你使用 Amazon S3 来保护文件,但使用第三方视频托管服务是否更容易(也更便宜!?),这些服务提供 API 允许你限制对视频的访问,除非它们是通过 The Lodge 访问的?
我相信 Vimeo 和 Viddler 提供了类似的功能——毫无疑问还有很多其他的服务——而且我认为它们的播放器在 iOS 设备上运行良好。
“这太棒了,Chrome 和 Safari 显然支持它。但遗憾的是,iPad 不支持(我测试过了。)”
(顺便说一句,桌面版和移动版 Opera 也支持——完全披露,我在 Opera 工作)
实际上,这在 iPad 上的 Safari 中应该可以正常工作。例如,请参阅http://people.opera.com/patrickl/experiments/video/mediaquery/
可能是因为你没有使用 width=device-width 视口吗?
我正在使用该元标记,但我发誓它在我的 iPad 2 上(带有最新的软件更新)无法正常工作。这里可能还有其他因素在起作用,正如这个评论线程所暗示的那样(例如,未编码为流媒体?Amazon 未提供正确的媒体类型?)
如果私密 Vimeo 频道不起作用,请尝试使用 Squeeze 或甚至 Apple Compressor 使用关键帧对齐的 mp4 和 SMIL 文件。我使用 JW 来简化操作。SMIL 是一个小的 xml 文件,定义了多个文件大小(特别是比特率和宽度)的位置,iOS 将根据带宽和屏幕尺寸决定使用哪个文件。这是 HTML5 的一部分。比 Javascript 更好。Squeeze 或 Telestream Episode 可以为你完成所有操作。
还应该注意的是,你正在使用渐进式下载而不是 HLS,HLS 会监控带宽和屏幕尺寸。正如之前有人提到的,你实际上并没有“流式传输”,但可能应该这样做……。
你是否考虑过使用 sublime 视频播放器(http://sublimevideo.net/),它与 amazon s3 兼容,并声称可以使用 HTML5 在所有移动设备上运行
如果你在 S3 上托管,请考虑使用 CloudFront(设置非常简单),你可以将其设置为通过 RTMP 协议流式传输视频,这与 CloudFront 的 CDN 结合使用,使视频服务/流式传输变得非常快。
问题可能是你的头部信息位于文件的末尾——这使得一些播放器(iPad 等)在播放之前等待它下载完成。
为了在大多数使用内置导出功能的导出菜单中修复此问题(在 Mac 上),你需要选择一个选项(通常是一个复选框),上面写着“启用流媒体”或类似的内容。
你可以通过 ffmpeg(一个用于视频编码的命令行工具——Handbrake 等工具使用它)运行该文件,并添加一个名为 QT faststart 的插件——它为你执行完全相同的操作。(尝试搜索 qt-faststart 以获取更多信息)。
你还可以(也许你应该)设置一个视频工作流程,在其中你从 screenflow 上传文件,ffmpeg 将其转换为具有不同分辨率和比特率的多个文件。
我之前正在做一个专注于 html5 视频的网站,我会查找我最终使用的代码。这是一条崎岖的道路,但我让它在所有设备上都能正常工作。(我敢肯定它与你放置源代码的顺序有关,但我只是猜测,直到我看到代码。)
我对 html5 视频进行了广泛的审查http://testr.suprsidr.com/v/video/
iDevices 需要字节范围支持
或者至少是低调的编码。
如上所述,可能是视频没有包装为快速启动,元数据原子位于文件末尾而不是开头。不过,这只是一个外部可能性,因为大多数视频都可以正常播放,并且可能使用了与无法播放的视频相同的设置进行编码和包装。
一个快速检查和消除这种情况的方法是使用 zencoder 通过他们的设备配置文件之一作为模板运行有问题的视频。每分钟输出 5 美分值得避免抓耳挠腮并反复检查你自己的编码。
既然我提到了配置文件,值得注意的是,最初的 iPad 喜欢 h.264 “main” 配置文件,iPad 2 将播放“high” 配置文件 h.264。这也可能解释了为什么一些 iPad 用户在某些视频上遇到问题。
祝你好运。
大家好,
我登录了 The Lodge,但没有看到“Lodge”视频或大纲等。
如果我点击视频,网站会返回到常规的 CSS-tricks 首页。
网页设计改造视频发布得太早了吗?
谢谢 Liz
嗨,Liz,
当你发邮件时,我试图回复你,但邮件退信了……看起来是拼写错误,我现在会再试着回复。我将隐藏此评论,因为它与本文内容无关。
如果你能给我几个指向 S3 上无法播放的视频的链接,我或许可以帮助你。在我的公司,我们必须一直处理这个问题……而且我欠你一篇关于这个很棒的博文的感谢 ;-)