我正在使用我网站上最新的mediaelement.js播放html5视频。谷歌Chrome中有一些奇怪的东西。他播放一段视频,但不想播放mp4格式的另一段视频,也不支持webm。这两个视频都是用ffmpeg转换的,其中包含以下内容:
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 (失败)发布于 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很高兴地取代了它。
发布于 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秒的标记上捕获缩略图,每次成功地覆盖最后一个。
下面是我使用的更新的批处理文件:
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,并对每个文件运行编码器批处理:
for /r %1 %%i in (*.wmv) do "c:\program files\ffmpeg\CreateWebVideos.bat" %Faron Coder说:2014年9月3日下午6:52 (*nix)
你好-
对于那些使用基于unix的ffmpeg的用户,这里有与作者的代码(上面)以unix的名字相对应的代码。
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 希望这能有所帮助。
发布于 2013-09-23 18:56:57
这里有一个对我有用的简单解决方案。我的问题是在Chrome 29上播放MP4视频文件。我找到了这个解决方案,在WWW上涉猎了一堆类似的线程,并尝试了一堆带有扩展的东西,等等。这就是工作原理:
键入chrome :标志到该页面上的铬地址栏,搜索“硬件”。
启用“硬件加速视频解码”。然后重新启动它
这将允许您在铬上播放mp4 --如果您想要这样做的话,可以将其转换为chromecast。
https://stackoverflow.com/questions/11393050
复制相似问题