Android的流媒体协议支持不太好,标准只支持RTSP和MP4overHTTP。因为MP4头部大,启动会比较慢,另外MP4也不适合做直播。当然基于Android的开放性,完全可以自己做一个播放器,难点是要做解码和显示的适配,Android机型太多,这个适配工作量比较大。Android升级到4.0版本应该支持HLS,目前也有一些设备厂商在2.x版本上支持的HLS。但是要做统一的产品,还是只能用RTSP,毕竟2.x的设备仍然是市场的主流。

1、不能播放

现象:播放器打开后,缓冲一段时间,弹出播放失败

范围:所有Android设备,但是vlcplayer可以播放

原因:H.264视频的SPS、PPS没有发送。虽然在DESCRIBE的sdp应答里面已经通过config字段返回了SPS、PPS,但是Android上的播放器忽略了这个,还是需要在RTP流中增加冗余数据。

方案:RTP流中增加冗余的SPS、PPS数据

备注:实现完RTSP服务端后,在VLC上测试可以播放,但是在所有Android设备都不能播,寻找各种原因都没有结果,一度都觉得干脆放弃算了。这件事告诉了我们:永不放弃,在一次次失败后,你离成功就只有一步了。

2、无图像

现象:播放器打开后,有声音无图像

范围:部分影片,部分设备

原因:通过分析影片,发现不能播放的都是H.264HighProfile,设备硬件不支持。

方案:改成H.264Baseline压缩

备注:有一个设备能够播放H.264HighProfile(Mp4文件),都是通过RTSP就不能播放H.264HighProfile,可能是播放器做的有问题。

3、音视频不同步

现象:播放一段时间后音视频不同步

范围:部分设备

原因:时间上比较长,难定位

方案:

4、不能播放

现象:播放器打开后,直接显示失败

范围:一款三星手机

原因:在RTSPDESCRIBE请求后,直接失败,怀疑与SDP有关。后来通过与Live555对比,发现SDP中的各行顺序不一样,调整t和c的顺序,可以播放,但是原因不明。

方案:调整SDP中t和c的顺序,t在前,c在后

备注:在适配中,遇到不能播放的设备时,我们经常用Live555作对比,发现Live555确实不播放设备都能播放,也许是它实现得更符合协议标准。

5、画面卡顿

现象:播放时,画面会很慢,滞后于声音,声音正常。

范围:三星的手机

原因:H.264中,帧的时间戳有DTS和PTS两个,RTP的时间戳一般采用PTS,是不连续的。但是三星的播放器好像利用RTP的时间戳在做播放控制,时间戳不连续导致问题。更具体原因不明。

方案:修改RTP时间戳为DTS,只针对三星播放器

6、鸟语

现象:播放时,声音不正常,说话声音像鸟叫一样,很快。

范围:HTC的一款手机

原因:在将FLV文件通过RTP发送时,因为FLV的time_scale是1000,所以RTP的time_scale也设置为1000,但是按照RFC文档,音频的time_scale应该用采样率。

方案:修改time_scale,时间戳根据采样率重新计算。

备注:因为每个音频sample一般是1024个采样点,所以新的时间戳只要每帧增加1024即可。

7、一直加载

现象:播放一直处于加载过程中

范围:采用小米UI的手机

原因:RTSP服务端没有发送RTCPSenderReport

方案:发送RTCPSenderReport

8、一直加载2

现象:播放一直处于加载过程中

范围:三星的一款手机

原因:如果只发送音频,或者只发送视频,都能够播放。达尔文服务器能播,区别是音频帧合并了,一个RTP报文中有多个音频帧。没有进一步排查原因。

方案:

备注:

更多相关文章

  1. Android 渗透测试学习手册 第四章 对 Android 设备进行流量分析
  2. Android设备重启(reboot)---Android studio
  3. 判断Android设备是否连接网络
  4. javascript获取Android设备版本信息(备忘)
  5. Android AudioManager修改设备默认音量
  6. 获取Android设备电池电量状态

随机推荐

  1. 【Android小项目】找不同,改编自"寻找房祖
  2. VMware虚拟机Ubuntu1804编译Android 10.0
  3. android设置activity全屏 | 无标题
  4. selector属性介绍
  5. Android Studio 3.0开始android Device M
  6. 【30篇突击 android】源码统计四
  7. android 的短息发声阅读软件源码
  8. Android 浏览器的开发实例分享
  9. android动态增加控件时控制样式的方法
  10. 初学Android时,运行SDK的例子出现警告