Skip to content

[r2.14.0, rtsp library] setting repeat mode causes fatal error, resulting in force close #8994

@warren-bank

Description

@warren-bank
logcat errors:
  05-29 12:15:00.692 26748-26882/com.github.warren_bank.exoplayer_airplay_receiver E/AndroidRuntime: FATAL EXCEPTION: ExoPlayer:Playback
      Process: com.github.warren_bank.exoplayer_airplay_receiver, PID: 26748
      java.lang.NullPointerException
          at com.google.android.exoplayer2.util.Assertions.checkNotNull(Assertions.java:154)
          at com.google.android.exoplayer2.source.rtsp.RtpDataLoadable.setTimestamp(RtpDataLoadable.java:111)
          at com.google.android.exoplayer2.source.rtsp.RtspMediaPeriod$InternalListener.onPlaybackStarted(RtspMediaPeriod.java:495)
          at com.google.android.exoplayer2.source.rtsp.RtspClient$MessageListener.onPlayResponseReceived(RtspClient.java:496)
          at com.google.android.exoplayer2.source.rtsp.RtspClient$MessageListener.onRtspMessageReceived(RtspClient.java:412)
          at com.google.android.exoplayer2.source.rtsp.RtspMessageChannel$Receiver.lambda$handleRtspMessage$0(RtspMessageChannel.java:291)
          at com.google.android.exoplayer2.source.rtsp.-$$Lambda$RtspMessageChannel$Receiver$frEfu1WfqENR1_7bFfrua9iV9BY.run(lambda)
          at android.os.Handler.handleCallback(Handler.java:733)
          at android.os.Handler.dispatchMessage(Handler.java:95)
          at android.os.Looper.loop(Looper.java:136)
          at android.os.HandlerThread.run(HandlerThread.java:61)
  05-29 12:15:03.062 26748-26748/com.github.warren_bank.exoplayer_airplay_receiver E/EventLogger: playerFailed [eventTime=219.65, mediaPos=0.00, window=0, period=0
        com.google.android.exoplayer2.ExoPlaybackException: null error, index=-1, format=null, format_supported=YES
          at com.google.android.exoplayer2.SimpleExoPlayer.setVideoOutputInternal(SimpleExoPlayer.java:1922)
          at com.google.android.exoplayer2.SimpleExoPlayer.access$4000(SimpleExoPlayer.java:92)
          at com.google.android.exoplayer2.SimpleExoPlayer$ComponentListener.surfaceDestroyed(SimpleExoPlayer.java:2278)
          at android.view.SurfaceView.updateWindow(SurfaceView.java:556)
          at android.view.SurfaceView.access$000(SurfaceView.java:86)
          at android.view.SurfaceView$1.handleMessage(SurfaceView.java:129)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:136)
          at android.app.ActivityThread.main(ActivityThread.java:5118)
          at java.lang.reflect.Method.invokeNative(Native Method)
          at java.lang.reflect.Method.invoke(Method.java:515)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
          at dalvik.system.NativeStart.main(Native Method)
       Caused by: com.google.android.exoplayer2.ExoTimeoutException: Detaching surface timed out.
          at com.google.android.exoplayer2.SimpleExoPlayer.setVideoOutputInternal(SimpleExoPlayer.java:1920)
          at com.google.android.exoplayer2.SimpleExoPlayer.access$4000(SimpleExoPlayer.java:92) 
          at com.google.android.exoplayer2.SimpleExoPlayer$ComponentListener.surfaceDestroyed(SimpleExoPlayer.java:2278) 
          at android.view.SurfaceView.updateWindow(SurfaceView.java:556) 
          at android.view.SurfaceView.access$000(SurfaceView.java:86) 
          at android.view.SurfaceView$1.handleMessage(SurfaceView.java:129) 
          at android.os.Handler.dispatchMessage(Handler.java:102) 
          at android.os.Looper.loop(Looper.java:136) 
          at android.app.ActivityThread.main(ActivityThread.java:5118) 
          at java.lang.reflect.Method.invokeNative(Native Method) 
          at java.lang.reflect.Method.invoke(Method.java:515) 
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) 
          at dalvik.system.NativeStart.main(Native Method) 
      ]

quick trace through code to find cause:

  • method: RtpDataLoadable.setTimestamp
      public void setTimestamp(long timestamp) {
        if (!checkNotNull(extractor).hasReadFirstRtpPacket()) {...}
      }
  • method: RtpDataLoadable.load
      public void load() {
        extractor = new RtpExtractor(rtspMediaTrack.payloadFormat, trackId);
      }
  • inner class constructor: RtspMediaPeriod.RtpLoadInfo
      public RtpLoadInfo(...){
        this.loadable = new RtpDataLoadable(...);
      }
  • method: RtspMediaPeriod.getLoadableByTrackUri
      private RtpDataLoadable getLoadableByTrackUri(Uri trackUri) {
        RtpLoadInfo loadInfo = rtspLoaderWrappers.get(i).loadInfo;
        return loadInfo.loadable;
      }
  • method: RtspMediaPeriod.onPlaybackStarted
      public void onPlaybackStarted(...) {
        RtpDataLoadable dataLoadable = getLoadableByTrackUri(trackTiming.uri);
    
        // NEVER CALLS: dataLoadable.load();
    
        dataLoadable.setTimestamp(trackTiming.rtpTimestamp);
        // ERROR: dataLoadable.extractor is NULL
      }

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions