这篇文章介绍的故障排查涵盖了面向Android、黑莓等智能终端的RTSP/RTP流媒体协议时遇到的问题。它不涉及面向iPhone、iPad、或iPod Touch等iOS设备的Apple HLS 流媒体协议的相关问题。
终端播放能力总览
这个部分简要的介绍了终端的播放能力和支持的流传输协议。
Android:大部分Android设备都支持RTSP/RTP协议。运行2.2及以上版本的新Android设备也支持Adobe Flash player 10.1,可以播放RTMP和Adobe HDS 流媒体。 Android设备不能通过RTSP/RTP播放任何音频为MP3格式的流(包括音视频和纯音频)。支持Flash player 10.1的Android设备可以通过RTMP或Adobe HDS播放MP3流。 当Android设备播放RTSP/RTP流时,RTP数据包必须通过UDP来传输。Android不支持RTSP/RTP交错模式(RTP over TCP)。这意味着如果不能用UDP来传输RTP数据包,那么你不可能用TCP来替代UDP传输RTP数据包,这样的流是无法播放的。
有客户曾报告过在DroidX 和 Droid 2上遇到RTSP/RTP播放的问题,看起来似乎在这些设备上只有下面的几个帧大小才能正常播放:
800x480
480x320
240x160
Sony Ericsson:有客户曾报告过有些Sony Ericsson 的手机需要Baseline Profile Level 1.2 或更低才能正常播放。
BlackBerry: 大部分黑莓终端都支持RTSP/RTP流传输协议。许多黑莓手机在RTP over UDP遇到问题时还支持RTSP/RTP交错模式(RTP over TCP)。
iOS: iPhone、iPad、和iPod touch 设备只支持Apple HTTP Live Streaming。iOS设备不支持RTSP/RTP流媒体传输协议。
Windows Phone: Windows手机可以通过在Microsoft Media Platform Player Framework上构建的应用支持Microsoft Smooth Streaming协议。
其它设备: 大部分其它支持媒体播放的移动终端,例如诺基亚、三星、索爱等都支持RTSP/RTP。但对于MP3 over RTSP/RTP的支持不如AAC-LC更广泛。
配置
下面介绍了对于VOD点播和直播的应用配置。
VOD点播
首先建立一个用于VOD点播的应用。
注意:Wowza Media Server在安装时已经包含了一个预先配置好的应用,应用名为vod。
直播
要建立一个用于直播的应用,请阅读下面的参考资料(基于不同的编码器类型):
如何通过RTSP将流推送(push)给Wowza Media Server?
如何通过RTMP将流推送(push)给Wowza Media Server?
如何从RTSP源将流拉到(pull)Wowza Media Server?
如何通过RTP over UDP将流推送(push)到Wowza Media Server?
如何通过MPEG-TS over UDP将流推送(push)到Wowza Media Server?
故障排查
编码
最好是将视频编码为较低的码率和帧率、以及较低的编码复杂度。对于移动终端,最好把总码率控制在64Kbps 到 250Kbps 之间。许多移动终端没有能力处理超过30帧/秒的视频。对于移动终端最好将帧率控制在15fps到24fps 之间,同时最好编码为较低的H.264复杂度。大部分移动终端只支持H.264 Baseline Profile。 关于H.264编码的复杂度和等级,在Wikipedia里有详细讨论。
网络配置(UDP 和 TCP)
UDP
最好为RTSP/RTP流播放打开所有UDP端口(0-65535)。在输入侧,Wowza Media Server使用的端口为6970到9999之间。在输出侧(流播放侧),使用的UDP端口依赖于具体的终端设备。因此为了UDP输出流,最好是打开所有的UDP端口。 正确的配置好UDP网络有时候有些困难,它依赖你路由器和防火强的配置。如果Wowza Meida Server在NAT(network address translation)后面,要将所有的UDP端口映射到运行Wowza Media Server的服务器上,这一点非常重要。
Wowza提供了一个运行在Amazon EC2平台上的RTSP/RTP测试流,这些流可以在大部分移动终端/网络环境下正常播放。 Amazon EC2平台是一个实验RTSP/RTP流的绝好平台。要了解更多,请阅读Wowza forAmazon EC2.
有些移动网络运营商不允许RTP或UDP传输。这种情况下,许多移动终端将会转换到RTSP/RTP交错模式(RTP over TCP)上。 这样,当运营商网络不支持UDP时,这些终端将会正常播放。有些终端不支持RTSP/RTP交错模式,当UDP受阻时就无法正常播放。因此在测试你的RTSP/RTP流之前,请先使用RTSP/RTP测试流来看看是否能正常播放。
TCP
RTSP流传输协议的默认TCP端口554。有些播放器只用这个端口。因此如果你的Wowza Media Server流播放URL中使用的端口为默认的1935,那么可能无法播放。要使得Wowza Media Server使用这个端口,请打开[install-dir]/conf/VHost.xml文件,并在HostPort/Ports列表中添加554和80:
Code:
1935,554,80
请确认在同一个服务器上没有运行另一个RTSP/RTP流媒体服务器(例如Darwin Streaming Server)。它可能也使用554端口,这样会引起端口冲突。当554端口启用后,在RTSP播放URL中你可以省略端口号(因为前面介绍了这个播放器默认只能使用554端口) 例如,在使用手册中我们建议使用下面的RTSP播放URL播放VOD内容:
Code:
rtsp://[wowza-ip-address]:1935/vod/mp4:sample.mp4
554端口启用后,这个URL可以省略端口号,如下:
Code:
rtsp://[wowza-ip-address]/vod/mp4:sample.mp4
Wowza Streaming Engine 4是目前业界功能强大、API接口丰富的流媒体Server产品,采用它作为流媒体服务器产品的案例很多,直播、在线教育、IPTV都有它的用武之地。