Monday, 21 December 2020

Exoplayer HLS endless buffering

I have an issue playing a stream, this is the data from the EventLogger:

 D/EventLogger: tracks [eventTime=16.68, mediaPos=5.04, window=0, period=0
2020-12-15 14:26:21.803 D/EventLogger:   MediaCodecVideoRenderer [
2020-12-15 14:26:21.803 D/EventLogger:     Group:0, adaptive_supported=N/A [
2020-12-15 14:26:21.804 D/EventLogger:       [X] Track:0, id=0, mimeType=video/avc, bitrate=1470000, codecs=avc1.4D401E, res=720x576, fps=25.0, supported=YES
2020-12-15 14:26:21.804 D/EventLogger:     ]
2020-12-15 14:26:21.804 D/EventLogger:     Metadata [
2020-12-15 14:26:21.804 D/EventLogger:       HlsTrackMetadataEntry
2020-12-15 14:26:21.804 D/EventLogger:     ]
2020-12-15 14:26:21.804 D/EventLogger:   ]
2020-12-15 14:26:21.804 D/EventLogger:   FfmpegAudioRenderer [
2020-12-15 14:26:21.804 D/EventLogger:     Group:0, adaptive_supported=N/A [
2020-12-15 14:26:21.804 D/EventLogger:       [X] Track:0, id=6128/4, mimeType=audio/mpeg-L2, channels=2, sample_rate=48000, language=srb, supported=YES
2020-12-15 14:26:21.804 D/EventLogger:     ]
2020-12-15 14:26:21.804 D/EventLogger:   ]
2020-12-15 14:26:21.804 D/EventLogger:   MediaCodecAudioRenderer []
2020-12-15 14:26:21.804 D/EventLogger:   TextRenderer []
2020-12-15 14:26:21.804 D/EventLogger:   MetadataRenderer [
2020-12-15 14:26:21.804 D/EventLogger:     Group:0, adaptive_supported=N/A [
2020-12-15 14:26:21.804 D/EventLogger:       [X] Track:0, id=null, mimeType=application/id3, supported=YES
2020-12-15 14:26:21.804 D/EventLogger:     ]
2020-12-15 14:26:21.804 D/EventLogger:   ]
2020-12-15 14:26:21.804 D/EventLogger:   CameraMotionRenderer []
2020-12-15 14:26:21.804 D/EventLogger: ]
2020-12-15 14:26:21.808 D/EventLogger: downstreamFormat [eventTime=16.69, mediaPos=5.04, window=0, period=0, id=0, mimeType=null, bitrate=1470000, res=1048x576, fps=25.0]
2020-12-15 14:26:21.808 D/EventLogger: videoInputFormat [eventTime=16.69, mediaPos=5.04, window=0, period=0, id=0, mimeType=video/avc, bitrate=1470000, codecs=avc1.4D401E, res=720x576, fps=25.0]
2020-12-15 14:26:21.823 D/EventLogger: audioDecoderInitialized [eventTime=16.70, mediaPos=5.04, window=0, period=0, ffmpegLavc58.54.100-mp3]
2020-12-15 14:26:21.823 D/EventLogger: audioInputFormat [eventTime=16.70, mediaPos=5.04, window=0, period=0, id=6128/4, mimeType=audio/mpeg-L2, channels=2, sample_rate=48000, language=srb]
2020-12-15 14:26:21.832 D/EventLogger: audioSessionId [eventTime=16.71, mediaPos=5.04, window=0, period=0, 1857]
2020-12-15 14:26:21.997 D/EventLogger: loading [eventTime=16.88, mediaPos=5.04, window=0, period=0, false]
2020-12-15 14:26:27.782 D/EventLogger: timeline [eventTime=22.66, mediaPos=0.04, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2020-12-15 14:26:27.782 D/EventLogger:   period [?]
2020-12-15 14:26:27.782 D/EventLogger:   window [21.24, true, true]
2020-12-15 14:26:27.782 D/EventLogger: ]
2020-12-15 14:26:33.827 D/EventLogger: timeline [eventTime=28.71, mediaPos=-4.96, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2020-12-15 14:26:33.827 D/EventLogger:   period [?]
2020-12-15 14:26:33.827 D/EventLogger:   window [21.48, true, true]
2020-12-15 14:26:33.827 D/EventLogger: ]
2020-12-15 14:26:39.872 D/EventLogger: timeline [eventTime=34.75, mediaPos=-9.96, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2020-12-15 14:26:39.872 D/EventLogger:   period [?]
2020-12-15 14:26:39.872 D/EventLogger:   window [21.44, true, true]
2020-12-15 14:26:39.872 D/EventLogger: ]

Here's how the player is set up:

    DataSource.Factory dataSourceFactory = Tools.createDataSourceFactory(getActivity(), Util.getUserAgent(getActivity(), getActivity().getPackageName()));

    DefaultRenderersFactory defaultRenderersFactory = new DefaultRenderersFactory(getActivity())
        .setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER);

    DefaultTrackSelector defaultTrackSelector = new DefaultTrackSelector(getActivity());

    factory = new HlsMediaSource.Factory(dataSourceFactory)
        .setAllowChunklessPreparation(true);

    player = new SimpleExoPlayer
        .Builder(getActivity(), defaultRenderersFactory)
        .setTrackSelector(defaultTrackSelector)
        .build();
    player.addAnalyticsListener(new EventLogger(defaultTrackSelector));
    binding.playerView.setPlayer(player);

public static DefaultDataSourceFactory createDataSourceFactory(Context context, String
    userAgent) {
    // Default parameters, except allowCrossProtocolRedirects is true
    DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(
        userAgent,
        null,
        DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
        DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
        true /* allowCrossProtocolRedirects */
    );
    return new DefaultDataSourceFactory(
        context,
        null,
        httpDataSourceFactory
    );
}

The only difference i've found between this and another stream with the same codecs (avc + mpeg L2 audio) that is working in the same player is that the "mediaPos" is negative in this stream and is gradually reducing instead of increasing.

The same stream works with VLC, and also another application (which i don't have the source to) that uses ExoPlayer.

I've tried disabling the ffmpeg extension - it changes nothing.

I'm using ExoPlayer 2.12.2 version.

Also it doesn't work in the ExoPlayer demo app.



from Exoplayer HLS endless buffering

No comments:

Post a Comment