本文为您介绍使用阿里云播放器SDK过程中可能遇到的各端播放器具有的共性常见问题及解决方案。
标准直播播放选择RTMP还是HTTP-FLV
建议选择HTTP-FLV,理由如下:
在阿里云视频直播控制台生成地址时,会同时生成RTMP与HTTP-FLV的地址,这两个协议里包含的数据内容是一致的,只是网络协议通道不一样。
HTTP协议是互联网主要协议,CDN、运营商、中间网络设备等链路中都对HTTP有很长时间的网络优化,HTTP的默认80/443端口号也是常见白名单端口,不容易被禁用,而RTMP协议比较老,其默认端口号是1935有可能被防火墙等设备禁用,导致异常。因此在综合网络环境下,HTTP-FLV的稳定性、性能(卡顿、延时)会比RTMP更好。
播放失败相关问题
视频点播的视频无法播放,如何排查?
视频播放失败需要根据播放器的报错信息和网络请求来定位问题,流本身的编码问题、网络终端或CDN问题、格式问题、Bucket问题都可能导致播放失败,以下为常见问题解决措施:
欠费问题:请先检查您的账户余额,如果账户欠费则无法播放视频。
网络终端问题:视频无法播放并提示
4400
,错误码4400
指示由于服务器或网络原因不能加载资源。请确认是否配置了SSL证书、HTTPS证书是否过期或失效。格式问题:视频格式播放器不兼容,视频点播支持的播放格式请参见播放器SDK功能详情。
说明带鉴权播放m3u8格式的文件需要使用自有域名,绑定域名请参见添加加速域名。
Bucket问题:设置的Bucket无效,或私有Bucket鉴权过期导致无法播放。关闭Bucket鉴权,同时将Bucket设置为公共读,即可正常播放。
跨域问题:请先检查您加速域名的地域与视频播放地域是否一致,如果不一致将导致无法播放。如不一致,您可以创建新的加速域名或修改原加速域名地域。
视频点播在站内可以正常播放,站外无法分享播放
可以通过以下步骤排查:
查看这个视频在点播是否还存在。
查看是否添加加速域名。
未添加加速域名:查看存储Bucket的权限,存储Bucket是不是私有的。如果是私有的就一定是携带鉴权的,关闭鉴权,同时将Bucket设置为公共读,就可以直接播放了(将Bucket设置公共读,有安全风险)。
已添加加速域名:查看是否有鉴权,如果有鉴权的话,可以加大鉴权有效的时间,或者关闭鉴权(有安全风险)。
上传到视频点播中的视频,在其他端都能正常播放,但是在iOS端不能播放
可能原因:iOS端的Safari浏览器兼容性不够,当视频压缩比例太高,或视频的编码级别为high时,都可能导致Safari浏览器无法解码播放。
解决方法:建议对视频进行转码处理后再播放,详细操作请参见音视频转码。
视频起播速度慢相关问题
MP4格式的视频起播速度慢时,可能由于源视频的moov(音视频数据索引)在mdat(音视频数据)之后造成,您可以通过转码处理将视频的moov移到mdat之前以加快播放解析。
视频转码请参见转码推荐。
检测视频的moov位置,请参考如下命令:
# 源视频地址可以是本地文件地址也可以是在线URL,例如:http://pla****.alicdn.com/video/aliyunmedia.mp4 ffmpeg -v trace -i "源视频地址" 2>&1 | grep -e type:\'mdat\' -e type:\'moov\'
正常情况下,moov在mdat之前,如下图所示。
异常情况下,moov在mdat之后,如下图所示。
针对阿里云Android播放器SDK和iOS播放器SDK,视频点播提供了毫秒级的起播方案,可以大大提升视频的起播速度,具体操作,请参见使用阿里云播放器实现全屏秒播。
播放加密视频相关问题
视频经过DRM加密后,无法在浏览器上正常播放
使用Web播放器播放DRM加密后的视频时,对浏览器有限制,支持的浏览器请参见H5功能适配说明。
播放HLS标准加密视频时,需要传入的用户令牌(MtsHlsUriToken)参数是什么?如何获取?
MtsHlsUriToken参数是用户自定义参数,常规的HLS标准加密下,加密串写到HLS流里后,会在m3u8索引文件中加入一个解密服务器的地址,当有需求需要只允许部分用户访问时,这个解密地址就需要一个验证身份的功能,MtsHlsUriToken参数就是在您的解密服务器上加一层验证逻辑,然后根据这层验证逻辑生成一个特殊的参数加入解密验证。
您需要在配置加密时,搭建令牌颁发服务生成MtsHlsUriToken,详细内容请参见HLS标准加密-步骤4。
播放跨域相关问题
OSS为英国伦敦节点,上传至OSS的视频在中国内地打开很慢
在中国内地访问英国伦敦节点属于跨区域访问,建议添加加速域名后,使用全球加速。
视频点播海外使用视频访问慢、频繁卡顿问题如何解决?
在播放过程中,引起卡顿情况,一般来说是由于网络不稳定。如果卡顿时间过长引起播放器报错,那么大概率和CDN动荡有关。如果经常发生卡顿,则需要看一下网络请求,可能是网速和该视频的码率不匹配,需要提高网速或者降低码率。
OSS视频播放相关问题
播放存储在OSS中的某些视频时,发出大量请求,应该如何处理?
请确认源视频是否存在问题(例如播放器在解码源视频时,是否发出了大量的重复请求),建议使用视频点播的转码模板对视频进行转码后播放,相关操作请参见音视频转码。
上传到视频点播中的图片资源,如何通过图片链接访问时,直接预览,而非下载?
存储在视频点播中的图片需要使用自有域名才能够打开预览,使用默认的域名进行访问时会强制下载。您可以将自有域名添加到视频点播中,相关操作请参见添加加速域名。
SSL证书相关问题
视频在部分电脑上无法正常播放,并报错误码4400
错误码4400
指示由于服务器或网络原因不能加载资源,或者格式不支持。请确认是否配置了SSL证书。
播放地址相关问题
存储在视频点播中的视频,如何生成短链接形式的视频播放地址?
若存储视频的存储地址权限为私有,其播放地址会携带一串鉴权信息,体现为长链接形式;若存储视频的存储地址权限为公共读或公共读写,则对应的播放地址不会携带后面一串鉴权信息,体现为短链接形式。存储地址的权限说明及修改请参见管理存储Bucket。
存储地址权限为公共读或公共读写时,存在被盗链、非法下载的风险,不建议设置。
设置了转码格式为HLS之后,为何无法播放不转码的视频?
使用阿里云播放器通过VID+Playauth方式只能播放转码后的视频。不转码的视频,只能通过URL方式播放,可通过GetMezzanineInfo - 获取源文件信息接口获取原视频地址或登录视频点播控制台查看视频地址。
视频点播中存储的视频,其播放地址是不固定的吗?
当存储视频的存储地址权限为私有时,其对应的播放地址具有时效性,播放地址中auth_key
所携带的鉴权字符串会根据设置的过期时间有所差异。
如需获取到固定不变的播放地址,则需修改存储视频的存储地址的权限为公共读或公共读写,对应生成的播放地址,只取?
之前的内容,则可以得到一个固定地址,可以一直使用这个地址进行播放。存储地址的权限说明及修改请参见管理存储Bucket。
存储地址权限为公共读或公共读写时,存在被盗链、非法下载的风险,不建议设置。
视频上传到视频点播后,将播放地址发送到淘宝等平台播放时,为什么要跳转到浏览器才能播放?
视频的播放取决于浏览器和本地设备的解码能力,所以通常都是要跳转到浏览器播放。
视频刷新上传后,为什么播放视频时并未出现新的视频?
视频更新后,您需要执行刷新URL的操作获取最新数据。通过视频点播控制台刷新,请参见刷新预热。通过API或SDK刷新,请参见PreloadVodObjectCaches - 预热缓存或RefreshMediaPlayUrls - 提交音视频刷新或预热任务。
播放器中如何获取到视频里每一帧的像素?
Android播放器:可通过监听
OnRenderFrameCallback
回调获取。iOS播放器:可通过监听
onRenderingFrame
回调获取。player.renderingDelegate = self; #pragma mark CicadaRenderingDelegate - (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{ if(frameInfo.frameType==Cicada_FrameType_Video){ // 视频 NSLog(@"receive HW frame:%p pts:%ld foramt %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer)); } else if (frameInfo.frameType==Cicada_FrameType_Audio){ // 音频 } return NO; }
Web播放器:暂不支持获取。
上传到视频点播中的AVI格式视频,为何无法通过API或SDK方式获取到播放地址?
GetPlayInfo - 获取音视频播放地址接口暂不支持获取AVI格式的视频流,因此基于此接口实现获取播放地址的SDK也无法获取到AVI格式的视频流。
您可以通过视频点播控制台查看AVI视频的播放地址,详细内容请参见查询音/视频。
播放卡顿相关问题
有哪些措施可以改善视频播放卡顿,提升命中率?
可从如下方面提升命中率:配置URL鉴权、刷新预热、缓存配置、过滤参数。
拖动视频的进度条到视频中间播放时,播放卡顿
当视频本身的关键帧太少时,导致拖动时需要大量加载前后的关键帧才能计算出来对应的画面,也就出现了卡顿现象。这种情况下,建议对视频进行转码处理,可以达到增加关键帧的效果,从而缓解卡顿。转码操作请参见音视频转码。
视频封面相关问题
视频点播获取视频封面失败
视频点播控制台默认为HTTPS协议,只有支持HTTPS协议才可以直接预览并且显示截图。也可以打开浏览器开发者工具查看具体报错。
视频审核相关问题
视频点播人工审核无法播放视频
视频点播有两种审核模式,审核模式如果设置为先审后发,则需要审核完成后才能播放视频。两种审核模式区别如下:
先发后审:视频转码成功后默认标记为正常状态,可直接播放,后续需要在视频审核中进行人工审核确认,通过屏蔽操作后视频将不能播放。
先审后发:视频转码成功后默认进入审核流程,标记为审核中状态,只有审核通过(人工审核通过)后才可以播放。
参数解析问题
videoID是什么?为什么需要videoID?如何获取?
出于安全性考虑,用户使用点播上传媒体文件,将获得该文件的视频ID(videoID),而非URL地址。用户也可以通过点播OpenAPI获取,更多内容,请参见:获取音视频播放地址。
使用点播上传完成之后,会获取到一个videoID。
videoID也可以在阿里云点播控制台获取,操作流程如下所示:
登录视频点播控制台。
在点播控制台左侧导航栏的媒资库区域,单击音/视频。
在视频列表内获取videoID(视频ID)。
可以通过控制台获取的videoID来做下载和播放的测试。如何实现点播上传见:上传SDK概述。
AccessKey Id和AccessKey Secret是什么?如何获取?
阿里云AccessKey Id和AccessKey Secret是您访问阿里云API的唯一凭证。AccessKey Id是类似身份的标识,而AccessKey Secret的作用是签名您的访问参数,以防被篡改。AccessKey Secret类似您的登录密码,不要向任何人泄露。
获取操作:
登录视频点播控制台。
将鼠标悬浮在上方菜单栏的用户区域,在弹出的快捷菜单中单击AccessKey管理。
在AccessKey管理页面,创建AccessKey,或者查看已有AccessKey Id的AccessKey Secret。
playKey是什么?如何获取?
playkey(apikey):播放密钥,用于播放器SDK获取视频播放地址时验证身份,播放鉴权是视频点播在阿里云AK安全认证基础上的二次鉴权机制,可有效防止盗链。根据用户播放时可能使用的平台,默认提供Flash、H5、iOS、Android四个平台的播放密钥。
为保证密钥安全,查看播放密钥时需要输入手机号验证码确认身份。
获取操作:
登录视频点播控制台。
在点播控制台左侧导航栏的配置管理区域,选择
。开启安全下载模式。在获取密钥中,填写APP唯一标识和离线解密私钥。
单击生成密钥并下载。
playauth是什么?如何获取?
目前播放器播放视频分为三种模式,对应三种不同的使用场景。使用playauth的方式最安全,建议使用setAuthInfo的播放模式来实现。
playauth可以理解为点播服务将所有的信息(videoID、AccessKey Id、AccessKey Secret)都进行混合再做加密操作,用户拿到的就是一串包含多个信息的数据,播放器就可以播放。
播放模式 | 适用场景 | 优劣 | 是否建议使用 |
setDataSource | 适用于测试 | 有泄露风险,需要将自己的AccessKey Id和AccessKey Secret直接写入客户端代码中,客户端如果被破解将有泄露风险。 | 不建议商用时上线使用 |
setAuthInfo | 适用于正式商用 | 安全,所有的视频地址和链接都不暴露。 | 建议商用使用 |
播放本地和网络URL | 可以播放本地视频且能够播放视频URL | 简单,可以播放其他平台的视频。 | 在有播放本地视频需求和播放网络视频需求时使用 |
流程:
。获取播放凭证:用户在服务器侧通过调用播放鉴权SDK(Server端的SDK),向视频点播服务获取播放凭证。
完成视频播放:播放器SDK根据视频ID和播放凭证向视频点播服务获取视频的播放地址,从而加载视频流并解码完成播放。
播放凭证时效为100秒,只能用于获取指定视频的播放地址,不能混用或重复使用。如果凭证过期则无法获取播放地址,请重新获取凭证。
播放器SDK根据播放凭证会自动获取播放地址进行解码播放,播放地址的时效为30分钟,若播放凭证失效请重新获取播放凭证,并回传给播放器SDK用于刷新播放地址。
为保障主账号安全,建议使用子账号的AccessKey,尤其在Web播放场景下。