ExoPlayer播放中audiotrack stamp跳变到低的情况

哦k在蓝牙连接的情况下,我们的设备播放大约播放5秒之后,底层audio strack的time stamp跳变到很低,变为初始值。随后这个值经过5秒才能回到之前的情况,

这期间video的值presentation time stamp一直在5左右,卡住一直不会输出,等5s之后,延迟输出,最终造成音视频不同步。


1.复现查看最新有5秒的video数据在延时输出:

19312:06-02 11:20:18.413 D/MediaCodecVideoTrackRenderer( 2852): No earlyUs < 50000
24978:06-02 11:20:23.276 D/MediaCodecVideoTrackRenderer( 2852): No earlyUs < 50000

2. 这个延时输出中,有很长时间positionUs不变:
24910:06-02 11:20:23.215 D/MediaCodecVideoTrackRenderer( 2852): feed positionUs=5135268, firstFeed=true
24911:06-02 11:20:23.216 D/MediaCodecAudioTrackRenderer( 2852): drain positionUs=5135268, elapsedRealtimeUs=93223000
24914:06-02 11:20:23.216 D/MediaCodecAudioTrackRenderer( 2852): feed positionUs=5135268, firstFeed=true
24916:06-02 11:20:23.225 D/MediaCodecVideoTrackRenderer( 2852): drain positionUs=5135268, elapsedRealtimeUs=93234000
24917:06-02 11:20:23.225 D/MediaCodecVideoTrackRenderer( 2852): Ryan1 bufferInfo.presentationTimeUs=5336822, positionUs=5135268, elapsedSinceStartOfLoopUs=0earlyUs=201554

可以用个简单的方法翻转处理掉这个值,需要考虑较多情况可以晚上。

  @Override
  public long getPositionUs() {
    long newCurrentPositionUs = audioTrack.getCurrentPositionUs(isEnded());
    Log.d(TAG, "Ryan getPositionUs newCurrentPositionUs=" + newCurrentPositionUs);
    if (newCurrentPositionUs != AudioTrack.CURRENT_POSITION_NOT_SET) {
      if (currentPositionUs > newCurrentPositionUs) {
            Log.d(TAG, "Ryan interval, currentPositionUs=" + currentPositionUs
            + ", newCurrentPositionUs=" + newCurrentPositionUs);
        if (intrevalPresentationGap == 0) {
          intrevalPresentationGap = currentPositionUs - newCurrentPositionUs;
        }
        if (intrevalPresentationGap != 0) {
          newCurrentPositionUs += intrevalPresentationGap;
        }
      }
      currentPositionUs = allowPositionDiscontinuity ? newCurrentPositionUs
          : Math.max(currentPositionUs, newCurrentPositionUs);
      allowPositionDiscontinuity = false;
    }
    Log.d(TAG, "Ryan return getPositionUs currentPositionUs=" + currentPositionUs);
    return currentPositionUs;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值