为了文章的完整性,我们先列一下视频标签的属性:src:视频发布者的属性:视频的封面,显示的图片它不播放预加载:预加载自动播放:自动播放循环:循环播放控件:浏览器的内置控制栏宽度:视频宽度高度:视频高度视频对象属性:audioTracks:返回表示可用音轨的AudioTrackList对象。autoplay:设置或返回是否在视频准备好(加载)后立即播放。buffered:返回表示视频缓冲部分的TimeRanges对象。controller:返回表示视频当前媒体控制器的MediaController对象。controls:设置或返回视频是否应显示控件(如播放/暂停等)。crossOrigin:设置或返回视频的CORS设置。currentSrc:返回当前视频的URL。currentTime:以秒为单位设置或返回视频中的当前播放位置。defaultMuted:设置或返回视频是否默认静音。defaultPlaybackRate:设置或返回视频的默认播放速度。持续时间:以秒为单位返回视频的长度。ended:返回视频播放是否结束。error:返回一个表示视频错误状态的MediaError对象。height:设置或返回视频高度属性的值。loop:设置或返回视频结束时是否应再次播放。mediaGroup:设置或返回视频所属的媒体组名称。muted:设置或返回是否关闭声音。networkState:返回视频当前的网络状态。paused:设置或返回视频是否暂停。playbackRate:设置或返回视频播放的速度。播放:返回表示视频播放部分的TimeRanges对象。poster:设置或返回视频的海报属性值。preload:设置或返回视频的preload属性的值。readyState:返回视频的当前就绪状态。seekable:返回表示视频的可搜索部分的TimeRanges对象。seeking:返回用户当前是否正在视频中寻找。src:设置或返回视频的src属性的值。startDate:返回表示当前时间偏移量的Date对象。textTracks:返回表示可用文本轨道的TextTrackList对象。videoTracks:返回表示可用视频轨道的VideoTrackList对象。volume:设置或返回视频的音量。width:设置或返回视频宽度属性的值。视频对象方法:addTextTrack():向视频添加新的文本轨道。canPlayType():检查浏览器是否可以播放指定的视频类型。load():重新加载视频元素。play():开始播放视频。pause():暂停当前播放的视频。然后列出可用于视频状态监控的Mediaevents(媒体(如video、image、audio)触发的事件,适用于所有html元素,但常用audio、embed、img、object、video):属性值说明onabortscript退出时运行的脚本oncanplayscript当文件准备好开始播放时运行的脚本(缓冲足以开始)oncanplaythroughscript当媒体能够播放到结束时运行脚本,而不会因缓冲而停止ondurationchangescriptwhen媒体长度改变时运行的脚本onemptiedscript当发生故障并且文件突然不可用时运行的脚本(例如当连接意外断开时)onendedscript当媒体到达末尾时运行的脚本(可能发送类似"thankyouforwatching")onerrorscriptWheninthefile当在加载期间发生错误时运行的脚本onloadeddatascript当媒体数据加载时运行的脚本onpausescript脚本在媒体被用户或程序暂停时运行onplayscript脚本在媒体准备好开始播放时运行onplayingscript脚本在媒体开始播放时运行onprogressscript脚本在浏览器正在获取媒体数据速率发生变化时运行的脚本(例如当用户切换到慢动作或快进模式时)onreadystatechangescript每当就绪状态发生变化时运行的脚本(就绪状态监视媒体数据的状态)onseekedscript当seeking属性设置为false时(表示seek已经结束)播放位置改变(例如当用户快进到媒体中的不同位置时)onvolumechangescript每当音量发生变化(包括将音量设置为静音)时运行的脚本onwaitingscript当媒体停止播放但打算继续播放时运行的脚本(例如当媒体暂停并且缓冲更多数据时)这些媒体事件的行为不同在不同的平台上是不同的,事件触发的场景不同,事件触发后Video对象的属性返回值也不同。下面着重总结一下区别。先给出一个结论,然后附上测试数据,测试最简单的直接使用方式,在页面添加video标签播放视频,为视频设置循环播放属性loop。差异分析结论事件属性表现差异eventpc端iOSandroidloadstart文件加载、视频初始化、无数据加载与PC端停顿视频不播放、未获取媒体数据一致:一般是网络不好,视频下载中断是一致的playplay()事件可能会在play()事件被触发之前被触发。状态是开始播放,但是视频还没有真正开始播放。consistentwaitingplay()事件触发后,等待数据一致。如果视频时长一致,在play()事件触发前可能无法获取真实的视频时长:可能触发多次,只能获取到最后一次的真实时长。loadedmetadataplay()事件触发后,之前的值可能为0或1,元数据一致play()事件触发前,无法获取到真正的元数据。但视频可能并没有真正开始播放,可能会因为加载而中途暂停。持续播放视频开始播放。同样可能没有真正开始播放,也可能获取不到视频长度。canplaythrough视频开始播放后,可以流畅播放。还没有开始加载,视频可能没有开始播放,还是会卡顿。timeupdate视频播放完毕后,会更新播放进度。会有明显的进度变化,可以获取currentTime。第一次可能会出错,如果timeupdate事件中的currentTime改变了,说明视频必须要开始播放进度了。视频播放完毕,继续下载,可以获取到当前缓存缓冲区,全部下载完成后,触发不一致。第一次可能会出错,所有下载完成后会继续触发suspend。缓冲过程中,视频可能卡顿,也可能播放流畅,全部缓冲完成后不会触发。在视频实际播放之前,pause()事件将触发暂停。一致暂停可能是响应pause()事件,也可能是页面切出时自动暂停。拖动进度条时寻找播放位置。或者播放完成后,一直寻找下一个视频,拖动进度条时,定位播放位置。Eitherstarttoplaythenextvideo,orstarttoplaytheconsistenterrorerrorfromthebeginning,thecauseoftheerrorcannotbelocated,andtheconsistenttestdatacannotbeplayedthroughthepaly()event.PCtestchrome#eventreadyStatecurrentTime(s)buffered(s)duration(s)视频状态1loadstartNOTHING0nullNaN准备请求数据(初始化完毕)2stalledNOTHING0nullNaN3playNOTHING0nullNaNplay()事件触发,状态是开始播放,但视频并未真正开始播放4waitingNOTHING0nullNaN等待数据5durationchangeMETADATA00.644.2获取到视频长度6loadedmetadataMETADATA00.644.2获取到元数据7loadeddataENOUGH_DATA01.0644.28canplayENOUGH_DATA01.0644.2可以播放,但中途可能因为加载而暂停9playingENOUGH_DATA01.0644.2开始播放10canplaythroughENOUGH_DATA01.0644.2可以流畅播放11timeupdateENOUGH_DATA01.0644.2播放进度变化12progressENOUGH_DATA0.12.9244.2持续下载13timeupdateENOUGH_DATA0.214.6744.2播放进度变化...38suspendENOUGH_DATA3.2914.0844.2缓冲中,视频可能卡顿也可能在流畅播放中39timeupdateENOUGH_DATA3.4814.0844.2...490timeupdateENOUGH_DATA39.744.244.2491pauseENOUGH_DATA39.8744.244.2手动暂停492playENOUGH_DATA39.8744.244.2play()事件触发493playingENOUGH_DATA40.0644.244.2494timeupdateENOUGH_DATA40.2444.244.2...509timeupdateENOUGH_DATA43.9944.244.2510timeupdateMETADATA044.244.2播放完毕511seekingMETADATA044.244.2寻找中512waitingMETADATA044.244.2513progressMETADATA044.244.2514timeupdateENOUGH_DATA044.244.2515seekedENOUGH_DATA0.0544.244.2播放完毕进度回到起点循环播放516canplayENOUGH_DATA0.2544.244.2...802timeupdateENOUGH_DATA23.4644.244.2803errorENOUGH_DATA044.244.2网络断开错误804timeupdateENOUGH_DATA044.244.2UnabletocontinueplayingiOSiOSweixin#eventreadyStatecurrentTime(s)buffered(s)duration(s)Videostate1loadstartNOTHING0nullNaNreadytorequestdata(initialized)2playNOTHING0nullNaNstateistostartplaying,butthevideohasnotactuallystartedtoplay3waitingNOTHING0nullNaNwaitingfordata4durationchangeMETADATA07.6344.2toget到视频长度5loadedmetadataMETADATA07.6344.2获取到元数据6loadeddataENOUGH_DATA07.6344.27canplayENOUGH_DATA07.6344.2可以播放,但中途可能因为加载而暂停8canplaythroughENOUGH_DATA07.6344.2可以流畅播放9playingENOUGH_DATA07.6344.2开始播放10timeupdateENOUGH_DATA07.6344.2播放进度变化11timeupdateENOUGH_DATA0.257.6344.2...22timeupdateENOUGH_DATA3.0136.2444.223progressENOUGH_DATA3.1544.244.2continuousdownload24suspendENOUGH_DATA3.1644.244.225timeupdateENOUGH_DATA3.2644.244.2...39pauseENOUGH_DATA6.4744.244.2手动暂停40playENOUGH_DATA6.5144.244.241playingENOUGH_DATA6.544.244.242timeupdateENOUGH_DATA6.7244.244.2...61timeupdateENOUGH_DATA11.444.244.262pauseENOUGH_DATA11.444.244.2网络环境切换,自动触发63playENOUGH_DATA11.3844.244.264playingENOUGH_DATA11.4144.244.265timeupdateENOUGH_DATA11.644.244.2...198timeupdateENOUGH_DATA44.1544.244.2199timeupdateENOUGH_DATA044.244.2播放完毕200seekingENOUGH_DATA044.244.2寻找中201timeupdateENOUGH_DATA0.144.244.2202seekedENOUGH_DATA0.244.244.2播放完毕进度回到起点循环播放203timeupdateENOUGH_DATA0.3744.244.2iOSQQ与微信无明显差异iOSsafari与微信无明显DifferenceiOSQQbrowserx5kernel#eventreadyStatecurrentTime(s)buffered(s)duration(s)Videostate1loadstartNOTHING0nullNaNreadytorequestdata(initializationcompleted)2progressMETADATA0null44.23suspendMETADATA0null44.24durationchangeMETADATA0null44.25loadedmetadataMETADATA0null44.2beforetheaboveeventistriggeredautomaticallyTheevent6timeupdateMETADATA0null44.2triggerstheplay()eventandstartstoplay7timeupdateMETADATA0null44.28timeupdateMETADATA0null44.2Inadditiontothevideolength,otherattributescannotbeobtainedintheQQbrowser.Sinceitsperformanceisratherstrange,weexcludethisspecialcaseinourcomparison.android--三星GT-N71054.4.2androidweixin#eventreadyStatecurrentTime(s)buffered(s)duration(s)视频状态1loadstartCURRENT_DATA0null1准备请求数据(初始化完毕)2durationchangeCURRENT_DATA0null13loadedmetadataCURRENT_DATA0null14loadeddataCURRENT_DATA0null15stalledCURRENT_DATA0null1未触发play()事件之前,自动触发以上事件6playENOUGH_DATA0null1触发play()事件,开始播放,但视频可能并未立刻开始播放7waitingENOUGH_DATA0null18canplayENOUGH_DATA0null1可能因为加载而卡顿9canplaythroughENOUGH_DATA0null110playingENOUGH_DATA0null111timeupdateENOUGH_DATA0null112progressENOUGH_DATA0null113durationchangeENOUGH_DATA0null44.214playingENOUGH_DATA0null44.2视频真正开始播放15timeupdateENOUGH_DATA0.04null44.2...90timeupdateENOUGH_DATA17.2944.244.291pauseENOUGH_DATA17.2944.244.292playENOUGH_DATA17.2944.244.293playingENOUGH_DATA17.2944.244.294timeupdateENOUGH_DATA18.7544.244.2...196timeupdateENOUGH_DATA044.244.2197seekingENOUGH_DATA044.244.2198timeupdateENOUGH_DATA044.244.2199pauseENOUGH_DATA044.244.2无法自动循环播放androidQQ与微信无明显差异androidQQ浏览器与微信无明显差异android--华为G610-U004.2.1和三星GT-N71054.4.2微信版无明显区别
