• 8K播放网络全终端播放器H5播放器网页直播/点播播放器EasyPlayerAndroid直播画面卡在第一帧问题修复


    EasyPlayer-Android播放器是一款可针对RTSP、RTMP、RTSP&RTMP协议进行过优化的流媒体播放器,其中我们引以为傲的两个技术优势就是起播速度快和播放延迟低。

    在我们用安卓手机进行EasyPlayer的测试时,发现某些手机在运行EasyPlayer播放视频时,画面会停留在第一帧,虽然有码率预示着接收端没有问题,但是画面却卡着不动。

    分析问题

    一般来讲,这个现象有三种原因导致:

    • 没有接收到视频帧;
    • 解码器出错,只解出了第一帧图像;
    • 时间戳计算有误,导致长时间sleep。

    我们逐一排查下。

    首先在媒体帧回调的地方下个断点,发现的确有视频帧接收到,并且视频帧最终正常地push到解码的队列当中了,说明不是第一个原因。

    其次,我们看看解码器,似乎也正常工作,没有打印任何异常信息,解码线程也并未退出。那么第二个原因也初步排除。

    最后,我们尝试重新播放,跟进到解码线程里面,发现最终sleep时间大的惊人,解码线程解完首帧后就一直在睡眠状态了。再跟踪一次,发现是硬解码初始化失败,自动切换到软解码,而在软解码完成首帧解码后,未把该帧的时间戳赋值给时间戳,这样实际上首帧时间戳为0了,后续视频帧的时间戳与首帧时间戳相隔太大,sleep时间也随之变得很大。

    解决问题

    这个bug实际上比较少见,只有某些手机在硬解码出错后,自动切换到软解码的情况下才会出现,现如今大多数手机硬解码都能正常工作。如出现这种原因,我们只需将时间戳恢复正常即可。

  • 相关阅读:
    Mybatis一级缓存和二级缓存总结
    UML模型的基本概念
    Proxy patten 代理模式
    UML 基础:类图
    Java与UML交互图
    Composite Pattern (组合模式)
    用例建模指南
    Prototype Pattern(原型模式)
    Adapter Pattern(适配器模式)
    UML 类与类之间的关系
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/11995028.html
Copyright © 2020-2023  润新知