状态码
更新时间: 2024/08/23 10:24:52
服务端
服务器端能支撑多大在线用户?产品的性能怎么样?
网易云信是一个提供高效可靠通信云服务的平台,支持上亿用户量级的产品,系统架构保证弹性可扩展,并支持接入产品动态扩容。
关于我们的数据在网易云信上是否安全?
在网易通信上数据的传输和存储均有私有协议加密,存储的数据安全可靠。
我的用户都在国外,请问访问速度怎么样?
在国外的用户可以通过我们在AWS的云主机连通服务,网易云信在国外多地均有部署服务器,服务连通时优先选择最近的服务器以保证访问速度。
登录中的token和我的帐号密码是什么关系,我如何维护token?
token是产品应用与网易云信平台鉴权的凭证,帐号密码则属于第三方产品应用帐号体系的范畴,两者之间存在的映射关系需要由应用的后台服务维护;我们的推荐做法是应用在用户第一次接入网易云信平台时通过后台接口为用户创建帐号和token,并将该组帐号和token与应用的帐号体系关联;后续访问网易云信平台时均需要用到该token,token的更新可以通过网易云信的服务器接口实现,更新策略可以由应用按照自己的安全策略决定。
为什么我不能通过客户端sdk创建账号,必须要通过服务端创建?
网易云信的账号体系和应用的账号体系是一个业务绑定的关系,创建账号在应用服务器进行可以有效控制账号的创建行为,任何应用的客户端都存在被破解的风险,如果直接通过客户端就可以创建网易云信账号可能会使您的应用出现被盗刷账号的情况。可能友商提供类似的客户端接口,使您在开发的时候节省了几行代码,但是为您的应用安全埋下了风险的种子。
网易云信的账号能不能删除,accid可不可以就是我业务系统的账号?
网易云信的账号是不允许删除的,但是如果您不想使用这个账号,可以通过服务端接口将账号禁用。我们不禁止开发者直接将业务系统的uid或account作为网易云信的accid来注册,但是我们不推荐这么做。我们推荐开发者在创建网易云信账号时使用随机字串等与应用业务无强关联的字串作为网易云信accid,再在应用自己的服务器端维护业务uid与网易云信accid的关联关系。
- 这么做的好处是:
- 有效保护业务方的账号体系,不会直接将用户的account等暴露到网易云信服务中,尽管我们对业务方存储在网易云信的数据采用安全可靠的保护措施,不存在泄露风险,但是作为有态度的服务提供方,我们还是推荐你们也适当保护自己的数据;
- 如果业务方希望删除网易云信账号,只需要将绑定关系解除即可,如果业务方希望重置一个账号在网易云信中的状态,也只需要解除绑定,新建网易云信accid重新绑定即可。
我有上百万的存量用户账号,你们能提供批量导账号的方法吗?
网易云信的收费方式取决于应用的活跃用户,对于任何应用的账号接入,我们推荐遵从“按需创建”的原则。您的上百万账号中可能存在相当比例的僵尸用户或非活跃用户,在迁入网易云信时直接全量导入对您是一种不必须要的开销。您可以在用户第一次触发使用网易云信的IM行为时检查该用户的网易云信是否创建了accid,如未创建则后台自动创建再登陆,这种方式会使您的用户只有在必要的时候才会创建网易云信的账号,同时在网易云信中创建的用户都是有效的活跃用户。虽然这种方式会让您在网易云信中的注册用户量下降,但是帮你节省了支付给网易云信的费用,作为有态度的服务提供方,我们还是将最佳实践方式推荐给您。
我通过server端接口注册的账号会不会出现在我的管理后台呢?
通过server端注册的帐号不会出现在管理后台。
- 这么做的原因是:
- 管理后台提供的用户列表只是部分用户列表,是为了方便开发者在接入过程中,在没有服务端开发的情况下,可以快速的进行客户端集成而提供的入口。用户可以在管理后台上快速的创建测试用户,并在客户端上登录测试;
- 接口创建的用户在管理后台不显示,是为了保护用户的隐私及帐号安全。以免出现误操作,对用户进行了不当的禁用或其他操作。
server端发消息例子里面的md5是什么?
这个md5是根据文件内容,如图片、语音等,用Md5加密算法计算
接入
如何接入你们的平台?集成网易云信的大概流程是怎样?
接入我们的平台只需要四个步骤即可, 第一步,注册成为网易网易云信开发者 第二步,创建应用 第三步,用户体系集成 第四步,下载SDK并集成 详细可参见新手接入。
用网易云信开发即时通讯是必须要用你们的服务器和数据库吗?
不需要。网易网易云信的集成,通过在客户端集成SDK的形式来连接网易网易云信的云端服务。应用本身的业务逻辑和实际部署,还是跟传统开发完全一样,由开发团队自己维护部署即可。
AppKey从哪获得?
注册并激活网易云信开发者帐号后,登录网易云信管理后台,创建应用后在“APP Key”页面得到。详情参见APPKey信息。
怎么创建用户?
测试应用可以在注册开发者帐号后登录管理后台创建测试用户,也可以参照开发手册中Server文档的创建账号接口来创建用户。线上应用只能通过接口创建用户,可查看接口说明。
多端互踢的机制是什么样?什么时候会收到被踢的通知?
网易云信支持最基本的三种互踢策略:
- 每个平台只能有一个端在线,平台分桌面端(PC+WEB)和移动端(IOS+AOS);
- 同一时间最多只能一个客户端在线(即所有端互斥);
- 所有端都可以同时在线,但是最多同时在线客户端数不能超过10个,超过时最早登录的端会被踢下线;在客户端触发互踢策略时被踢端会收到被踢通知;如应用希望实现自己的互踢策略,网易云信也提供了主动踢自己其他在线端的接口,可以由应用按需调用,此时被踢的客户端也会收到通知。
为什么我不能通过客户端sdk创建账号,必须要通过服务端创建?
网易云信的账号体系和应用的账号体系是一个业务绑定的关系,通过应用服务器才能创建账号可以有效控制账号的创建行为,任何应用的客户端都存在被破解的风险,如果直接通过客户端就可以创建网易云信账号可能会使您的应用出现被盗刷账号的情况(可能友商提供类似的客户端接口,使您在开发时节省了几行代码,但是为您的应用安全埋下了风险的种子);
数据加密和压缩等问题
PC: 与服务器通讯的和本地缓存的所有文本数据都有压缩和加密。 iOS: 本地聊天数据只有表名(即会话名)加密,图片消息默认压缩为jpeg,压缩质量参数0.5(这个可以上层自由配置),视频音频均不压缩。和服务器通信的文本数据都有压缩和加密。 WEB: 只存储文本数据,不存储图片、音视频(所以就没有数据压缩)。数据不加密,浏览器自己有同源限制(安全限制)。 Android: Android本地聊天数据不加密,图片消息(图片与文件一样上传)不压缩,视频音频不压缩。和服务器通信的文本数据都有压缩和加密。 各端均不限制收发消息频率
如何集成网易云信账号体系
你的用户在客户端注册到您的服务器,您的服务器保存了这个账号,再调用我们服务端注册网易云信IM账号的接口生成网易云信IM账号和token,这个时候将用户注册的账号和网易云信IM账号绑定,用户登陆的时候就先登陆他注册的账号,到您的服务器拿到绑定的网易云信IM账号和token去客户端登陆网易云信。这里有两套账户体系
Demo
demo登录失败怎么解决?
demo的帐号是登录网易云信管理后台在网易云信Demo应用下的帐号管理页面上创建的。请确认已经正确创建了demo帐号,并在demo客户端上登录时,使用了该demo帐号所对应的正确token。如果是自己编译打包的开发者,请确认并未修改源码包中的appkey配置。
如何快速基于Demo源码开发自己的应用 ?
-
登录网易云信管理后台创建一个自己的应用;
-
修改Demo源码中的AppKey配置为步骤1创建的应用AppKey;
-
在步骤1应用的用户管理页面中创建开发调试帐号;
-
结合Demo导读文档以及网易云信开发手册,根据应用需求修改Demo源码;
-
好友关系、用户信息是需要应用服务器自己实现维护的。
备注说明:有些开发者在修改Demo源码的appkey配置后,无法正确登录。请确认以下几点:
-
使用的帐号和token是在修改后的appkey的应用下创建的;
-
确认登录时,使用的帐号和token的正确性。
修改了demo的appkey,用注册的账号登录显示302密码错误 ?
DEMO 中登录采用对密码进行 MD5 操作,来模拟 从APP 服务器获取 Token 的流程。而对于用户自己注册的 APP,则不需要这个流程,直接传入网易云信管理后台创建的帐号密码即可。但不建议您直接将用户的帐号密码等暴露到网易云信服务中(尽管我们对业务方存储在网易云信的数据采用安全可靠的保护措施,不存在泄露风险,但是作为有态度的服务提供方,我们还是推荐您们也适当保护自己的数据), 推荐采用无关联的帐号和Token来绑定网易云信用户,并在登录时加上从应用服务器上获取网易云信帐号和 Token 的流程。
我下载的demo连不上服务器,有没有特定端口需要配置?
检查你所处的网络防火墙是否允许访问外部服务器的8080端口。
demo改了appkey为什么不能注册也不能获取聊天室列表?
demo使用的是demo的appkey,其注册走的是demo的服务器。而更换了appkey之后,demo的服务器不识别更好后的appkey所以注册失败。(注册即创建网易云信IM账号是服务端接口)。同理,获取聊天室列表也是从demo的服务器中获取。
为什么android从对方接来的excel下载不了?
android的demo只做收发的演示,下载跟下载图片接口都一样,调downlodAttachment,因为没有系统的文件选择器这种东西,要选择文件保存到哪里,这个需您自己做一下。 IOS的demo是可以查看并下载发来的文件比如excel、word。
iOS版SDK
iOS SDK 兼容 ATS
前言
随着苹果在 2017.1.1
推出的新政,App
将不在允许直接使用 Allow Arbitrary Loads = YES
对所有域名进行规避的方案。基于此,网易云信 iOS SDK
也做了相应的兼容处理。
我们做了什么
网易云信 SDK
主要提供 IM
相关的功能,其内部实现为基于 TCP
自主加密的协议,这方面并不需要做任何适配工作。而为保证整个 IM
功能的完整性,网易云信也内置了文件传输的功能,包括但不限于:消息内附件,用户头像,群主头像等信息。在旧版本,这些文件都是以 HTTP
请求的方式上传至服务器。这显然不符合苹果的规定。所以在新版本,我们文件传输进行了升级,上传下载一律采用 HTTPS
进行传输。
上层开发者需要做什么
在我们做完上面更新后,上层开发者可以直接使用我们的新 iOS SDK
,而不需要再 plist
中进行任何 ATS
相关的设置。
但是网易云信是个多端产品,虽然 iOS
能够保证完全兼容 HTTPS
,但其他端仍未完全兼容 HTTPS
,从这些端收到的文件 URL
仍旧是使用 HTTP
(当然还有老版本的问题)。所以上层开发者如果有某些特殊化的使用场景,则需要自行进行兼容。
网易云信中使用到文件信息的地方包括:
- 图片消息附件
- 语音消息附件
- 视频消息附件
- 文件消息附件
- 自定义消息附件
- 用户头像
- 群头像
- 用户在聊天中的头像
前四种消息附件 iOS SDK
已经完成完全的兼容处理:自动将其他端发送文件附件 URL
从 HTTP
转换为 HTTPS
格式。
而自定义消息,由于整个类结构是由上层决定,iOS SDK
并不能智能完成这部分消息的附件 URL
格式的自动转换,需要上层用户做相应的处理。在 idHTTP
转为 HTTPS
的接口:convertHttpToHttps:,在需要下载该文件的地方,先进行转换即可。具体参考 demo
中下载阅后即焚的实现。需要注意的是,如果某种自定义消息需要由 SDK
接管附件下载,那么需要在 NIMCsutomAttachment
协议 attachmentURLStringForDownloading
处理 HTTP
到 HTTPS
的转换过程。
后三种头像信息,如果上层开发直接使用网易云信头像,那么不需要做任何处理。如果使用自己服务器的文件地址,那么需要设置 NIMSDKCofig
中的 enableHttpsForInfo
为 NO
。
集成iOS NIM SDK的最低要求?
SDK 最低支持 7.0,Xcode 版本要求 8.0 以上。
iOS Demo打开编译失败?
-
确认打开的文件是 NIM.xcworkspace;
-
确认 Xcode 版本在 8.0 以上。
集成碰到问题,如何解决?
推荐按照开发者如下顺序进行排查:
- 查看官方文档
- 对比相关功能DEMO
- 咨询技术支持
SDK过大怎么办?
由于 NIM SDK 是静态库,且为了方便开发者使用,我们将armv7 i386 x86_64 arm64平台 的静 态库合并成一个Fat Library,导致整个 SDK 比较大。但实际编译时会根据调用功能多少增加 ipa 文件大小,实测大约只会增加2-3M左右。
- 小贴士:开发者可以使用 lipo -info 命令来查看某个静态库是否是Fat Library。
登录失败怎么处理?
登录接口回调方法中包含错误信息,请检查[error code],常见的错误码有 :
- 408 ,即 NIMRemoteErrorCodeTimeoutError,请求超时。引起这个错误的原因往往是客户端网络状 况不良,请检查网络状况;
- 415,即 NIMRemoteErrorCodeConnectionError,连接服务器出错;
- 302 ,即 NIMRemoteErrorCodeInvalidPass,认证失败。登录的用户名和密码不匹配。请检查输入的 用户名密码是否和服务器设置的有出入。
iOS如何快速实现一个聊天窗口界面?
从头开始实现一个聊天窗口的代码量大约在 5 千行左右且有各种坑需要处理,推荐直接使用云 信中的UI库 NIMKit ,或者使用一些开源的解决方案,如JSQMessage。
APP退到后台后无法收到消息和通知?
由于 iOS 系统的限制,大部分 APP 并不能支持后台运行,所以在 APP 退到后台后几秒到几分 钟后 APP 就被挂起,无法收取任何消息。在这种情况下所有的消息和通知都是通过推送 (APNS) 来通知用户。只有在用户收到推送并打开 APP 后,SDK 才会自动重连上服务器并拉取 离线的消息和通知。
APP退到后台无法收到推送消息?
并不是接入 NIM SDK 后苹果推送 (APNS) 就会自动生效,为了使之生效,开发需要做如下配 置 :
- 制作 APNS 所需要的证书,具体参考制作推送证书p12文件;
- 上传证书到 NIM 管理后台,并设置证书名;
- APP中设置证书名;
- 客户端注册APNS,并在获取到 APNS Token时将值传给SDK 。
IOS的SDK由于缓存较大 上架时候被拒,能不能设置不同步icloud?
我们的SDK目录就是设置成默认不备份。“可以去读取下 $Documents/NIMSDK 下面的两个子目录Users和Global目录的属性,他们都是有NSURLIsExcludedFromBackupKey这个file attributes,而且都是YES”
Android版SDK
SDK初始化操作必须放在Application的onCreate中吗?
是的。因为典型情况下,网易云信的service会工作在push进程,当push进程从后台自动启动时,除了Application的onCreate,就没有其他机会去初始化SDK了。当然,如果您将网易云信的service和主UI进程放在一起,且不要求后台自动登录,那么可以在您觉得合适的地方去初始化。
想做一个@某人的效果,如何做?
-
当发送群消息@某人的时候,可以通过扩展字段带上被@的账号列表发送出去;群成员收到群消息时,查看扩展字段的@账号列表里有没有自己,如果有,则界面上做被@的提醒;
-
此外,最近会话列表项也提供扩展标签 Tag ,可以满足开发者在最近会话列表中做@提醒的需求:在监听到最新联系人有更新时,可以根据最近一条消息的,可以满足开发者在最近会话列表中做@提醒的需求:在监听到最新联系人有更新时,可以根据最近一条消息的 ID 查询出该条消息,查看扩展字段是否包含@账号列表,如果包含自己,可以在扩展标签上做一个标记,如果有新消息到来(未进入聊天界面查看时),要继续保持最近会话列表里面有@提醒,就可以参考扩展标签,做界面的上被@的提醒。
未读数怎么清零?
- 联系人的未读数信息是存放在RecentContact类中,未读数由SDK负责管理,并没有提供设置未读数的接口;
- SDK更新未读数的依据由setChattingAccount接口控制,该接口会设置当前正在聊天的对象,调用该接口后,这个聊天对象的未读数就会被置为0,同时,如果后面有该联系人的新消息到达,其未读数也不会递增。如果收到不是当前聊天对象的新消息,SDK则会将消息来源的未读数自动累加,并通过observeRecentContact观察者接口通知到UI;
- 调用setChattingAccount后SDK会认为设置对象就是聊天对象,该聊天对象的未读数会一直是0,因此,当用户退出与这个聊天对象的会话后,需要重新设置聊天对象为空;(MsgService#setChattingAccount(MSG_CHATTING_ACCOUNT_NONE, SessionTypeEnum.None))。
为什么发出自定义通知后,没有触发我的receiver?
请检查一下是否
<permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG" android:protectionLevel="signature"/>
和
<uses-permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG"/>
都添加到了manifest文件中,第一项为声明权限,第二项为声明要使用该权限,二者缺一不可。
消息发送失败,如何重发此条消息?
发消息API:sendMessage(IMMessage msg, boolean resend); 仔细看参数,后面的boolean表示重发消息。
如何判断attachment的发送状态?
def 未下载 ,跟失败一样,都可以用 downloadAttachment重新下载。
我们用自己的V7包可以么?
如果使用我们的uikit的话,那么v7包就要用我们的版本,我们的是基于v7 19的,如果用其他版本(21/23),会引起冲突。
PC版SDK
集成NIM Windows客户端SDK的最低要求?
Windows客户端 SDK是VC2010开发的,使用方式是APP开发者通过动态加载SDK DLL使用,只要在发布的应用程序中带上msvcr100.dll 和 msvcp100.dll两个运行库即可,因此对集成SDK无最低要求,建议vc版本越高越好。
Windows客户端如何使用自定义的用户数据目录?
Windows客户端 SDK本身提供用户自定义数据目录文件路径,只需用户在初始化SDK时传入绝对路径,但是,这里需要注意的是,Windows 7开始对系统盘下面的目录是有很强的权限控制的,使用不当极易导致用户数据无法正常读写,因此建议APP开发者尽量将用户数据目录放在系统本地应用数据目录下
%LOCALAPPDATA%,
WIN7即以上在系统盘C:\Users\<user name>\AppData\Local,
WIN XP/2000在C:\Documents and Settings\ <user name>\Local Settings\Application Data
具体使用方法就是在只要在初始化SDK时传入目录名字,SDK即会在系统本地应用数据目录下创建相应的文件目录作为用户数据目录。
Windows客户端的SDK 支持哪些开发语言 ?
Windows客户端 SDK开放的是C接口,因此常见的桌面开发语言都可以调用,比如C++,Java,VB,C#,Javascript,Python等。
Unity SDK
集成SDK对Unity 版本要求是什么?
Unity SDK和Demo使用Unity 5.3.1f1开发,不低于这个版本都可以集成SDK。
使用SDK有什么需要注意的问题?
SDK提供的接口都是异步接口,通过回调函数接收执行结果,在回调函数中不能直接操作UI对象,可以将结果保存起来在update函数中更新游戏,或者通过其他方式进行更新。(在demo中提供了Loom类实现这个功能。)
开发中是否可以调试SDK功能?
网易云信Unity SDK使用非托管代码实现基本的通信能力,如线程,网络传输等,由于Visual Studio Tools for Unity插件的问题导致调试代码可能会出现问题,参考Troubleshooting and known issues
用户登录需要注意哪些问题?
只能登录一个账号,登录其他账号时必须调用Logout函数先注销已登录账号。如果多次调用Login接口会返回kNIMLocalResAPIErrorEntered
(20002)错误,表明已有账号在执行登录。在Unity Editor中运行游戏时尤其要注意这点,由于Editor使用同一个进程承载游戏,在结束运行时如果没有注销登录,后面再执行登录都会失败,SDK启动的线程未正常关闭会导致Unity进程无法正常关闭。Logout函数同样也时异步方法,必须等待函数执行完成即回调函数被触发才能再次调用登录接口。
为什么注销重新登录后一些接口的回调函数无法执行?
调用Logout
注销登录时底层会先释放已有对象然后再重新创建,导致原先设置在这些对象的回调函数已经无效,需要调用NIM.ClientAPI.RegisterSdkCallbacks
重新注册。
Web版SDK
SDK 兼容老版本浏览器吗?
目前 SDK 兼容到 IE8, IE8/IE9 使用 xhr-polling 来模拟长连接, 其它高级浏览器使用 WebSocket 建立长连接。
文件上传兼容老版本浏览器吗?
目前文件上传兼容到 IE8, IE8/IE9 使用 Iframe 上传文件, 其它高级浏览器使用 FormData 上传文件。
消息
都有什么消息类型,是否支持自己的自定义消息类型?
网易云信原生支持了文本,图片,语音,视频和地理位置等常用的消息类型;对于产品的特殊需求网易云信也提供自定义消息类型,产品可以使用自定义消息实现“阅后即焚”等特殊的消息类型。
网易云信发送的图片缩略图和原图是什么样的一个比例?
iOS:长宽等比缩放,2倍显示屏幕上,短边缩到150为止。iPhone4以上到除了plus,都是2倍屏幕 所谓的Retina,plus系列是三倍屏幕,就是说plus上会是225为止。iPhone 3gs以及以下,是一倍屏幕到75为止;
Android:在SDKOption#thumbSize中设置一个宽度,等比例缩放。一般来说是会话窗口里面图片那个气泡的宽度大小。也可以简单设置成 屏幕宽度的一半。
是否能指定不接受来自特定用户或特定群的消息?
网易云信提供基于自己的好友体系的黑名单功能。同样也提供了修改群消息通知的接口。详见如下文档: iOS消息提醒) iOS群消息提醒
消息历史记录保存多久 ,如何获取?
SDK会保存一份本地消息历史记录,并提供了删除和查询的接口,由应用自己管理。网易云信服务端提供保存服务端保存历史记录的服务。该服务占用服务端存储资源,是一项收费服务,最长可以保存3年。服务端保存的历史记录,同样提供查询接口供应用使用。
管理后台向用户(或群)发系统消息如何实现?
- 创建一个网易云信帐号专门用于发系统消息;
- 调用服务端消息服务接口中的发送普通/透传消息接口即可,详见接口说明;
- 普通消息就是常见的会在聊天窗口中出现的对话消息,透传消息的使用场景为应用业务通知(并不需要在聊天窗口出现时)。关于透传消息的概念及两者的区别,请参阅开发手册Server页面的消息服务章节。
消息长度有没有限制?
网易云信的消息长度限制为5000字符。
网易云信语音消息的音频文件和视频消息的视频文件分别是什么格式
对于语音,视频消息而言,网易云信只负责提供文件的上传和消息投递,所以音频使用任何格式都 可以。但是推荐使用网易云信提供的接口进行音频的录制和播放,因为我们提供了高清语音录制方 法,语音清晰度远超同类产品。使用网易云信提供的接口进行音频录制时限定的格式为aac。
网易云信如何发表情?
聊天时的表情其实就是字符串,通过一定规则的映射显示不同的图片即可。具体可以参考网易云信 DEMO中的实现。
能不能限制只发送文本消息,不要发送图片和文件
可以的,这个功能在上层中可以限制,限制只发送文本消息,不能发送图片和文件消息,而且我们提供的是一个平台根据您的需要可以删减任何不需要的功能。
Demo的卸载重装消息的问题
1)每次卸载重装都会产生新的设备ID,然后登录上来,服务器会漫游100个会话(每个会话100条曾经收发的消息)过来。 2)android这边其实并不卸载,就清理数据,但是也会重新生成一个设备ID,登录上来之后,也会收到漫游。比如说,我在android设备上登录了,发了“hello world”,然后我去清理一把应用的数据,在去登录,服务器就去漫游“hello world”过来。 3)漫游是服务器管理的,跟客户端并没有关系,但是客户端要记得就是去系统里清理应用数据,也会漫游的,反正就是SDK的db被清空了,就会漫游过来。或者另外一种情况:用户去设置应用管理里面,可以清理掉,一个app产生的数据,这时候在登录,也会漫游的。 只要产生新的设备ID,就会有漫游。
会话列表及漫游消息详解
各端获取最近会话列表均从本地数据拿。获取的列表数量没有上限。 会影响本地数据的情况: 1、应用执行过删除会话接口。 2、换了新手机,或者清除过网易云信本地数据。 3、开启漫游的情况, 服务端会同步漫游数据到本地数据库。
漫游详情
漫游消息现在线上的配置是100个会话,每个会话最新100条,最近7天 其他细节: 1、Web高级浏览器(支持本地数据库的),也会和其他客户端一样,具有本地历史数据。
群组
群成员上限是多少,群数量上限是多少?
网易云信产品默认每个用户可以创建50个普通群,每个群最多200个成员,可以创建50个高级群,每个群最多200个成员,对于产品的特殊需求我们可以支持群数量和群容量的扩容。
服务端接口创建了群,并指定了成员,成功后查询群成员只能看到群主自己?
创建群的接口有参数“magree”表示“是否需要群成员同意”,如果你建了群只能看到自己,请首先检查这个参数,如果选择了该选项,只有在被邀请者同意之后才会出现在群成员列表中。
SDK是否提供设置群容量的接口?管理后台可以设置么?
SDK不提供该接口。管理后台暂时不可设置,后续会考虑提供。
高级群和普通群的区别?
- NIM SDK提供了普通群(Normal)以及高级群(Advanced)两种形式的群聊功能。高级群拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。推荐APP开发时只选择一种群类型进行开发。普通群和高级群在原则上是不能互相转换的,他们的群类型在创建时就已经确定;
- 普通群没有权限操作,适用于快速创建多人会话的场景。每个普通群只有一个管理员。管理员可以对群进行增减员操作,普通成员只能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意;
- 高级群在权限上有更多的限制,权限分为群主、管理员、以及群成员。
高级群群主执行quitTeam是否会成功?是否会解散群?
高级群主执行quitTeam不会成功,不会解散群。群主要退群需要将群主权限转让给群里指定成员或直接解散群。
退群后我希望把最近联系人列表的记录也删掉,该怎么做?
删除最近联系人记录有两个接口,分别是deleteRecentContact和deleteRecentContact2,其中第一个接口以RecentContact类型作为参数,调用后不会再触发观察者通知,适合在最近联系人列表调用。第二个接口以account和sessionType作为参数,删除成功后会触发MsgServiceObserver的observeRecentContactDeleted通知。因此你可以调用第二个接口,并在最近联系人列表上添加删除事件的观察者。
聊天室
有获取聊天室管理员列表的接口吗?
目前还没有直接能获取的接口,不过建议您先获取聊天室成员之后,根据成员的memberType去检索出来成员身份。
聊天室收发消息和IM普通有什么不同吗?
聊天室消息收发接口与普通消息收发统一,在发送消息时指定会话类型为聊天室即可。会话 id 即为聊天室 id。但聊天室的消息,SDK对收到的消息是有做合并的,而其他IM消息,只有离线消息和漫游消息会从服务器批量下来。
聊天室在线人数怎么获取?
用户进入聊天室后可以通过获取聊天室信息获取聊天室内的在线人数。聊天室内的成员进出,网易云信服务器会客户端下发一条进出类型的通知类消息,客户端再根据通知类消息实时加减聊天室在线人数。
音视频与白板
音视频支持的分辨率?
分为流畅(176X144)、标清(352x288)、高清(480X320)、超清(640X480)
用音视频一分钟会消耗多少流量?
流畅:150MB/小时 = 0.333Mbps (带宽) 标清:260MB/小时 = 0.578Mbps (带宽) 高清:320MB/小时 = 0.711Mbps (带宽) 超清:400MB/小时 = 0.889Mbps (带宽) 音频通话:32MB/小时 = 0.071Mbps 这些流量在不同网络和机型下还略有区别,在移动网络下会低一些
了解一下硬编和软编的概念
硬编:硬件编码 软编:软件编码(H264库,目前我们采用软编)
你们的码率是多少?
最低码率是100Kb,最高码率是400Kb(根据网络动态调整)。
实时音频编码是哪些?
G7111(最耗流量,最少运算量)
ILBC(中间)
OPUS(最省流量,运算量最大,但是效果好,目前我们采用OPUS)
你们的帧率是多少?
帧率是15帧,当然这个可以调整,其中15帧,1帧是I帧,14帧是P帧。 I帧表示关键帧,可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。 P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
短信
短信的介绍
短信服务(Short Message Service)是网易网易云信为用户提供的一种通信服务的能力,目前支持验证码类短信、通知类短信、运营类短信、语音类短信(即将上线)等是事务性短信。
网易网易云信短信功能具体有全网覆盖、3-5 秒可达、超高到达率、7*24 小时服务监控等优势。
按量付费、阶梯定价,发送越多单价越低。API调用简单,加快接入速度。
快速稳定
三网合一通道;专线机房,支持大容量、高并发;99%到达率; 7*24 小时服务,电信级运维保障,实施监控自动切换;
简单易用
API简单易用,接入更快速; 数据统计齐全,发送状态报告即时返回; 管理后台功能完善,易上手;
价格低
按需付费,发送成功产生计费; 阶梯定价,发送越多单价越低,越划算;
购买的流程
登录网易网易云信官网,依次进入 产品 -> 短信 ,单击 短信短信 进入产品页;
或直接访问短信服务产品页面。
选择 相应的短信资源包进行购买,购买完成后进入短信服务控制台开始使用。
短信的计费方法
1、短信服务是按照短信发送成功量+未返回发送状态的短信量计费,国际短信是按照提交量计费。
2、扣减方式:购买的资源包在有效期内,优先抵扣资源包内的短信量,多个资源包按有效期先结束的优先扣减, 如单次发送请求的短信数大于资源包剩余条数,则多于资源包条数的短信将按照0.05元/条的单价在账户余额中扣除,同时关闭短信功能,续费后将自动开启短信功能。
3、短信账单为月账单的形式,统计出当月实际短信消耗条数,发送失败的条数以短信条数返还到用户短信资源包中, 返还顺序为按扣款顺序逆序返还。
短信的资源包
短信的资源包?
1、资源包是预付费方式,支付费用购买成功后,在有效期范围内可使用资源包。
2、资源包有效期:每个资源包的有效期独立计算,多个资源包有效期不会叠加
3、短信资源包购买后不支持退订、不支持退款,资源包有效期到期后不可用。
重要说明:发送黄赌毒等违反法律法规的短信内容,资源包将会被强制永久扣除。
付费周期和欠费
对于后付费产品,当用户产生费用后,进行累计计费,每个月月底进行扣费。
当您的账户余额不足以支付账单金额,网易云信将暂停为您提供服务。当您充值并补足欠费后,服务会自动开启,可以继续使用。
当用户为欠费状态时,需要尽快进行充值,以便影响您的正常业务。
当用户余额不足时,系统会给账号的注册手机发送短信通知,进行提取告知。
短信计算规则内容?
网易云信短信计费包括短信签名,70字计1条短信费,超过70字则以67字每条计费,当短信中出现中文字符,则单个汉字、英文、标点和空格等都算一个字。
短信的计费模式?
网易云信短信按照用户实际使用情况进行实时计费,出月账单时会统计用户上个月的短信发送状态,对运营商返回短信发送成功状态的短信和未返回发送状态的短信进行扣费,对返回状态为发送失败的短信根据失败条数进行短信量反充。
短信发送失败,还是会扣费吗?
接口调用失败及运营商返回失败状态,都不会扣费。
短信发送频率上有什么样的限制?
- 验证码模版:系统默认的配置为对接收方手机号码限制1天最多10条短信验证码,用户可以在 短信配置修改;
- 系统默认验证码有效时间默认为10分钟,用户可以在 短信配置修改。
短信显示号码及显号规则?
手机端接收显示的号码是106开头的正规号码 显号规则:
- 号码=通道号+扩展码;
- 在通道不稳定、网络抖动及机房断电等不可抗拒的因素下,为确保到达率及到达时间,会自动切换通道,通道号会发生变化。
短信提供哪些功能?
目前支持短信下行发送、短信状态报告回执、帐单查询等;暂不支持短信上行发送。
短信发送成功,但实际未能收到短信是什么原因?
- 手机是不是长时间不关机,可以关机重启下;
- 手机收件箱是不是已满,删除一些看是否可以正常接收;
- 手机是不是双卡双待的手机,把卡拿出来换一下卡槽;
- 手机是不是安装了安全软件,安全软件有可能会进行拦截到垃圾信箱里;
- 如若不行,请您将SIM卡换到其他手机上进行测试。
短信发送状态回执哪里查看?
- 网易云信将主动发送回执信息给用户,用户可调用查询模板短信发送状态接口查询;
- 用户也可以在网易云信用户管理后台的数据统计模块中查询短信发送状态。
短信三网都可发送吗,能发送海外/港澳台吗?
支持三网发送,海外/港澳台均可支持。
短信字数最多能发多少个字?
最大支持发送300个字以内的短信。
变量可传字符长度为多少个字?
网易网易云信提供的模板短信由固定内容与多个变量构成,其中 " %s " 为需要接口替换的变量,变量内容可以是汉字、字母、数字或者特殊字符组合,但单个变量内容长度不得超过30个字。
变量中可直接写链接吗?
变量中不允许传链接,包含短链接;建议将已ICP备案的网址写于短信模板非变量内容中,审核通过后可发送。
为什么传进来的验证码首位不支持0?
网易云信模版短信参数仅支持string类型,如果使用int类型则首位的0会被省去。
如何有效防止短信轰炸?
短信轰炸指在短时间内通过恶意程序,批量.循环给一批手机号码无限发送各种无效短信的行为,导致接收短信的手机用户被骚扰 ,给业务方造成品牌及业务不良影响,设置有效业务流控,以下为网易云信业务流控:
- 短信验证码 :使用同一个签名,对接收方手机号码限制1天最多10条短信验证码;
- 加上图形验证码;加上图形验证码可有效防止恶意工具的自动化调用,即当用户进行“动态验证码短信发送” 操作前, 弹出图形验证码,要求用户输入验证码后,服务器端再发送动态短信到用户手机上,该方法可有效解决被利用实施短信轰炸攻击的问题;
- 对验证码获取做限制(一般限制在60秒以内,超出60秒验证码作废,重新获取);
- 对验证码输入做时间限制(一般限制在30秒以内,超出30秒没有输入的验证码作废,重新获取)。
发送短信验证码为什么数字后面会出现“.0”?
json格式请使用string类型。
支持同时发多个手机吗?
支持,建议一次最多可提交100个手机号码,以防发送失败。
API调用次数有没有限制?
创建应用即可获得100万次的每日调用
其他
网易云信都提供哪些功能服务?
- 网易云信支持多个功能的SDK,包括单聊、群聊(包括普通群及高级群);
- 支持多种类型信息的传输,如文字、表情、图片、文件、语音、视频等,还可自定义消息体;
- 另外,网易网易云信还根据开发者的需求,扩展强大的云能力,包括云存储、云消息记录、云推送等。
**网易云信的收费标准,价格怎么样? **
我们的网易云信服务针对不同的业务,有不同的报价单,您可以先注册试用,再联系我们商讨价格问题。
什么是可用额度?什么是未结清金额?欠费状态的判断标准是怎么样的?
可用额度=账户余额-未结清金额。账户余额是您账户的现金余额,未结清金额是您在平台上因使用服务而产生的实时的消耗费用或折算的功能费等,这部分费用已出账统计但暂未扣费:例如按月流量计费模式下,会统计截至目前的流量费用;按月带宽峰值计费模式下,会统计截至目前的带宽峰值费用;月功能费,会统计截至目前已使用天数在计费周期中的比例,按比例折算。 因此,系统使用可用额度判断您账户是否已欠费。即使余额大于零(例如余额10元),但如果仍不足以支付未结清金额,仍然会判定为已欠费。
欠费后会立即关停服务吗?欠费关停流程是怎样的?
当您账户可用额度小于等于零时(可用额度=账户余额-未结清金额),您的账户会被系统判定为已欠费,并进入欠费关停流程,但不会立即关停服务。您需要在预警期结束之前及时操作续费充值。 欠费关停流程为:自收到欠费通知当日起,在欠费通知(邮件、短信)中说明的欠费关停预警期结束后,可用额度仍然小于等于零的账户,系统将自动关停账户全部服务。
发票申请
填写发票信息
登录网易云信官网,在发票>管理开票信息页面选择发票类型,并填写发票信息。目前支持发票类型为两种:企业增值税普通发票和企业增值税专用发票。
- 企业增值税普通发票:适用于小规模纳税人,开具的发票不能进行进项税额抵扣。
- 企业增值税专用发票:适用于一般纳锐人,开具的发票可以进行税项抵扣,有360天抵扣期限。(申请此类型发票需要进行专票资质审核)
填写邮寄信息
在管理邮寄信息页面中邮寄信息,可添加并保存多条邮寄信息
申请开票
在发票管理页面,可主动申请开票,开票金额为订单实际支付金额。 注意:申请过程中请注意保证信息、金额的正确性,因为信息填写错误导致的发票开具、邮寄出错,将不能重开。
- 发票管理页面申请开票
- 选择开票订单后,点击“申请发票”
- 确认发票信息和邮寄信息,然后提交发票申请
- 在提交发票申请后,如果发票状态为待开票待审核状态时,可在线取消开票申请
您提交开票申请后,如信息无误,我们会在7个工作日内完成开具与邮寄,请耐心等待。
查看开票状态与发票
申请开票后,可以在发票管理页面的发票历史申请记录列表中,查看发票开具状态,并可以在详情中查看当次开票的发票信息和邮寄信息。
- 查看历史开票记录
- 查看发票详情
网易云信售后服务怎么样?
网易网易云信团队拥有10年以上的IM开发及运营经验,数名业界资深专家、高级工程师保障IM云服务的高品质运作,提供7*24小时的实时运维服务。
日活数里的日活是什么定义?
“日活”即“日活跃用户数”,指一个自然日内与网易云信服务器成功进行业务行为交互的用户总数,业务行为包含但不局限于(登录、重连、消息行为、群组行为、好友行为、个人信息行为),同一个用户在一个自然天内有多次业务行为交互只统计一次。每个产品(应用)的日活分别统计。
网易云信是否支持推送?
网易云信提供移动端消息推送的能力。即用户应用在后台时可以通过通知栏提醒的方式告知用户消息到达。网易云信推送针对网易云信IM账号,即需指定对方id投递消息或通知。
为什么我退到后台以后,系统推送屏幕不会亮
iOS的APNS推送,退到后台,是可以点亮推送的。Android的推送因为谷歌退出中国市场的缘故,导致推送功能并没有像苹果的APNS推送那么完善,但是我们工程师经过优化,可以保证进程在的时候,可以实时收到推送,只是Android的Demo点亮屏幕没有顺手做了,所以这个需要开发者上层自行实现。
SDK日志存放路径
安卓: /外卡根目录/{app_package_name}/nim/log/nim_sdk.log
iOS: {Documents}/NIMSDK/Log 也可以调用 [[NIMSDK sharedSDK] currentLogFilepath] 来获取当前log文件地址 真机:window-》device-》自己的机器-》自己的沙盒-》里面有个像齿轮一样的东西-》downLoad
PC: 数据缓存目录默认为"{系统的AppData 目录}{App 传入的目录名}\NIM{某个用户对应的用户数据目录}”,还可以由App 完全自定义用户数据目录,需要传入完整的路径,并确保读写权限正确。
点击跳转到对应会话页面的问题
ios: 如果收到推送的时候,程序还没死 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ //拿userinfo的payload做跳转 }
如果收到推送的时候,程序死了
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//拿launchOptions里的payload做跳转
}
Android:( demo/main/activity/WelcomeActivity )
/**
* 通知栏跳转提醒
* @param intent
*/
private void parseNotifyIntent(Intent intent) {
ArrayList<IMMessage> messages = (ArrayList<IMMessage>) intent.getSerializableExtra(NimIntent.EXTRA_NOTIFY_CONTENT);
if (messages == null || messages.size() > 1) {
showMainActivity(null);
} else {
showMainActivity(new Intent().putExtra(NimIntent.EXTRA_NOTIFY_CONTENT, messages.get(0)));
}
}
自定义消息与自定义通知的区别
自定义通知: 1. 消息格式由第三方 APP 自己定义,只要内容是 String 就可以了。 2. 第三方 APP 的客户端和服务器均可以发送自定义通知。 3. 接收对象可以是个人,也可以是群组。 4. 可设置通知的到达级别:保证必达,或是通知接收者只有当前在线才能收到。 5. 如果需要向 iOS 用户推送,可自定义 iOS 的推送内容。
自定义消息: 自定义消息采用附件的方式展示给开发者。体现在 IMMessage类中,自定义消息的内容会被解析为 MsgAttachment对象, 由于 SDK 并不知道自定义消息的格式, 第三方 APP 需要注册一个自定义消息解析器。
自定义通知和自定义消息的不同之处在于: 1. 自定义消息归属于网易网易云信的消息体系内,适用于会话中,由 SDK 存储在消息数据库中,与网易网易云信的其他内建消息类型一同展现给用户。 2. 自定义通知主要用于第三方的一些事件状态通知,网易网易云信不存储,也不解释这些通知,网易网易云信仅仅负责替第三方传递和通知这些事件,起到透传的作用。
网易云信是否支持陌生人聊天及匿名登录?
网易云信支持陌生人聊天。匿名登录基于网易云信的实现是后台分配特殊的网易云信账号供用户登录使用。
sdk有多大
iOS:29M (不包含音视频 ) Android:3M (不包含音视频 ) PC:6.9M WEB:0.6M iOS由于 SDK 是静态库,为方便开发者使用,我们将 armv7 i386 x86_64 arm64 平台的静态库合并成一个 Fat Library ,导致整个 SDK 比较大。但实际编译时会根据调用功能多少增加 ipa 文件大小,实测大约只会增加 2-3M 左右。
直播点播通用问题
影响直播效果的因素有哪些?
直播需要经过下列过程:
Ⅰ 推流部分:从主播设备到推流服务器
Ⅱ 拉流部分:从拉流服务器到观众设备
- 正确的参数设置,良好的设备性能,充足的网络带宽,稳定的网络连接,才能确保主播推流和观众拉流的质量和效果;
- 主播进行推流,需要使用网络的上行带宽,而有些网络类型上行带宽远远低于下行带宽,容易导致主播网络连接的质量问题。因此对于网络上行带宽,直播前需提前测试,直播中要重点关注;
- 如果推流环节出现问题,所有观众都会受到影响;如果拉流环节出现问题,则部分观众会受到影响。
影响直播效果的具体因素包括:
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协议 |
各播放拉流协议的比较
协议 | 简介 | 延迟 |
---|---|---|
RTMP Real Time Messaging Protocol |
Adobe的专利协议。 安装Flash Player即可播放。 是国内的主流直播协议。 RTMP基于TCP,默认使用端口1935。 |
2-5秒 |
HTTP-FLV Hypertext Transfer Protocol Flash Video |
无需Adobe专利。 流式传输媒体内容。 使用HTTP协议,基本不受防火墙限制。 |
2-5秒 |
HLS Http 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播放器样式和组件自定义。