Search code examples
javaeventsmigrationvlcvlcj

VLCJ-4: audio playback stops too early ("finished" event is fired before end of media)


After migrating my Java application from vlcj-3.12.1 to vlcj-4.8.2 I am observing that the finished() event is being fired approximately 2 seconds before the media has reached its end/full length/duration. This messes up my GUI as I have a media time display showing both elapsed and remaining time. So when it shows 2 seconds remaining now, it suddenly jumps down to 0 and it sounds like the last bit of the audio is being "cut off".

I have tried various media files and various audio formats with different bitrates (including VBR) - the result is identical in all cases. The following logfile snipplet shows that the length of the media is being correctly read when the playing() event is received (24 secs). I am logging the timeChanged() events during playback. You can see that these events stop coming right before the media time reaches ~22 secs. Then the finished() event gets fired. No more timeChanged() events thereafter - the last 2 seconds of playback are missing.

Is this a bug in VLC or VLCJ which is targeted for an upcoming version or might I be doing something wrong? The issue did not occur with vlcj-3.12.1 and it also does not occur when playing the media with native VLC. I really don't want to downgrade again but this is kind of a let-down. I am running the latest VLC version 3.0.17.4 on Windows 10 with Java 17.0.5.

Thanks in advance!


Solution

  • I have found the solution. The issue was related to the following VLC parameters that I passed to the MediaPlayerFactory:

    --file-caching=2000
    --network-caching=2000
    

    It is exactly these 2 seconds that the media player skips playing at the end of the file. Not sure how this is related, maybe it's a bug. These settings haven't caused any trouble in previuos versions of VLC. I have removed caching for now and everything is back to normal.