视频播放问题

#视频有声音,无画面,或有画面,无声音

这是视频转码格式不正确导致的,正确的视频格式应该是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。