常见问题
更新时间: 2022/08/16 11:54:32
直播点播通用问题
影响直播效果的因素有哪些?
直播需要经过下列过程:
Ⅰ 推流部分:从主播设备到推流服务器
Ⅱ 拉流部分:从拉流服务器到观众设备
- 正确的参数设置,良好的设备性能,充足的网络带宽,稳定的网络连接,才能确保主播推流和观众拉流的质量和效果;
- 主播进行推流,需要使用网络的上行带宽,而有些网络类型上行带宽远远低于下行带宽,容易导致主播网络连接的质量问题。因此对于网络上行带宽,直播前需提前测试,直播中要重点关注;
- 如果推流环节出现问题,所有观众都会受到影响;如果拉流环节出现问题,则部分观众会受到影响。
影响直播效果的具体因素包括:
1 主播设备 和 6 观众设备
- 主播设备设置的直播音视频参数
- 主播设备和观众设备的硬件性能和编解码能力
- 观众设备选择的播放协议
2 主播网络 和 5 观众网络
- WIFI容易出现信号差、网速慢、连接不稳定的情况;
- 如果WIFI网络直播推流出现问题,请更换4G进行对比。
- 如果使用PC推流的话,建议使用有线LAN连接,避免使用WIFI。
- 主播和观众都需要经过运营商的网络才能连接到服务器。如使用二级运营商的网络,或者跨运营商进行连接时,可能遇到性能问题,影响连接效果。
3 推流服务器 和 4 拉流服务器
- 服务器资源分配和工作情况也可能影响直播效果。但是服务器出现问题的概率极低,绝大多数情况都是主播和观众网络问题造成的。
推拉流过程出现问题怎么办?
根据您遇到的问题:
- 请更换设备进行对比测试;
- 请编译运行我们的Demo进行对比测试;
- 如果是WIFI相关的网络问题,请更换4G进行对比测试。
如果问题是可复现的,请提供以下相关信息:
①您的设备信息
- Windows:操作系统版本
- Android:品牌、机型、安卓系统版本、厂商系统版本(设置 > 关于手机,截图发给我们)
- iOS:机型、系统版本(设置 > 通用 > 关于手机,截图发给我们)
- Web:浏览器版本
②Demo或SDK信息
Demo或SDK的类型、版本号
③请描述问题的触发条件、操作步骤、接口调用顺序。
④请提供问题相关的程序代码、报错信息、错误日志、时间节点。
我们将根据您提供的信息,进行排查分析,尽快向您反馈结果。
怎么查看直播推流和播放器SDK版本号?
各SDK获取版本号的接口如下:
- Windows推流器:Nlss_GetVersionNo
- Android推流器:getSDKVersion
- iOS推流器:getSDKVersionID
- Web推流器:getSDKVersion
- Windows播放器:Nelp_GetSDKVersion
- Android播放器:getVersion
- iOS播放器:getSDKVersion
- Web播放器:getVersion
初始化实例以后,在实例下调用对应方法。
推流分辨率和码率(带宽)建议?
推流分辨率和码率(带宽)存在对应关系。
如果设置的码率(带宽)过低,则无法保证传输的视频质量;
如果设置的码率(带宽)过高,则对网络带宽质量要求较高。
建议的对应关系如下:
编码分辨率和帧率 | 码率 | 示例 |
---|---|---|
1280*720@20fps | 1500kbps | Android推流Demo,HD |
960*720@20fps | 1000kbps | |
960*540@20fps | 800kbps | |
960*540@15fps | 650kbps | iOS推流Demo,LS_VIDEO_QUALITY_SUPER |
640*480@20fps | 600kbps | Android推流Demo,SD |
640*480@15fps | 500kbps | iOS推流Demo,LS_VIDEO_QUALITY_HIGH |
640*360@20fps | 500kbps | |
480*360@15fps | 300kbps | iOS推流Demo,LS_VIDEO_QUALITY_MEDIUM |
320*240@15fps | 250kbps | Android推流Demo,Fluency |
观众端如何和主播端同步直播状态,以提升用户体验?
默认情况下,观众端播放器SDK不会和主播端直播推流SDK同步直播状态。
如果可以拉流,则正常播放;如果拉流失败,则等到30秒钟后超时,报告播放失败。(Android/iOS/Web播放器都可以自定义超时时间)
如果要同步直播状态,提升用户体验,则需结合您的应用服务器(AppServer)来处理,参考方法如下:
应用服务器需要维护下列对应关系(以下仅为示例):
用户账号UserID — 直播间号码RoomID — 直播频道cid — 直播状态 LiveStatus。
- 首先,主播进入直播间以后,开始进行直播,当直播推流SDK报告开始直播成功通知的时候,APP向应用服务器发送消息,告知直播已经开始,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 1,并将处于此直播状态的条目展示到直播大厅的直播列表中; 相应地,观众端每次进入直播大厅的时候,要向应用服务器请求最新的直播列表。
- 在直播过程中,APP定期向应用服务器发送消息,以保持同步直播状态。
- 主播切后台的时候,APP向应用服务器发消息,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 2,并将此消息推送到同一直播间的所有观众端APP,当观众端APP收到此消息后,可进行提示,例如“主播暂时离开,请稍候”。
- 当主播结束直播的时候,直播推流SDK返回成功结束直播通知以后,APP向应用服务器发送消息,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 0,并将此消息推送到同一直播间的所有观众端APP,当观众端APP接收到此消息后,可进行提示,例如“直播已结束”。
异常处理:如果超过特定的预设时间,应用服务器仍然没有收到对应主播端发送的任何消息,可以再到网易服务器同步一下直播状态。如果网易服务器也返回该直播频道状态为“空闲”,可以判定主播已经异常结束。
(异常情况举例:手机没电,进程被杀,网络中断等,主播端任何消息都发不出来)
附:网易云信获取频道状态的接口,具体请见:直播服务端API文档(2.4 获取频道状态)
建议1:直播大厅列表可以允许所有观众查询,直播间消息只需对特定直播间内的用户进行同步推送即可。
建议2:刷新直播大厅列表时,一般都有图片,需要把图片进行缓存,已下载的图片不要再重新下载,这样既提升加载速度,也节省下载流量。当达到预设的缓存空间上限,或者APP退出时,再清除图片缓存。
互动直播简介
[注意]:互动直播和普通直播原理不一样,需要集成的SDK也不一样。请查看下列互动直播简介。
- 互动直播房间相当于一个小房间,只有主播和连麦者在里面。聊天室相当于一个大房间,主播、连麦者、观众都在里面。(主播和连麦者既在互动直播房间,又同时在聊天室中;观众只在聊天室中)
- 观众可以成为连麦者加入互动直播房间,连麦者也可以退出互动直播房间成为观众。
- 主播和连麦者相互之间的画面布局可以由开发者自行灵活控制和调整,观众只能看到指定布局模式的主播和连麦者的合成画面。
- 目前互动直播房间支持1个主播和最多3个连麦者(1+3),聊天室支持的观众数没有限制。
互动直播功能需要集成两个SDK:互动直播SDK和播放器SDK。
互动直播需要开发者准备以下信息:
- 网易云信云通信ID和token(对应用户账号和密码):网易云信IM账号和token通过IM服务端API创建后获取,由开发者应用服务器自行保存,并对应到开发者自有的用户账号和密码体系(也就是说,开发者可以将用户账号和密码与网易云信IM账号和token分离并建立对应关系,以提高灵活性和安全性)。调用SDK用户登录接口时,(主播、连麦者、观众)需要使用网易云信IM账号和token。
- 互动直播房间roomName:由开发者应用服务器自行维护,只要各个不同的互动直播房间roomName不冲突即可。调用SDK创建和加入互动直播房间接口时,(主播和连麦者)需要使用roomName。
- 聊天室roomid:通过IM服务端API创建后获取,由开发者应用服务器自行保存。调用SDK进入聊天室接口时,(主播、连麦者、观众)需要使用roomid。
- 直播频道cid及对应的推拉流地址:通过直播服务端API创建后获取,主播加入互动直播房间时需要使用推流地址进行直播,连麦者不需要使用推流和拉流地址,观众需要使用主播同一个频道下与其推流地址对应的拉流地址进行观看。
能否基于Demo直接修改开发?
Demo仅仅用于简单的、基本的功能展示,无法满足各种场景需求,更不是可以直接用于商用发布的最终产品。而且Demo有自己的内部逻辑,直接修改的话可能导致无法达到预期,甚至出现运行异常。
您应该仔细阅读我们的开发指南,参考Demo的部分代码,以及API文档,结合您的业务需求,集成SDK进行开发。
网易云信有多少CDN节点?
全球500多个CDN节点。覆盖中国所有省市。
支持哪些直播源?
直播目前支持RTMP协议的推流,具体可以采用以下几种形式:
- 台式机或笔记本,可以使用网易云信的Windows端直播推流SDK或者Demo程序采集电脑自带的,或者外置连接的USB摄像头的视频,将视频编码后推送至网易云信CDN。
- 如果要采集摄像机的视频,可以通过相应的硬件采集卡、编码器或转换器连接到台式机或笔记本,再通过Windows端直播推流SDK或者Demo程序进行直播推流。
- Android和iOS,使用手机摄像头,可通过Android/iOS推流端SDK或者Demo程序采集摄像头视频,将视频编码后推送至网易云信CDN。
如何获取(主播/直播)推流地址和(观众/播放)拉流地址?
请到网易网易云信官方网站注册账号(网页右上角有注册按钮);
- 注册登录以后,创建应用并点击“立即开通”直播服务。请联系商务顾问协助开通;
- 开通以后,可以进入直播管理新建频道。频道建立后,点击频道后面对应的“地址”;
- 地址页面中提供(主播/直播)推流地址和(观众/播放)拉流地址。
可以使用我们的各平台Demo来进行直播推流和播放测试。
关于推流地址和拉流地址(支持的直播协议)
目前支持的(主播/直播)推流地址为:
- RTMP推流:rtmp协议,域名为字母p开头。
例如,rtmp://p12345678.live.126.net/live/abcdefghijklmnopqrstuvmxyz123456?wsSecret=abcdefghijklmnopqrstuvwxyzxyzxyz&wsTime=1234567890
(观众/播放)拉流地址为:
- HTTP-FLV拉流:http协议,域名为字母v或flv开头,格式为.flv。
例如,http://v12345678.live.126.net/live/abcdefghijklmnopqrstuvmxyz123456.flv?netease=v12345678.live.126.net
或者,http://flvdl12345678.live.126.net/live/abcdefghijklmnopqrstuvmxyz123456.flv?netease=flvdl12345678.live.126.net - HLS拉流:http协议,域名为字母pullhls开头,格式为.m3u8。
例如,http://pullhls12345678.live.126.net/live/abcdefghijklmnopqrstuvmxyz123456/playlist.m3u8 - RTMP拉流:rtmp协议,域名为字母v开头。
例如,rtmp://v12345678.live.126.net/live/abcdefghijklmnopqrstuvmxyz123456
各种播放环境支持哪些拉流地址
播放环境 | RTMP | HTTP-FLV | HLS (m3u8) | 备注 |
---|---|---|---|---|
Android Demo/SDK | √ | √ | √ | |
iOS Demo/SDK | √ | √ | √ | |
Web Demo/SDK | * | * | * | *RTMP和HTTP-FLV协议需要Flash支持HLS协议需要Flash或HTML5支持 |
第三方播放器 | * | * | * | *根据播放器解码支持情况 |
HTML5浏览器 | - | - | √ | HTML5浏览器使用HLS协议 |
微信 | - | - | √ | 微信使用HLS协议 |
各播放拉流协议的比较
协议 | 简介 | 延迟 |
---|---|---|
RTMPReal Time Messaging Protocol | Adobe的专利协议。安装Flash Player即可播放。是国内的主流直播协议。RTMP基于TCP,默认使用端口1935。 | 2-5秒 |
HTTP-FLVHypertext Transfer ProtocolFlash Video | 无需Adobe专利。流式传输媒体内容。使用HTTP协议,基本不受防火墙限制。 | 2-5秒 |
HLSHttp Live Streaming | 苹果公司提出的基于HTTP的流媒体传输协议。HTML5浏览器可以直接打开播放。 | 10秒左右 |
如果推拉流网络很差,或者网络中断,那么服务器上的直播和录制状态,以及拉流端的播放状态,保持时间是多长?
- 如果推拉流网络彻底中断,和服务器的连接断开,则服务器立即结束直播和录制,拉流端直接报错。
- 如果连接还在,但是没有媒体数据,那么:
1、对于推流端来说,服务器会保持1分钟的等待时间,如果超过1分钟仍然没有收到推流端的媒体数据,则服务器结束直播;
2、对于录制来说,服务器会保持30秒的等待时间,如果超过30秒仍然没有收到媒体数据,则服务器结束录制;
3、对于拉流端来说,会保持30秒的等待时间,如果超过30秒仍然没有收到服务器的媒体数据,则拉流失败报错。
[注意] iOS和Android播放器支持通过setPlaybackTimeout方法自定义超时时间,Web播放器支持通过streamTimeoutTime参数自定义超时时间。
观众观看直播时能选择清晰度吗?
可以,我们提供了直播实时转码功能,支持不同分辨率、码率的拉流地址供客户自行选择。
实时转码功能有哪些特点?如何收费的?
功能介绍&适用场景
实时转码可能适用的场景包括但不限于:
- 拉流端网络情况较差,为了能流畅播放,需要较低的分辨率和码率
- 推流端超高清(分辨率较高甚至大于1920*1080),但因某种原因,人为希望拉流端维持特定的或较低的分辨率、码率。
当前版本的实时转码功能,会根据固定的实时转码模板,给出若干不同档分辨率和码率的拉流地址,可以支持客户在拉流端自行选择。
功能特点
- 等比例缩放。无论推流原视频分辨率比例如何,实时转码后都是等比例放大缩小的,不会产生拉伸扭曲
- 无须变更推流域名。
- 按照实际使用情况付费。客户开通实时转码后,实际产生转码拉流才会产生额外的时长费用;未实际产生转码拉流则不会收取时长费用,仅收取普通直播的流量/带宽费用。
- 与目前提供的防盗链、回源鉴权功能兼容。
实时转码模板说明
- H1、H2、H3、H4模板均为限定高度,宽度由原视频尺寸等比放大缩小而来
- S1、S2、S3模板均为限定宽度,高度由原视频尺寸等比放大缩小而来
模板名 | 限定分辨率/码率上限 | 对应目标分辨率 | 备注 |
---|---|---|---|
_H1 | 高度限定为720,码率上限1600k | 720p(1280x720) | 适用于横屏拉流 |
_H2 | 高度限定为540,码率上限1000k | 540p( 960x540) | 适用于横屏拉流 |
_H3 | 高度限定为360,码率上限600k | 360p(640x360) | 适用于横屏拉流 |
_H4 | 高度限定为180,码率上限300k | 180p(320x180) | 适用于横屏拉流 |
_S1 | 宽度限定为540,码率上限1000k | 540p(540x960) | 适用于竖屏拉流 |
_S2 | 宽度限定为360,码率上限600k | 360p(360x640) | 适用于竖屏拉流 |
_S3 | 宽度限定为180,码率上限300k | 180p(180x320) | 适用于竖屏拉流 |
限制说明
目前本期实时转码功能对 宽度:高度 < 16:9 的推流视频源有较好支持。例如4:3的推流视频源,若最终想要获得16:9的拉流输出效果,在我们提供的实时转码能力基础上,还需要再借助播放器自动补黑边的能力。此例中选取H1实时转码模板后拉流效果示意图如下:
其中,H1模板输出固定高度720,宽度由等比例放大缩小而来;H2、H3、H4模板也都是类似的。
- 由于涉及人工配置,实时转码功能的生效,需以人工通知为准。
- 与普通拉流相比,会略微产生额外的时延
- 直播录制开通后仅录制原始码流,实时转码码流不会录制。
直播实时转码功能计费说明
因为在转码过程中消耗了机器的转码性能,因此开通了实时转码功能的直播服务,在使用中产生实时转码拉流观看时将会产生实时转码时长费用;未发生实时转码拉流观看时,不会产生实时转码时长费用,但仍然会产生流量或带宽费用,按普通直播收费方式计费。
实时转码计费方式
按时长计费,后付费。出账费用 = 月度转码总时长 * 单价
计费单价
实时转码时长计费单价为 0.1元/分钟
时长统计
转码总时长计算方法为:每个码流转码时长的总和。服务端将会统计您当前域名下的转码总时长,统计数据单位为分钟,不足一分钟的四舍五入。
码流:每一个频道下,每一个产生实际拉流观看的转码模板档位,都算作一路码流。
一路码流的转码时长:该路码流从第一个观众开始拉流观看开始,到最后一个观众拉流结束为止,期间占用转码机器的时长即为该路码流转码时长。例如该路码流第一个观众从8点开始观看,后又有99个观众陆续加入观看,最后一个观众在10点停止了观看,则该路码流转码时长为8点到10点的2小时。100个观众从8点到10点看,和1个观众从8点到10点看,这两种情况时长费用相同,流量费用有差别.
统计能力说明
数据统计方面,当前仅支持统计域名级别转码总时长,暂时不支持查询更细粒度转码时长详情
收费示例
假设某账号直播以流量1元/GB、转码时长0.1元/分钟计费,其下有应用1和应用2,开通实时转码后,应用1有频道A,应用2有频道B、频道C和频道D。
- 频道A使用原始拉流地址,消耗流量aGB
- 频道B使用H1实时转码档位拉流,消耗了流量bGB,码流H1转码时长为b1分钟
- 频道C使用H1和H2实时转码档位拉流,总共消耗了流量cGB,此频道的码流H1、码流H2转码时长分别为c1分钟和c2分钟
- 频道D使用原始拉流地址和H1、H2实时转码拉流档位拉流,总共消耗了dGB,此频道的原始码流、H1码流、H2码流转码时长分别为0分钟、d1分钟和d2分钟
则 最终收费 =(a+b+c+d)x1 +(b1+c1+c2+0+d1+d2)x0.1
视频无法播放,常见原因有哪些?
- 视频流不存在
对于直播,确保频道未被禁用,而且需要主播开始推流后,观众才能使用拉流地址观看。
对于点播,确保文件存在,未被删除、屏蔽。 - 开启了安全功能
确认是否开启了拉流防盗链、回源鉴权、内容加密等安全功能。
开通相应功能后,需要按照说明获取有效的拉流信息。 - 拉流地址错误
确保观众获取、使用的是正确的拉流地址,避免传递或输入错误。 - 网络连接异常
确保观众网络连接正常稳定。
播放视频时出现卡顿,常见原因有哪些?
- 视频源本身不正常
- 网络可用带宽低或连接信号差
- 设备性能较差,解码能力较低
- 设备运行的程序或应用过多,导致处理速度慢
能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?
可以。请参考以下方法进行设置。
- 使用OBS进行直播
设置 > 串流 > 串流类型:自定义流媒体服务器
URL:填写网易服务器提供的推流地址中,从头到live的部分,例如:
rtmp://p12345678.live.126.net/live
流密钥:填写网易服务器提供的推流地址中,live后面的部分,例如:
abcdefghijklmnopqrstuvmxyz123456?wsSecret=abcdefghijklmnopqrstuvwxyzxyzxyz&wsTime=1234567890 - 使用FMLE进行直播
FMS URL:填写网易服务器提供的推流地址中,从头到live的部分,例如:
rtmp://p12345678.live.126.net/live
Backup URL:不填
Stream:填写网易服务器提供的推流地址中,live后面的部分,例如:
abcdefghijklmnopqrstuvmxyz123456?wsSecret=abcdefghijklmnopqrstuvwxyzxyzxyz&wsTime=1234567890
使用OBS推流时出现卡顿,怎么解决?
- 设置合理的关键帧间隔
设置 > 输出 > 输出模式:高级 > 关键帧间隔:3 - 降低输出的分辨率和码率
选中“重新缩放输出”,适当降低分辨率
比特率:参考分辨率与码率建议,设置与分辨率对应的码率(也就是比特率)
- 如果直播培训、讲座、PPT等内容,可以降低帧率:
设置 > 视频 > 常见的FPS值:20
设置完成后,记得点确定保存。
使用OBS推流时出现噪音,怎么解决?
下面以OBS 17.0.0 (64bit, windows)为例进行说明:
在OBS主界面,点击“麦克风/Aux”下面的齿轮图标 > 滤镜;
在弹出窗口中,点击左下角的加号图标(+) > 噪声抑制 > 确定;
随后将“抑制程度(dB)”滑杆移动到最左边(-60),关闭窗口。
直播点播服务端问题
如何查看直播和点播数据统计?
登录网易云信控制台,在数据统计页可以查看带宽统计、流量统计等统计信息。
点播统计数据也可以通过点播服务端API接口进行查询(直播暂未提供API查询接口)。
我选择了按带宽计费,为什么其它时间计费都是0,而月末最后一天计费特别高?
因为按每月带宽峰值计费,只有当一个月结束时,才能统计当月带宽峰值。
所以只有月末最后一天计费,并且是按当月带宽峰值计费。其它时间计费都是0。
网易云信控制台 > 数据统计 > 直播/点播 > 带宽/流量图表的粒度是怎样的?
(1)流量按天统计。
(2)带宽分以下几种情况:
- 查询时间起止范围小于等于1天,则数据按10分钟为单位显示;
- 查询时间起止范围大于1天,小于等于1周,则数据按1小时为单位显示;
- 查询时间起止范围大于1周,小于等于1月,则数据按4小时为单位显示;
- 查询时间起止范围大于1月,则数据按1天为单位显示。
视频转码后的视频清晰度和尺寸如何?
网易云信点播转码模板目前提供3种视频转码格式和3种清晰度,共计9种不同的清晰度视频格式,其中各个清晰度的码率和分辨率分别如下:
- 流畅:码率600kbps,分辨率640×360;
- 标清:码率900kbps,分辨率960×540;
- 高清:码率1500kbps,分辨率1280×720。
如上传的视频分辨率和以上分辨率不一致,则在转码时,将按照以上标准尺寸按比例缩放输出文件。
若上传的视频分辨率本身较小,但选择了高清的转码格式,则系统仍然会按照设置的高清格式进行转码。但因为视频本身清晰度较低,用户体验可能较差。
直播频道有哪几种状态?
共有4种状态:
- 空闲:该频道当前没有进行直播,或正在进行直播但服务器检测不到直播状态;
- 直播中:服务器检测到该频道正在进行直播;
- 直播录制中:服务器检测到该频道正在进行直播,并且正在对其进行录制;
- 禁用:频道已被禁用,无法进行直播。
关于服务端API校验用的CurTime
表示当前UTC时间戳,从1970年1月1日0点0分0秒开始到现在的秒数。
需要传递整数。
创建直播频道有限制吗?
创建直播频道,没有数量限制。
频道名称最多支持64个字符。
创建直播频道,名称支持哪些字符?
支持:中文、字母、数字、下划线(其它字符不支持)。
开启录制,视频名称支持哪些支持?
支持:中文、字母、数字(其它字符不支持)。
服务器提供的直播推流地址会自动刷新?
是的,自动刷新功能用于服务器校验,起到防盗链的作用。
如果启用了防盗链,地址刷新以后,旧地址就会失效,只有新地址可用。
如果没有启用防盗链,则新旧地址都是可用的。
什么是防盗链?
就是服务器提供的推流地址会自动刷新,刷新后旧地址就会失效,只有新地址可用。
这样别人即使获取了你以前使用过的推流地址,也是无法推流的,防止别人盗用。
我不需要启用防盗链怎么办?
请联系网易云信技术支持后台关闭防盗链。
点播播放防盗链使用手册
需要启用防盗链的客户,请主动向网易云信商务顾问提出申请,后台审核确认后为您开通。
防盗链原理
通过网易云信CDN加速节点与客户应用服务器的相互配合,防止视频资源的盗播。 请求的流转过程:
- 视频云服务提供包含权限验证信息的URL(可通过调用服务端API获得)。
- 您使用加密后的 URL 发起请求。
- 加速节点收到请求后对URL中的权限信息进行验证,正常响应合法请求,拒绝非法请求。
修改配置的常见场景
-
场景A
当旧key已泄露并产生严重盗链,需要尽快禁用旧key和现有的线上播放地址的情况,请参考以下步骤:
- 登录用户管理控制台,进入对应的点播播放防盗链配置修改页面
- 在主key位置,将旧key删除,并输入一个新key
- 点击确定保存,让主key位置的新key生效。此时管理控制台文件下的地址为基于主key的播放地址(即更新为基于新key的播放地址)。
请注意:由于CDN对于配置需要一个生效的过程,旧key和新key都需要一定时间后才能分别失效和生效,这个时间大约需要3分钟左右,期间您可以调用服务端API接口来生成一个视频的播放地址,通过观察其是否可以被播放来检测生效结果。
-
场景B:
旧key希望进行作废,同时希望现有的线上的播放地址持续可用,最终平稳过渡,请参考以下步骤:
- 登录用户管理控制台,进入对应的点播防盗链配置修改页面
- 在备key位置,输入一个新key
- 点击确定保存,让备key位置的新key生效。此时管理控制台文件下的地址为基于主key的播放地址(即仍然为基于旧key的播放地址)。 请注意:由于CDN对于配置需要一个生效的过程,旧key和新key都需要一定时间后才能分别失效和生效,这个时间大约需要3分钟左右,期间您可以调用服务端API接口,使用新key来生成一个视频的播放地址,通过观察其是否可以被播放来检测生效结果。
- 新key观察到已生效,或等待足够长的时间后,此时可以删除旧key。基于您的业务侧评估,线上不再有固定写死的旧播放地址时,执行删除旧key的操作。
- 回到点播播放防盗链配置修改页面,将主key位置的旧key删除,输入新key,点击确定保存。
- 此时已完成平稳过渡,备key位置的内容您可自行定夺。
直播推流地址有效期多久?
永久(没有启用防盗链的情况下)。
直播推流地址什么情况下会失效?
启用了防盗链并且超时的情况下。
如果正在正常直播的话,不会因为地址失效而受影响,直播结束后地址才失效。
防盗链超时时间是多久?
默认两小时超时刷新。
如果您在两小时内通过网页打开了频道地址页面,或者通过API接口重新获取地址,则会立即刷新。
直播能录制吗?(直播视频能保存吗?)
我们提供直播录制服务。
您可以自行在直播频道中通过管理控制台或服务端API接口启用对该频道的录制(系统默认不启用)。
启用以后,直播过程中,会自动进行录制。直播结束后,自动生成录制文件。
录制文件保存在网易服务器上。
您可以随后对录制文件进行下载、点播、删除操作。
直播录制后,录制文件和直播频道怎么关联?
通过cid(直播频道ID)关联。
如果删除了直播频道,还能通过cid查询其关联的录制文件吗?
频道一旦删除,该频道对应的cid即被删除,无法再通过cid查询其关联的录制文件。
如果删除了直播频道,关联的录制文件会被删除吗?
不会。频道删除后,录制文件仍然存放在“云点播 > 视频管理 > 直播录制”分类下。
但是无法再通过直播频道的cid进行查询。
直播推流录制过程中,可以停止录制吗?
可以,停止以后生成的录制文件只有停止前的部分。
直播录制的切片长度是什么意思?
直播管理 > 频道管理 > 录制 > 切片长度:
切片是指直播录制过程中,生成单个录制文件的最大时间长度。
每次超过这个切片时间长度,就生成一个新的录制文件。
切片长度范围:5 — 120分钟。
直播录制后,怎么查询录制文件?
直播结束后,要过一会儿才能生成录制文件。所以建议在直播结束10分钟后再查询录制文件。
也可以设置直播录制回调,当录制文件生成后,主动通知您的服务器。
-
官网管理控制台查询:
点播管理 > 视频管理(录制文件存放在“直播录制”分类下)
点击文件对应的“地址”可以查看下载和播放地址。 -
服务端API查询:
步骤1:
方法①:
调用直播服务端API“获取录制视频文件列表”接口,传入cid(频道ID),返回vid(视频文件ID);
方法②:
调用直播服务端API“设置视频录制回调地址”接口,传入回调地址,设置录制回调。
当录制文件生成后,会将文件信息推送到该地址,其中包含vid(视频文件ID)。
步骤2:
调用点播服务端API“获取视频文件信息”接口,传入vid(视频文件ID),返回下载和播放地址。
为什么查询不到直播的录制文件?
关于直播录制的注意事项如下:
- 直播频道需要开启录制后才会进行录制。
- 直播结束后,服务器需要进行处理,要过一会儿才能生成录制文件。
所以建议在直播结束10分钟后再查询录制文件;或者设置直播录制回调,当录制文件生成后,主动通知您的服务器。 - 录制依赖直播状态,如果服务器检测不到直播状态,将不会进行录制。具体请参考下表。
直播环境、能否检测直播状态、能否录制之间的关系:
直播环境 | 能否监测直播状态 | 能否录制录制依赖直播状态能监测直播状态才能录制 | 备注 |
---|---|---|---|
Windows Demo/SDK | √ | √ | |
Android Demo/SDK | √ | √ | |
iOS Demo/SDK | √ | √ | |
Web Demo/SDK | √ | √ | |
第三方推流软件/应用 | ! | ! | 需要向商务申请开通才能检测状态/进行录制 |
- 直播频道删除后,无法再调用服务端API通过频道ID(cid)查询其对应的录制文件。
- 如果通过服务端API查询录制文件,请注意时间范围,不在指定的时间范围内也查询不到。
- 如果频道被禁用,将无法进行正常直播,也无法生成录制文件。
- 关于服务端API“设置频道为录制状态”的特别说明:
该接口是用来控制直播频道开启和关闭录制功能的开关,不是开始和停止录制的开关。
直播频道开启录制后,只要服务器检测到直播开始状态,就会自动开始录制;直播结束以后,录制就会自动结束。
因此,要停止录制,正常结束直播即可。不要在直播过程中调用服务端API“设置频道为录制状态”来关闭录制。
关于直播API接口“禁用频道”和“恢复频道”的特别说明
禁用和恢复频道用于内容监控,即当发现主播正在播出违规等不适当的内容时,将该频道禁用。
禁用和恢复接口时,服务器需要将指令下发到全部节点,所以会有一定延迟。
注意不要将此接口作为日常的停止频道用途。
主播结束直播后,频道会自动变为空闲。
频道可以删除,也可以启用防盗链防止恶意使用。
云点播支持哪些视频格式上传?
支持RMVB、WMV、ASF、AVI、3GP、MPG、MKV、MP4、DVD、OGM、MOV、MPG、MPEG、MPE、FLV、F4V、SWF、M4V、QT、DAT、VOB、RMVB、RM、OGM、M2TS、MTS、TS、TP、WEBM等格式上传。
但是只支持MP4、FLV和HLS进行点播/播放。
其它格式上传时,需要通过自定义模板转码为支持的点播/播放格式。
点播文件上传的方式有哪些,是否支持断点续传?
可以通过浏览器操作和服务端API接口上传,支持断点续传。
- 浏览器操作:登录管理控制台,应用 > 点播 > 视频管理 > 上传视频。
建议使用Chrome、Firefox、IE10以上浏览器操作。 - 服务端API接口:请参考点播服务端API文档,章节 “6 文件上传”部分。
- 上传SDK:SDK下载页面 > 直播点播 > 点播上传。
通过服务端API上传文件,需要调用哪些接口?
请参考点播服务端API文档,章节 “6 文件上传”部分。
6.1 文件上传初始化
6.2 获取上传加速节点地址
6.3 文件数据上传
6.4 断点续传查询断点
6.5 上传完成根据对象名查询视频或水印图片ID
另外,我们还提供有上传SDK可以参考和使用。
文件上传成功后能否立即点播或下载?
- 视频上传时如果没有选择转码,那么上传成功后可以立即点播和下载。
- 如果选择了自定义的转码模板,那么上传成功后,系统会对这个视频进行转码处理。
转码期间无法点播和下载,转码成功后可以正常点播和下载。
为什么点播视频文件转码后清晰度降低了?
视频转码后,如果选择了清晰度较低的格式播放,那么清晰度相比源视频会降低。
怎么对视频增加图片水印?
请参考点播服务端API文档,依次调用下列服务端API接口:
- 6 文件上传(6.1—6.5)(也可以通过上传SDK上传)
将视频文件上传到服务器,返回vid(视频ID);
将水印图片(目前只支持jpg格式)上传到服务器,返回imageId(视频水印图片ID); - 3.1 创建视频转码模板
返回presetId(视频转码模板ID); - 4.1 创建视频水印模板
输入imageId,返回watermarkId(视频水印模板ID); - 8.3 设置回调地址接口
输入转码回调URL地址; - 8.1 对视频文件转码
输入vid、presetId、watermarkId,等待转码完成; - 5 视频文件管理
调用“5.1 获取视频文件信息”或“5.2 获取视频文件信息列表”获取视频文件下载和播放地址。
视频可以添加文字水印吗?
可以添加文字水印,目前支持以下两种方式:
方式一:通过模板添加文字水印
- 调用3.1节创建转码模板接口,在transConfig字段中加入文字水印配置信息
- 调用8.1节视频转码接口发起转码,指定配置了文字水印的presetId即可
方式二:转码时动态添加文字水印
-
调用3.1节创建转码模板接口,在transConfig字段中加入文字水印配置信息
-
调用8.1节视频转码接口发起转码,在dynamicTransConfig字段中加入本次转码想要添加的文字水印配置信息,覆盖presetId对应的transConfig中相同presetType的文字水印配置,未被覆盖的presetType则按原有配置进行转码
场景举例:
(1)如果您想为一类用户创建一个相同的文字水印,建议您使用方式一为每类用户创建一个转码模板
(2)如果您想为每个用户创建一个个性化文字水印,建议您使用方式二在转码时动态添加文字水印
Java如何解析网易服务器回调的json字符串?
JSONObject json = JSON.parseObject(body); //将json字符串类型转化为JSONObject对象
name= json.getString("name"); //获取JSONObject对象的值
vid = json.getInteger("vid");
创建频道API,返回604,有哪些常见原因?
- Header未指定Content-Type: application/json;charset=utf-8
- Body不是标准的json字符串格式,或者不符合Content-Type。
[注意] 直播点播服务端API的Body均为application/json(字符串);
而IM服务端API的Body均为application/x-www-form-urlencoded(键值对)。 - AppKey错误
以下两种情况为多:
1 AppKey和AppSecret写反;
2 和其它应用的AppKey混淆。 - Body参数类型不正确。
1 name需要小写,为string类型;
2 type需要小写,为int类型。
使用直播服务端API创建频道后,名称显示问号等乱码。
- 如果使用Java语言:
请在请求的参数中加上Consts.UTF_8,例如:
StringEntity params = new StringEntity("{\"name\":\"test\", \"type\":0}",Consts.UTF_8);
网易云信开发手册 > Server > 直播功能API文档中,有请求示例。 - 如果使用C#:
请尝试定义:request.ContentType = "application/json";
直播录制和点播转码成功的回调,超时和重试机制是怎样的?
目前直播录制和点播转码成功的回调超时时间是3-11秒,超时后会重试,最多重试4次(总共最多尝试5次),重试的间隔时间分别是30秒、30秒、1分钟、1小时。
直播点播SDK问题
软硬编解码对比
优点 | 缺点 | 备注 | |
---|---|---|---|
软编解码 | 1、兼容性强,对系统版本要求比较低,出错少2、编解码可操作空间比较大,自由度高。 | CPU消耗比较大。 | |
硬编解码 | 功耗低,执行效率高 | GPU处理。因不同型号的芯片对编解码的实现会有不同,并不能保证编解码的效果与其它机型一致或者不会出错。可控性比较差。 | - iOS:需要8.0以上版本- Android:编码端需要4.3以上版本;解码端需要4.1以上版本。 |
显示问题怎么处理(比如:横屏、竖屏、旋转、拉伸、变形、黑边等)?
关于显示的问题,SDK只负责把视频数据发送到应用层,应用层用于显示。
至于应用层如何显示,因为不同的用户可能有不同的需求,所以SDK在这方面不做限制,由用户自行处理。
当然我们Demo中也给出了相关的示例,用户可以参考。
- Android:Android是通过SurfaceView进行显示,初始化的时候SurfaceView已经和底层进行绑定,SDK把数据发送到SurfaceView,要改变显示画面的大小就直接修改SurfaceView的大小就行,我们已经在Demo中给出了几种示例,用户可以参考。
- iOS:iOS是通过UIView进行显示,初始化的时候UIView已经和底层进行绑定,SDK把数据发送到UIView,我们的API有几种设置模式,是设置底层OpenGL的模式,应用层用户可以通过设置UIView的大小来调整。
比如用户设置了全屏模式,但是UIView只有屏幕的一半大小,这样是不可能全屏的。 - 至于Android没有API接口而iOS有,是因为两种系统不同,Android只能在应用层设置,而iOS需要先设置底层,然后才在应用层做处理。
- 至于变形的问题,是由于没有等比例拉伸导致的,我们Demo里已经给出了等比例拉伸和非等比例拉伸的示例,用户可以参考。
Android播放器怎么实现横竖屏切换无延迟不卡顿?
1、首先要在AndroidManifest.xml中相应的activity内加上:
android:configChanges="orientation|keyboardHidden"
2、然后在activity的代码部分逻辑处理中重载onConfigurationChanged事件,参考代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
3、监听到屏幕切换后更新UI。
如何设置SDK日志等级和路径?
- Windows推流器:
NLSS_RET Nlss_Create(const char *paLogpath, NLSS_OUT _HNLSSERVICE *hNLSService);
- Android推流器:
lsMediaCapturePara.logLevel = lsLogUtil.LogLevel.INFO;
lsMediaCapturePara.uploadLog = true; //是否上传SDK日志
- iOS推流器:
[_mediaCapture setTraceLevel:LS_LOG_INFO];
[_mediaCapture isLogToFile:YES];
streamparaCtx.uploadLog = YES; //是否上传SDK日志
- Windows播放器:
NELP_RET(*Nelp_Create)(const char *paLogpath, const _HNLPSERVICE *phNLPService);
- Android播放器:
mMediaPlayer.setLogPath(mLogLevel, mLogPath);
- iOS播放器:
[NELivePlayerController setLogLevel:NELP_LOG_DEBUG];
[self.liveplayer isLogToFile:YES];
各SDK资源释放完成后,会有哪些通知?
-
Android推流器:MSG_STOP_LIVESTREAMING_FINISHED
停止直播完成,异步调用,必须要收到这个消息才能重新初始化。 -
Android播放器:NELP_RELEASE_SUCCESS标识资源释放结束。
-
iOS推流器:调用unInitLiveStream释放资源:
[_mediaCapture unInitLiveStream];
-
iOS播放器:退出播放需要调用shutdown接口,退出成功会收到NELivePlayerReleaseSueecssNotification通知。
如果没有退出播放界面,在重新播放之前(如播放过程中切换URL)需要将创建的view释放掉:
[self.player.view removeFromSuperview];
并将播放器置为空:self.player = nil
;
[注意] 要等待收到资源释放成功的消息通知后,才能将监听资源释放状态的监听器释放掉,否则无法接收到资源释放成功的通知。 -
Windows播放器:退出播放需要调用Nelp_Shutdown接口,资源释放的过程是异步的,释放结束后会上报资源释放成功的消息。
开发者需要调用Nelp_RegisterResourceReleaseSuccessCB(_HNLPSERVICE hNLPService, P_NELP_RESOURCE_RELEASE_SUCCESS_CB pReleaseCB)
接口进行注册才能收到该消息。
观看直播过程中可以暂停播放吗?
不能。直播过程中,播放不能暂停,只能停止。
若要停止播放:
- Android播放器应调用release()接口退出播放。
- iOS播放器应调用shutdown(),并相应地执行:
释放View:[self.liveplayer.view removeFromSuperview];
置空播放器:self.liveplayer = nil;
- Windows播放器应调用Nelp_Shutdown(_HNLPSERVICE hNLPService)接口,并将播放器实例置为空。
锁屏对推流的影响?
- Android锁屏时和切后台表现一致。
- iOS锁屏时会断开Socket,所以推流会被中断。
支持纯音频直播吗?
Windows、Android、iOS、Web推流端都支持纯音频直播模式。
设置方法如下:
- Windows:
stParam.enOutContent = EN_NLSS_OUTCONTENT_AUDIO;
- Android:
mLSLiveStreamingParaCtx.eOutStreamType.outputStreamType = HAVE_AUDIO;
- iOS:
streamparaCtx.eOutStreamType = LS_HAVE_AUDIO;
- Web:
var myPublisher = new nePublisher('my-publisher', { video: false, audio: true });
支持混音/伴音吗?
Android和iOS推流端支持直播中播放背景音乐。
支持推流本地录制吗?
Android和iOS推流端支持直播中进行本地录制。
- Android
mLSLiveStreamingParaCtx.eOutFormatType.outputFormatType = RTMP_AND_FLV; //同时开启推流和本地录制
- iOS
[_mediaCapture startRecord:recordFileName]; //开始本地录制
[_mediaCapture stopRecord]; //停止本地录制
Android和iOS播放器SDK和Demo支持哪些点播格式?
文件格式:MP3、MP4、FLV、HLS(m3u8)
视频编码:H264
音频编码:AAC、SPEEX
Demo和SDK可以推流到第三方服务器吗?可以播放第三方媒体流吗?
直播推流Demo和SDK都不支持推流到第三方服务器。
播放拉流Demo和SDK都支持播放第三方的音视频媒体流。
Windows推流Demo,常见问题有哪些?
1、摄像头被别的程序占用,摄像头打开失败,会提示“打开视频采集出错”;
2、URL填写错误,会提示“打开直播出错,具体错误信息请看返回值”;
3、弱网或者网络差,直播画面中会看到帧率和码率明显降低;
4、断网(网络中断),会提示“直播过程中发生错误,直播已经结束,请重新开启直播”。
Windows推流Demo中,选择“任意区域桌面”后,为什么不能任意选择?
Demo仅仅用于功能展示,您可以通过SDK接口实现任意选择。
Android推流SDK基本逻辑
- 创建直播实例:
mLSMediaCapture = new lsMediaCapture(this, mContext, mVideoPreviewWidth, mVideoPreviewHeight, mUseFilter);
- 打开本地预览:startVideoPreview
- 初始化直播:initLiveStream
- 开始直播:startLiveStreaming
- 停止直播:stopLiveStreaming
- 停止本地预览:stopVideoPreview
- 销毁本地预览:destroyVideoPreview
- 销毁直播实例:uninitLsMediaCapture
Android推流,常见问题有哪些?
1、初始化出错
SDK初始化出错时,会报如下3个消息中的一个或者多个,这时候需要及时排查问题原因(例如:SDK调用出错、设备适配出错等)。
int MSG_INIT_LIVESTREAMING_OUTFILE_ERROR = 0;
int MSG_INIT_LIVESTREAMING_VIDEO_ERROR = 1;
int MSG_INIT_LIVESTREAMING_AUDIO_ERROR = 2;
2、开始直播出错
本地预览完毕,需要等待MSG_START_PREVIEW_FINISHED消息上报后再调用startLiveStreaming开始直播。
3、推流过程出错
需要首先调用stopLivestreaming,然后停止直播是异步完成的,需要等待停止直播完成的消息MSG_STOP_LIVESTREAMING_FINISHED上报后,再调用initLiveStream和startLiveStreaming重新推流。
4、切后台
如果程序切后台,那么会调用onPause,程序切回前台后调用onResume。
按照Demo中这两个方法的调用,音视频推流的时候,如果程序切后台,音频保持采集和推流,视频推流切后台之前的最后一帧;纯音频推流的时候,如果程序切后台,音频推流静音帧。两种情况下,如果程序切回前台,恢复正常推流。
5、网络相关问题
(1)MSG_RTMP_URL_ERROR:上报此消息,说明Socket中断,推流停止。需要调用停止直播接口,然后自行检测网络是否重连,网络重连之后,再调用重启直播代码。一定要等到停止直播完成的消息MSG_STOP_LIVESTREAMING_FINISHED上报之后才能够重启直播。
停止直播:
m_tryToStopLivestreaming = true;
mLSMediaCapture.stopLiveStreaming();
重启直播:
boolean ret = mLSMediaCapture.initLiveStream(mliveStreamingURL,mLSLiveStreamingParaCtx);
mLSMediaCapture.startLiveStreaming();
(2)MSG_QOS_TO_STOP_LIVESTREAMING:上报此消息,说明网络变差,QoS机制启动,设置码率降低到阈值(原始设置码率的50%),建议用户在此时根据该消息进行网络不好的提示。
(3)MSG_BAD_NETWORK_DETECT:极差网络情况下的消息上报,如果连续10秒音视频数据都没有发出去就会上报这个消息,此时用户需要调用停止直播代码,等到结束消息后再重启直播。
Android推流,为什么滤镜没有效果?
请检查以下内容:
- 必须配置使用滤镜,例如:
lsMediaCapturePara.useFilter = mUseFilter; //设置为true
- 先调用startVideoPreviewOpenGL,再调用setFilterType:
mLSMediaCapture.setFilterType(new GPUImageFaceFilter());
- 如果调用设置滤镜强度的接口setFilterStrength,注意其参数滤镜强度范围为0-10(默认不设置则为10)
Android推流,水印和涂鸦接口注意事项
调用水印和涂鸦接口时,传递的图片像素值必须为偶数,若遇到奇数,底层会报错。
应用层可以调用Bitmap.createScaledBitmap(bitmap, outWidth, outHeight, false);
来转换成偶数值的图片。
(其中outWidth, outHeight为偶数即可)
Android播放,常见问题有哪些?
1、切后台
- 对于直播,切后台不能暂停,可以设置成后台继续播放。
如果不想继续播放,则需要将播放器关闭,并释放资源,切回前台后重新初始化,拉流。 - 对于点播,可以后台暂停或继续播放。
2、弱网
在弱网条件下,如果不足以正常拉流的话,播放器为表现为频繁缓冲,若长时间拉不到流,播放器会超时退出。
超时时间默认为30秒,可以自定义超时时间(可设置范围0-30秒,不包括0)。
需要监听OnErrorListener。
3、断网
在断网条件下进入播放,播放器会立即返回播放失败;
若在播放过程中断网,播放器会进入缓冲状态,若在30秒内网络恢复,则播放能正常恢复,若30秒内没有正常恢复,则播放失败。
需要监听OnErrorListener。
怎么解决在播放Activity界面上调用其他Activity导致播放暂停的问题?
这类问题的原因是其他Activity被唤起时,播放Activity被退到了后台导致播放控件暂停。因此要解决这类问题,必须避免另起Activity的方式,具体的解决方法有以下两种:
1、可以在播放Activity界面中设置一个FrameLayout或者RelativeLayout,将播放控件View和其他业务View(可以设置visibility="gone")包裹起来。
在播放中需要使用到其他View时,将View的visibility设置成可见,这样就可以实现在当前Activity进行其他操作的方式。
2、采用PopupWindow方式的弹框进行业务操作。PopupWindow区别于DialogWindow的地方在于,PopupWindow不会使Activity进入onPause,因此也能解决上述问题。
报错:java.lang.UnsatisfiedLinkError: Can not load ... library.
library.java.lang.UnsatisfiedLinkError: Can not load ... library.
Supported ABI[ armeabi-v7a ] Available library[ ]
Please use liblivestreaming_{@link #Build.SUPPORTED_ABIS}.so
- 首先,应确保已经正确地导入了SDK文件;
- 在对应Module的build.gradle文件中,应配置jniLibs.srcDirs和放置SDK文件的路径一致,例如:
sourceSets {
main {
jniLibs.srcDirs = ['jniLibs']
}
}
- 如果在该build.gradle中配置了abiFilters,应包含对应的架构,例如:
defaultConfig {
ndk {
abiFilters "armeabi", "armeabi-v7a", "armeabi-v8a", "x86"
}
}
- 如果使用代码混淆,请保持SDK不被混淆,例如:
-keep class com.netease.** { *; }
iOS推流,常见问题有哪些?
1、SDK初始化失败
设置日志级别为LS_LOG_INFO,调试查看具体的错误信息,例如:
- 如果抛出的错误是连接不上服务器,首先检查设备是否可以上网;
- 其次看看用户的推流地址是否网易服务器提供的地址;
- 如果是音频采集设备打开出错,让用户检查下是否audio采集参数和demo保持一致;
- 是否开启直播之前已经关闭过直播,但是关闭直播还没有生效。
请设置onLiveStreamError回调,并参考Demo,调用stoplivestream。
2、iOS推流,切换到后台时无需调用任何接口。
切换到后台,则推流没有数据发送出去;
在1分钟之内切回是没关系的,会自动继续推流;
超过1分钟,SDK会推送直播过程出错的回调,也就是onLiveStreamError,这时候重启推流。
所以,不用在切后台时候调用任何接口做任何操作。
3、弱网(网络很差)、断网(网络断开)
对于SDK来说,无论切后台、弱网、断网,只要数据发送不出去,导致Socket被断开,就会抛出onLiveStreamError错误回调。
iOS推流,怎么查看设置的推流参数是否生效?
在initLiveStream处设置断点,展开paraCtx、sLSVideoParaCtx、sLSAudioParaCtx。
iOS推流过程中自动锁屏,怎么解决?
在didFinishLaunchingWithOptions加入下列代码:
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
iOS推流,相同的通知,为什么收到两次?
如果用户监听的时候没有设置具体的对象,可能会收到两次;如果设置具体mediacapture的对象,那么就只收到一次通知。
iOS播放,常见问题有哪些?
1、切后台
- 对于直播,切后台不能暂停,可以设置成后台继续播放。如果不想继续播放,则需要将播放器关闭,并释放资源,切回前台后重新初始化拉流。
- 对于点播,可以后台暂停或继续播放。
2、弱网
在弱网条件下,如果不足以正常拉流的话,播放器为表现为频繁缓冲,若长时间拉不到流,播放器会超时退出。
超时时间默认为30秒,可以自定义超时时间(可设置范围0-30秒,不包括0)。
需要监听NELivePlayerPlaybackFinishedNotification通知
reason: NELPMovieFinishReasonPlaybackError。
3、断网
在断网条件下进入播放,播放器会立即返回播放失败;若在播放过程中断网,播放器会进入缓冲状态,若在30秒内网络恢复,则播放能正常恢复,若30秒内没有正常恢复,则播放失败。
需要监听NELivePlayerPlaybackFinishedNotification
reason: NELPMovieFinishReasonPlaybackError。
iOS播放器提示初始化失败,怎么办?
首先,请用真机测试,不支持模拟器。
然后,退出播放后,才能重新初始化。
关于退出播放的说明如下:
退出播放需要调用 shutdown() 接口,退出成功会收到 NELivePlayerReleaseSueecssNotification 通知。
[self.player shutdown];
如果没有退出播放界面,在重新播放之前(如播放过程中切换URL)需要将创建的 view 释放掉。
[self.player.view removeFromSuperview];
并将播放器置空:self.player = nil;
iOS播放器,怎么获取分辨率?
NELPVideoInfo *vinfo = (NELPVideoInfo *)malloc(sizeof(NELPVideoInfo));
[self.liveplayer getVideoInfo:vinfo];
NSLog(@"width = %ld, height = %ld", (long)vinfo->width, (long)vinfo->height);
Xcode 8和iOS 10,运行Demo报错?
Xcode 8,需要将Build Settings > Build Options > Enable Testability设置为No。
iOS 10如果出现提示:“This app has crashed because it attempted to access privacy-sensitive data without a usage description.”请在info.plist中加入下列语句(右键选择Open As > Source Code打开):
<key>NSCameraUsageDescription</key>
<string>cameraDesciption</string>
<key>NSMicrophoneUsageDescription</key>
<string>microphoneDesciption</string>
报错:ld: symbol(s) not found for architecture arm64/armv7/i386/x86_64
①检查有没有导入相应的库文件;
②检查Xcode配置,在Build settings > Architectures > Valid Architectures中,有没有配置对应的架构支持;
③在Build settings > Other Linkers Flags 里面,增加 -all_load 选项,查看是哪些库文件冲突。
报错:stop reason = signal SIGPIPE
参考Demo中main.m文件,添加:signal(SIGPIPE, SIG_IGN);
int main(int argc, char * argv[]) {
@autoreleasepool {
signal(SIGPIPE, SIH_IGN);
return UIApplicationMain(argc, argv, nil, NSStringFromClaa([AppDelegate class]));
}
}
由于网络中断等原因,Socket断开,继续发送数据的话系统会抛出SIGPIPE信号,默认处理方法是显示提示信息,终止并退出程序。为了避免这种情况,可以设置SIG_IGN忽略信号处理函数:signal(SIGPIPE, SIG_IGN);
这样产生SISPIPE信号时就不会终止程序,而是直接把这个信号忽略掉。
有Web推流器和播放器Demo吗?
推流器体验Demo:http://vcloud.163.com/demo/liveStreaming.html
推流器源码Demo:http://vcloud.163.com/vcloud-sdk-manual/WebDemos/LiveStreaming_Web/index.html
源码:view-source:http://vcloud.163.com/vcloud-sdk-manual/WebDemos/LiveStreaming_Web/index.html
播放器体验Demo:http://vcloud.163.com/demo/player.html
播放器源码Demo:http://vcloud.163.com/vcloud-sdk-manual/WebDemos/LivePlayer_Web/index.html
Web推拉流,出现异常如何处理?
1、Web推拉流,SDK初始化一般不存在失败问题,需要注意的是用户如果要在播放器初始化后紧跟操作的话,需要在初始化回调函数中进行,否则会由于还没有初始化完成就调用而报错(其中Web推流SDK提供了初始化错误回调)。
2、Web推拉流SDK目前暂时未做弱网优化。
3、Web推拉流SDK在断网时会抛出错误,Web推流在startPublish函数中提供了错误回调函数。Web拉流需监听错误回调onError。
Web推流器,怎么停止预览?
myPublisher.stopPreview();
Web播放器,为什么会被自动全屏(怎样设置才能实现窗口化播放)?
首先,需要在video标签中添加:x-webkit-airplay="allow" webkit-playsinline这两个属性;
其次,即使添加了,某些浏览器仍然可能无视并调用或劫持到自带的播放器全屏播放。
Web端播放,怎么切换播放文件?
文件播放完以后,可以等待一会儿(setTimeout),再调用setDataSource和play()即可播放下一个文件,不需要释放资源重新初始化。 参考代码如下:
setTimeout(function() {
myPlayer.setDatasource(……)
myPlayer.play()
}, 500)
Web播放器API文档:3.12 setDataSource(source),3.7 play()
Web播放器,如果播放失败了,还要重新播放原来的地址,怎么操作最简单?
myPlayer.refresh()
Web播放器常见自定义
- 不需要大播放按钮:
可以在播放器Constructor的options部分配置"bigPlayButton": false
var myPlayer = new neplayer("my-video", { "bigPlayButton": false }, function() {});
- 不需要控制条:
配置"controls": false
var myPlayer = new neplayer("my-video", { "controls": false }, function() {});
- 自定义拉流超时时间:
配置streamTimeoutTime参数,单位是毫秒
var myPlayer = new neplayer("my-video", { "streamTimeoutTime": 20000 }, function() {});
其他自定义方法,例如自定义错误提示等,请参考:Web播放器样式和组件自定义。