HTML5Audio/Video全解(疑难杂症)

摘要:
1.mp4格式的视频不能在chrome中播放。Chrome浏览器支持HTML5。它支持本地播放部分的MP4格式(不通过Flash和其他插件)。视频和音频的编码格式是可变的。为什么Chrome不支持所有视频编码格式?指导您如何将各种视频转换为具有良好兼容性的MP4文件。使用Linux的朋友可以直接使用FFMPEG命令来转换视频格式。

1、mp4格式视频无法在chrome中播放

  Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件)。
为 什么是部分MP4呢?MP4有非常复杂的含义(见http://en.wikipedia.org/wiki/Mp4),普通人对MP4的理解是后缀 为.mp4的文件。但MP4本身不是一种简单的视频格式,它是一个包装了视频和音频格式的壳。至于里面的视频和音频使用什么编码格式是可变的。MP4的视频格式可以使用DivX也可使用H264,Chrome只支持H264。
  然后,我猜测问题的原因是这样的:Chrome浏览器见到MP4后缀的文件,使用了原生HTML5视频播放起播放,但却发现视频格式无法解码。对于Firefox,它不支持原生播放MP4,于是使用了Flash,绝大部分的视频格式基本都可通过Flash播放。
  这 篇2011年1月的消息提到Google将放弃对H264的支持:http://www.infoq.com/cn/news/2011/01 /chrome-h264。这篇是Google方面的描述:http://blog.chromium.org/2011/01/html-video- codec-support-in-chrome.html。如果Google不再支持在Chrome上原生播放MP4,那么会调用Flash播放器播 放,这样反而不会出现有些MP4文件播放不了的问题。
  为什么Chrome不支持所有的视频编码格式?绝大部份的视频编码格式都是要付版权费的,Google已经为H264买了单,Firefox没有Google那么有钱不愿意买。
  最后,我录制了一段教学视频,指导大家怎样把各种视频转换成兼容性比较好的MP4文件。视频中使用的软件是“格式工厂”(http://www.formatoz.com/CN/index.html),这个软件基本上只是做了一个界面,其核心调用了开源软件FFMPEG。由于它违反了FFMPEG的LGPL许可协议,备受指责。使用Linux的朋友可以直接使用FFMPEG命令进行视频格式转换,命令如下:
  ffmpeg -i infile.flv -vcodec libx264 o5.mp4
  如果转换出的视频在某些设备还是无法播放,可以试试利用MediaCoder转换兼容性更好的MP4

  2、让服务器能正确识别多媒体的MIME类型

  即使对浏览器来说,已经设置了正确的媒体,但有可能是您的服务器并不能正确识别多媒体的MIME类型。MIME类型告诉服务器如何处理不同的文件类型。如果你使用Apache,则可以在.htaccess文件中添加下面的音频支持:
  AddType audio/ogg ogg AddType audio/ogg oga AddType audio/wav wav AddType audio/mpeg mp3 AddType audio/mp4 mp4 AddType audio/mp4 mpa
  类似地添加如下代码,以支持视频:
  AddType video/webm webm AddType video/mp4 mp4 AddType video/ogg ogg AddType video/ogg ogv
  如果不能访问服务器的.htaccess文件,则有可能在服务器的控制面板地方有一个选项,允许查看和添加MIME类型。
  如果是Windows服务器,那么可能需要在IIS或者web.config中进行设置在web.config文件中 。

  3、文件格式转换的问题

  一种很常见的情况是,用户从客户端提交给服务端一个类型的媒体文件,并且尽管你已经从它的文件扩展名中确认了其MIME类型。但是,该文件没有 被正确解码。例如,它可以是一个完全有效的MP4文件,但由于某种原因,在一些浏览器中无法播放。如果发生这种情况,最好把用户上传的文件进行编码,比如 使用如Miro Video Coverter和Media Converter等编码器,可以确保正确的编码。 
  此外,一些文件,尤其是MP4文件,在测试时,不要总是在一个支持其格式的浏览器中进行测试,这是因为事实上,MP4存在不同的编码格式,可以根据不 同格式对MP4(又称如H.264)进行编码(参考:http://en.wikipedia.org/wiki/H.264#Profiles)如果有 的浏览器不支持其中的编码格式,那么它自然不会工作。如果遇到这种情况,尝试确保该文件是以最基本的MP4编码方式进行编码。最好建议使用工具,比如 Miro转换工具,它能确保MP4文件能在最多的浏览器中得到支持。 
  如果需要支持Firefox 3.6和更低的版本,还需要转换对应的音频文件为Ogg格式},并将它们添加到中的元素中。

  4、能否在MP4完整下载前进行播放?

  一般情况下,HTML5的的音频和视频播放器将允许用户在完整下载文件前,就可以开始进行播放了,有时候,对于MP4文件来说却不能这样,要必须等待所有的视频下载完毕再播放,这主要是编码问题造成的 
  有时,MP4文件使用索引进行了编码(其中包含了比如文件长度等信息),往往这些信息是放在文件的尾部而不是头部。索引信息中,包含了文件的元信息, 浏览器根据这些元信息去进行下载。如果索引放在后面的话,则必须等待到获得整个文件的索引后,才能知道文件的元信息,所以就必须等到整个文件下载完毕才能 开始播放了。 
  如果您遇到这种情况,还有一个简单的修补程序,是由埃里克森Renaun提供的,下载地址为:http://renaun.com/blog/code/qtindexswapper/,下载到计算机上运行,则可以把文件的索引信息移动到文件头并保存。

  5、避免用JS访问废除的属性

  这个问题看上去好像有点多余,但每次在Stack Overflow中,都会看到很多开发者发问,比如为什么某个方法不能运行,原因在于他们使用了不存在的属性。比如,在 
<audio>和<video>标签中都有的旧的属性autobuffer,在2010年10月已经被preload取代了。 
  人们似乎忘记了,HTML5是尚未敲定的标准(虽然它的大部分内容现在已经都相当稳定),所以作为开发者,必须多到W3C的官方网站去进行查阅相关资料。

  6、Firefox 11 以上版本的音量控制的问题

  最近相信不少开发者会发现音量控制的操作在Firefox 11及以上的版本中被取消了。是的,静音和音量控制仍然是可以使用的,但要通过键盘上的上和向下键进行控制,其原因主要是发现了两个bug(请参 考:http://www.iandevlin.com/blog/2012/04/html5/html5-media-controls-and- firefox),这一点请开发者注意,估计firefox会很快修复这个问题。

  7、音视频播放是否完全脱离插件?

  HTML5的音频和视频点的最大卖点之一就是不需要安装第三方插件-例如Flash 
  不幸的是,这不完全正确,ie 9及以上版本的浏览器和Safari是需要使用Microsoft Media Player和Apple的QuickTime,才能播放HTML5音频和视频。

  8、如何全屏视频?支持情况如何?

  HTML5 视频的其中一大威力在于其全屏播放的特性但HTML5 规范中,对这个居然没有任何提及,相反,在另外一个关于全屏幕播放的API中有定义,但还是在草稿阶段,在一些浏览器中开始有试验性的支持。 
  以下浏览器去一些支持全屏API,但具体使用的api方法各自有不同: 
  Chrome 19 版本以上 
  Firefox的12 + 
  Safari浏览器5.1 + 
  注:iPhone上,video自动全屏播放! 
  也有一些其他方法,能在其他浏览器中支持使用全屏API,比如https://github.com/sindresorhus/screenfull.js 
  Internet Explorer9 以上版本忽略了video poster属性 
  如果在HTML 5的video标签中使用poster属性,其含义为在视频播放前提供一张静态的图片给用户,但ie 9以上的版本,除非设置了preload属性为none,否则将会忽略掉设置的poster属性。 
  这是由于Internet Explorer是最迟支持HTML 5的浏览器,我们都习惯了其他浏览器中,如果设置了poster属性,则会在播放视频前,先显示设置的这张图片。但IE 9并不这样做,如果要播放的视频的第一帧已经加载了,则不会显示有poster属性指定的图片了,而且在IE 10中,目前依然存在这个问题。  

  9、通过HTML5技术能否访问摄像头和麦克风?

  HTML 5的起草者们,一直都希望HTML 5能访问摄像头和麦克风,因此早期是使用标签的,但现在是被getUserMedia API所取代了(详见: http://dev.w3.org/2011/webrtc/editor/getusermedia.html)。 

  API本身是容易使用的 ,但目前浏览器支持相当有限。Opera是目前唯一个实现这些功能的浏览器,但只支持视频Internet Explorer 10也将对其进行部分支持,Firefox也会跟随。

  10、autoplay在iphone/ipad中不能实现的问题

  • 通过iframe 

    1
    2
    3
    4
    5
    6
    7
    8
    var ifr=document.createElement("iframe");  
    ifr.setAttribute('src'"song.mp3");  
    ifr.setAttribute('width''1px');  
    ifr.setAttribute('height''1px');  
       
    ifr.setAttribute('scrolling''no');  
    ifr.style.border="0px";  
    document.body.appendChild(ifr);
  • 通过页面上的其他触摸或者点击事件来调用对应的play()方法

  11、解决iPhone中,视频自动在新窗口打开问题

      HTML

<video id="player" width="480" height="320" webkit-playsinline>

      Obj-C

webview.allowsInlineMediaPlayback = YES;

免责声明:文章转载自《HTML5Audio/Video全解(疑难杂症)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇301重定向3:由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 错误处理python 中__setattr__, __getattr__,__getattribute__, __call__使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下使用VSCode开发OpenCV程序

在Linux下使用VSCode开发OpenCV程序,并使用cmake编译 创建项目 打开vscode,选择File->Open Folder VSCode配置 这里需要配置launch.json, tasks.json, c_cpp_properties.json三个文件; launch.json配置 点击左侧Debug, 选择Add Configu...

log4j简介及应用

一、介绍  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 Log4j由三个重要的组件构成:日志信息...

使用webpack搭建vue开发环境

最近几天项目上使用了vue.js作为一个主要的开发框架,并且为了发布的方便搭配了webpack一起使用。CSS框架使用的是vue-strap(vue 对bootstrap控件做了封装)这篇文章主要总结一下具体搭建的过程,和途中遇到的一些问题的解决办法 主要用到的工具 Vue webpack vue-strap vue-router 搭建步骤 1. 首先...

git上传超过100m大文件

1、git出错如下错误时 执行如下可解决错误:   git rm --cache '大文件路径'   git commit --amend -CHEAD   git push 2、当必须上传大文件时。需借助git-fls   下载地址:https://git-lfs.github.com/   使用方式:     (1)、在项目目录git lfs ins...

实习小白::(转) 骨骼动画详解-Cocos Studio

  骨骼动画详解-Cocos Studio 在之前的骨骼动画详解-Spine一文中,我们已经介绍过什么是骨骼动画,骨骼动画的优缺点,以及骨骼动画编辑器-Spine的使用。接下来本文将结合另一个可编辑骨骼动画的编辑器(Cocos Studio)介绍骨骼动画的使用。 Cocos Studio介绍 Cocos Studio是一套基于Cocos2d-x的免费游戏开...

SQLITE3 使用总结(直接使用C函数)

转载网址:http://blog.chinaunix.net/uid-8447633-id-3321394.html 前序: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。 这里要注明,我是一个跨平台专注者,并不喜欢只用 window...