常见问题

本节主要罗列了一些系统层面的常见问题,具体模块的常见问题还可以参考以下页面:

  • 使用Andorid SDK开发中的常见问题见这里
  • 使用iOS SDK开发中的常见问题见这里

有两种方式可以得到视频的直播地址和点播地址,一是主动调用直播云的API来获取直播列表(参见获取任务列表),也可以开发一个简单的HTTP服务,接受直播云在直播开始/停止/存档事件发生时发来的HTTP POST回调请求,参见API文档中的通知回调。关于这个问题在编程模型中也详细的做了说明。 ..

在决定输出哪些格式时,首先需要回答以下问题:

  • 应用对直播延迟的要求是多少?
  • 是否允许延迟累积?
  • 直播的视频在哪些设备上播放?是否需要支持微信分享?
  • 需要边直播边存档以供直播完后进行点播吗?
  • 直播并发有多大?

针对以上问题查询下面的表格,就可以得出结论

视频格式/协议 直播延迟 延迟是否有累积 支持的播放器 并发 存档
HTTP+FLV 2秒左右 wmp, sdk-player 200以内 可边直播边存档,配置为边直播边存档时直播时间有限制(8小时内)
HTTP+M3U8 5~10秒 wmp, sdk-player, system-player 无限制 可以边直播边存档
RTMP 拉流 1秒 wmp, sdk-player 无限制 不支持存档
RTSP 2~5秒 tcp有累积 udp无累积 sdk-player 200以内 不支持存档
MP4 不支持直播 不支持直播 sdk-player, system-player 点播无限制 专用于存档

上表中 system-player指的是android, ios设备上自带的播放器,sdk-player是指沃安提供的ios,android平台开发包中带的播放器,wmp指的是沃安提供的用于网页播放的flash插件
支持系统播放器播放有以下好处:可以用于微信分享,因为在微信中不允许调用外部播放器; 另外系统播放器一般都使用了硬件加速,播放高清视频更流畅,更稳定。

  • 从上面的分析来看,一般情况下,如果不考虑延迟的要求,使用m3u8是最好的选择,并且可以边直播边存档
  • 如果对延迟的要求很高又需要存档点播,可以采用rtmp输出直播,同时配置m3u8用于点播。

降低延迟是一个系统性工程,需要从采集端、播放端,网络几方面来考虑。下图是一个用手机SDK直播的场景,图中1,2,3分别为延迟产生的地方。

如图中所示SDK中的采集线程从摄像头采集数据并编码后写入到客户端的缓冲区, 发送线程从缓冲区读取数据并通过网络发送,当网络不好时发送数据速度慢于编码产生数据的速度,发送缓冲区就会增大,这时播放端接收不到数据就会卡顿,当网络恢复正常时客户端很快将缓冲区的数据全部发送出去,播放客户端将数据全部接收下来,但由于播放时顺序播放,虽然前面缓冲的数据全部接收下来了,但还是要按正常速度播放,这时延迟的时间就是前面卡顿时累积的时间。

要解决延迟累积,必须选择实时直播的协议如RTMP,FLV,RTSP这三种输出协议。参见输出格式的选择, 并在播放时丢弃过期的数据,需要降低延迟,需要通过以下方法减小图中三个地方的缓冲。

  1. 通过设置网络自适应 Android SDK setNetworkingAdaptive打开网络自适应功能, 在网络特别差的情况下丢包,丢弃一些编码产生的数据,以避免网络缓冲区无限增大。
  2. 在直播码流较低时,降低网络发送缓冲区的大小,即减小Android SDK connectCloud中参数buff_size的大小,一般情况下无需更改此值,只有码流低于60k时修改此值才有明显效果,最小改为4k. 而且这个修改对延迟的影响很小,只有1-2秒的效果。
  3. 在播放器端,如果是移动终端则使用直播云提供的SDK播放器, 并且使用-live参数, 参考Android平台 PlayeriOS平台 Player这样在flv或rtmp的直播流时,播放器就会丢弃接收缓冲区中的数据,总是播放最新的数据。如果是浏览器则使用直播云网页播放插件见资源下载

任何支持rtmp推流的终端/设备都可以向直播云推流,也可以使用我们提供的网页插件在PC浏览器中向直播云推流。 使用设备或其他软件向直播云推流时,必须填写完整的推流地址,推流地址的格式如下:

rtmp://xvs-tcp-input.zhiboyun.com/live?user_name=用户名字串&password=用户密码字串&service_code=服务码字串&output_tags=输出格式标签列表&opaque=

解释一下以上的推流地址格式:

  • rtmp://xvs-tcp-input.zhiboyun.com/live 为推流固定地址,不管是什么客户什么服务码都是向此地址推流。
  • 参数列表:
    • user_name 推流认证用户名,此参数必须有
    • password 推流认证用户密码, 此参数必须有
    • service_code 服务码,此参数必须有,有关服务码的概念见这里
    • output_tag 可选参数, 输出格式标签, 格式标签的概念见这里,如果服务码对应的应用配置了三种输出格式例如标签分别为output_rtmp, output_flv, output_m3u8,则如果此处不填写,则匹配全部,即同时输出三种格式,如果填写output_rtmp,output_flv, 表示同时输出output_rtmp,output_flv对应的两种格式。注意有多个输出格式标签时,必须用逗号分隔,且不能带有空格
    • opaque 当前推流任务的透传参数,透传参数的概念见这里, 注意,透传参数中有特殊字符时,一定要做url转义。点这里有一个在线urlencode的网站

一般情况下,直播云上的输出地址是随机生成的,如果应用需要固定输出地址,则可以参考以下说明:

如果是直播,以上输出配置都需要使用 live-only 配置项。不使用此配置项,则会存档,而在固定输出地址情况下,存档是无意义的,因为下次直播会覆盖上次的存档视频。如果需要存档则再使用一个output配置项。

固定直播地址,有以下几个注意点:

  1. 固定了直播输出地址,因为播放地址总是一样的,因此会有安全性问题,直播地址容易被盗链。
  2. 如果输出需要存档,则存档地址不能使用以上配置项固定。
  3. 小心规划好输出地址,否则容易引起直播地址冲突。

  • 码流与带宽单位均为kbit。
分辨率 码流(低)/对应所占带宽 码流(中)/对应所占带宽 码流(高)/对应所占带宽
320x240 224/240~288 320/296~400 425/448~496
480x360 336/400~480 480/528~616 624/624~824
640x480 448/352~480 640/624~760 832/753~982
720x480 504/464~616 720/672~840 936/880~1088
1024x768 716/616~816 1024/672~1096 1331/1200~1696
1280x720 896/704~992 1280/1120~1440 1664/1560~1840
1600x1200 1120/1032~1680 1600/1352~2048 2080/2000~2576
1920x1080 1344/1384~1616 1920/1712~2080 2496/2720~2880