当前位置:   article > 正文

播放器适配经验总结——Android_播放能力适配

播放能力适配

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

1、不能播放

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

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

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

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

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

2、无图像

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

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

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

方案:改成H.264 Baseline压缩

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

3、音视频不同步

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

范围:部分设备

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

方案:

4、不能播放

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

范围:一款三星手机

原因:在RTSP DESCRIBE请求后,直接失败,怀疑与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服务端没有发送RTCP Sender Report

方案:发送RTCP Sender Report

8、一直加载2

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

范围:三星的一款手机

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

方案:

备注:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/852535
推荐阅读
相关标签
  

闽ICP备14008679号