视频播放问题
#视频有声音,无画面,或有画面,无声音
这是视频转码格式不正确导致的,正确的视频格式应该是h.264编码。音频编码是AAC,这种现象正常会在flashplayer里出现,h5环境对对视频元数据和编码的兼容性更强一些。
#不能播放
一:视频能在迅雷等本地播放器里播放但不能在ckplayer里播放
因为本地播放器都集成了各种解码器,而且对视频的元数据信息没有要求在第一帧。而网页播放器对视频的要求必需是h.264编码的。如果你是其它编码,在本地有相应的解码器,当然可以播放,但在网页上就无法使用了。
二:mp4视频在安卓上能够播放,但在苹果上不能播放
引起这个问题的原因可能存在如下方面:
1:iis安装了mod_h264_streaming.dll组件,有时这个组件会导致这个问题的出现,可以先试着禁用到
2:服务器安装了安全狗软件,先关掉(或卸载掉)后试试
3:检查防火墙,可以先关闭试试
三:视频没有播放结束,播放就停止了
造成这个的原因是由于视频本身存在问题。在转码过程中出现了错误导致提前结束。解决的办法是试着重新转码。
四:中文名称的路径/视频名称无法播放
首先,ckplayer是支持中文播放的。查看你的服务器编码是否为gbk或gb2312,具体设置方法请自行搜索。
所以,你需要进行以下测试:
1:如果你是本地视频地址,即服务器是你的,视频是你的,需要检查服务器是否支持该格式的视频,检查的方法是把视频地址放在地址栏里直接打开看看能否下载。如果不能下载,说明你的服务器不支持该格式的视频,可以参考帮助手册里的“视频和服务器配置”栏目了解帮助。
2:视频可以下载,但不能播放,需要确认该视频格式是h.264的编码。
3:如果你是通过网址(包括xml格式的地址),需要检查你的安全策略文件,如果你的根目录下不存在策略文件,请自行放置一个,安全策略文件示例,官方的下载包里提供了一个,名称是:crossdomain.xml,文件名称不能更改,详细的了解可以自己百度搜索。最安全的方法是用浏览器自带的开发者工具进行测试
#支持随意拖动的情况下不能按指定的秒数进行跳转
视频的跳转(seek)是根据关键帧进行跳转的,并不是按指定的秒数进行跳转,简单点说,一个视频关键帧列表可能是如下值
0秒,10秒,20秒,30秒
在这些秒数有关键帧,而其它秒是没有关键帧的
此时当跳转到15秒时,视频(播放器)会自动搜索最近的一个关键帧进行跳转,如10秒的关键帧,所以如果想要准确的跳转,关键帧的设置就要尽量小。正常转码软件里会有这方面的配置。
#m3u8的直播为什么循环播放/播放几秒就停止了
首先,需要了解一下,m3u8直播的原理:假设直接地址是live.m3u8
该文件里的直播地址格式是
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:4.797000, index0.ts #EXTINF:4.396000, index1.ts #EXTINF:5.297000, index2.ts
上面文件中的节点作用是:
#EXTM3U m3u文件头,必须放在第一行 #EXT-X-VERSION 版本号 #EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号 #EXT-X-TARGETDURATION 每个分片TS的最大的时长 #EXT-X-ALLOW-CACHE 是否允许cache #EXT-X-ENDLIST m3u8文件结束符 #EXTINF extra info,分片TS的信息,如时长,带宽等
当播放器第一次请求会加载这里的:index0.ts,index1.ts,index2.ts来播放,因为该m3u8里没有设置结束节点。所以播放器判断出该文件为直播文件,则在(#EXT-X-TARGETDURATION)设置的时间后重新加载live.m3u8,此时因为是直播, 所以live.m3u8里应该会自动增加一个新的ts文件流,即live.m3u8变成如下的格式:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:4.797000, index1.ts #EXTINF:4.396000, index2.ts #EXTINF:5.297000, index3.ts
从上面的可以看出,index0.ts没了,多了一个index3.ts。播放器会把index3.ts添加到播放列表里。这样循环下去。则会不停的进行直播的动作。
了解了以上的原理后。就容易分析原因了。
循环播放或播放一定时间后停止,都是因为播放器没有请求到新的ts文件导致。可能是使用了cdn缓存机制导致,或服务器端设置了缓存机制导致。
#地址里包含&符号的解决办法
当视频地址里包含&符号时,可以使用如下方法进行兼容。
1:将&转化成%26
2:将视频地址整体进行url编码。也就是:
video:encodeURIComponent('http://url/index.m3u8?a=1&b=2'),
unescape:true
使用方法一时要注意你的视频服务器要能够处理转码后的地址。
#播放m3u8时不能默认暂停的解决方法
因为m3u8有一个强制自动播放的功能。如果想默认暂停需要设置ckplayer.js或ckplayer.xml中搜索到autoLoad设置成false。