android显示动画一直播放器,播放器适配经验总结——Android

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报文中有多个音频帧。没有进一步排查原因。

方案:

备注:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值