首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google不想使用mp4使用mediaelement.js

Google不想使用mp4使用mediaelement.js
EN

Stack Overflow用户
提问于 2012-07-09 10:16:28
回答 3查看 10.2K关注 0票数 8

我正在使用我网站上最新的mediaelement.js播放html5视频。谷歌Chrome中有一些奇怪的东西。他播放一段视频,但不想播放mp4格式的另一段视频,也不支持webm。这两个视频都是用ffmpeg转换的,其中包含以下内容:

代码语言:javascript
运行
复制
ffmpeg -i input.mov -acodec libfaac -ab 96k -vcodec libx264 -vpre slower -vpre main -level 21 -refs 2 -b 345k -bt 345k -threads 0 -s 640x360 output.mp4

此外,第一个视频通常不使用mediaelement.js库的mp4格式播放,第二个视频转换成webm格式。

来自http://random.net.ua/video_test/的示例页面

  • http://random.net.ua/video_test/video1.html (ok)
  • http://random.net.ua/video_test/video2.html (ok)
  • http://random.net.ua/video_test/video1-mediaelement.html (ok)
  • http://random.net.ua/video_test/video2-mediaelement.html (失败)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-01 00:28:51

如果您尝试在控制台中执行$("video").get(0).currentSrc或类似的操作,您将看到非mediaelement.js版本正在播放Webm视频,Chrome可以很好地播放该视频,但是如果您查看mediaelement.js版本中的相同内容,它正在尝试播放MP4。

然后,如果您查看$("video").get(0).error,您将看到您有一个MediaError。检查一下,你就会发现它有“代码4”。根据规范,那就是MEDIA_ERR_SRC_NOT_SUPPORTED。

现在,试试$("video").get(0).canPlayType("video/mp4") --它返回"maybe"

这是猜测,但可能Chrome报告“可能”,因为它可以播放一些MP4的配置文件,而不是其他。不管是什么原因,我个人更希望Mediaelement.js将“可能”作为“不”来对待,如果其他源类型中没有一个是本地可玩的,那么继续启动Flash回退。对它进行修补是非常容易的。我在我刚做的叉子上做过--看看https://github.com/tremby/mediaelement/tree/maybe-to-no

希望这能有所帮助。让我知道它是否适合你--我希望它会放弃MP4,在你的情况下尝试Webm。在我自己的项目(调试,让我想到这个问题)中,我只有一个MP4文件,fallback很高兴地取代了它。

票数 14
EN

Stack Overflow用户

发布于 2014-09-14 02:54:55

使用媒体源API..。

我意识到这与上面回答的后遗症无关,但我认为重要的是要指出,如果MP4视频编码得当,就不需要回到webm。

还可以对MP4视频进行编码以支持Media Source API,该Media Source API允许在整个文件完成下载之前下载使视频可用的块。

MP4实现被更广泛地使用,并且在大多数浏览器中不需要webm备份。

显示对媒体源API here的视频格式支持的图表。

FFmpeg将这样做,并提供它的开源资源。

见此处:(Encode h.264 and WebM videos for MediaElement.js using FFmpeg)如下:

克里斯库尔森写道:2012年6月14日(视窗)

我最近在一个客户的网站上添加了一个视频播放器。我发现John的MediaElement.js是一个很好的解决方案。只要您同时提供h.264和WebM编码版本的视频,它将在几乎所有浏览器上本地播放。对于不受支持的浏览器,它将返回到Flash。

客户端的视频都是wmv的,因此需要转换为h.264和WebM。幸运的是,John还提供了使用FFmpeg对这些格式进行编码的一些指导:

http://johndyer.name/ffmpeg-settings-for-html5-codecs-h264mp4-theoraogg-vp8webm/

不幸的是,自命令发布以来,FFmpeg已经发生了变化,因此需要进行一些轻微的修改。我还做了一些修改,以便保留视频的纵横比,并以更低的比特率和更快的速度对视频进行编码。同样,一些正在转换的视频非常短,并且将在创建缩略图的10秒标记之前完成。为了解决这个问题,我修改了脚本,尝试在1、2、3、5和10秒的标记上捕获缩略图,每次成功地覆盖最后一个。

下面是我使用的更新的批处理文件:

代码语言:javascript
运行
复制
REM mp4 (H.264 / AAC)
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -vcodec libx264 -pix_fmt yuv420p -vprofile high -preset fast -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=trunc(oh*a/2)*2:480 -threads 0 -acodec libvo_aacenc -b:a 128k %1.mp4

REM webm (VP8 / Vorbis)
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -vcodec libvpx -quality good -cpu-used 5 -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=trunc(oh*a/2)*2:480 -threads 0 -acodec libvorbis -f webm %1.webm

REM jpeg (screenshot at 10 seconds, but just in case of a short video - take a screenshot earlier and overwrite)
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -ss 1 -vframes 1 -r 1 -vf scale=trunc(oh*a/2)*2:480 -f image2 %1.jpg
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -ss 2 -vframes 1 -r 1 -vf scale=trunc(oh*a/2)*2:480 -f image2 %1.jpg
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -ss 3 -vframes 1 -r 1 -vf scale=trunc(oh*a/2)*2:480 -f image2 %1.jpg
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -ss 5 -vframes 1 -r 1 -vf scale=trunc(oh*a/2)*2:480 -f image2 %1.jpg
"c:\program files\ffmpeg\bin\ffmpeg.exe" -y -i %1 -ss 10 -vframes 1 -r 1 -vf scale=trunc(oh*a/2)*2:480 -f image2 %1.jpg

我还创建了一个独立的批处理文件,它将遍历给定目录中的所有wmv,并对每个文件运行编码器批处理:

代码语言:javascript
运行
复制
for /r %1 %%i in (*.wmv) do "c:\program files\ffmpeg\CreateWebVideos.bat" %

Faron Coder说:2014年9月3日下午6:52 (*nix)

你好-

对于那些使用基于unix的ffmpeg的用户,这里有与作者的代码(上面)以unix的名字相对应的代码。

代码语言:javascript
运行
复制
ffmpeg -y -i $fileid -vcodec libx264 -pix_fmt yuv420p -vprofile high -preset fast -b:v 500k -maxrate 500k -bufsize 1000k -vf “scale=trunc(oh*a/2)*2:480″ -threads 0 -acodec libvo_aacenc -b:a 128k “$file.mp4″ < /dev/null

ffmpeg -y -i $fileid -vcodec libvpx -quality good -cpu-used 5 -b:v 500k -maxrate 500k -bufsize 1000k -vf "scale=trunc(oh*a/2)*2:480" -threads 0 -acodec libvorbis -f webm "$file.webm" < /dev/null

ffmpeg -y -i $fileid -ss 1 -vframes 1 -r 1 -vf "scale=trunc(oh*a/2)*2:480" -f image2 "$file.jpg" < /dev/null
ffmpeg -y -i $fileid -ss 2 -vframes 1 -r 1 -vf "scale=trunc(oh*a/2)*2:480" -f image2 "$file.jpg" < /dev/null
ffmpeg -y -i $fileid -ss 3 -vframes 1 -r 1 -vf "scale=trunc(oh*a/2)*2:480" -f image2 "$file.jpg" < /dev/null
ffmpeg -y -i $fileid -ss 5 -vframes 1 -r 1 -vf "scale=trunc(oh*a/2)*2:480" -f image2 "$file.jpg" < /dev/null
ffmpeg -y -i $fileid -ss 10 -vframes 1 -r 1 -vf "scale=trunc(oh*a/2)*2:480" -f image2 "$file.jpg" < /dev/null 

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2013-09-23 18:56:57

这里有一个对我有用的简单解决方案。我的问题是在Chrome 29上播放MP4视频文件。我找到了这个解决方案,在WWW上涉猎了一堆类似的线程,并尝试了一堆带有扩展的东西,等等。这就是工作原理:

键入chrome :标志到该页面上的铬地址栏,搜索“硬件”。

启用“硬件加速视频解码”。然后重新启动它

这将允许您在铬上播放mp4 --如果您想要这样做的话,可以将其转换为chromecast。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11393050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档