Skip to content

Exception Invalid NAL length in CMAF streams (clear video) #7698

@YongtaoS

Description

@YongtaoS

Hi there,

ExoPlayer throws Invalid NAL length exception while playing a CMAF live stream (sample files attached below). The video is not encrypted and safar/quicktime/bitmovin can play it without problem.
I appreciate much if you could identify whether the issue is.

[REQUIRED] Issue description

HLS with CMAF fragments on Safari/QuickTime/Bitmovin : OK
DASH witch CMAF fragments on Bitmovin player : OK
DASH/HLS with CMAF fragments on ExoPlayer : failed with Invalid NAL length

[REQUIRED] Reproduction steps

Android Studio
Add target stream to media.exolist.json
Run Debug 'demo'
Play the target stream
Get playback failed

[REQUIRED] Link to test content

An init fragment and a video fragment are in cmaf.zip

[REQUIRED] A full bug report captured from the device

E/EventLogger: playerFailed [eventTime=1.07, mediaPos=68.00, window=0, period=0
      com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.ParserException: Invalid NAL length
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:394)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
     Caused by: com.google.android.exoplayer2.ParserException: Invalid NAL length
        at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.readSample(FragmentedMp4Extractor.java:1317)
        at com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor.read(FragmentedMp4Extractor.java:321)
        at com.google.android.exoplayer2.source.hls.HlsMediaChunk.feedDataToExtractor(HlsMediaChunk.java:376)
        at com.google.android.exoplayer2.source.hls.HlsMediaChunk.loadMedia(HlsMediaChunk.java:343)
        at com.google.android.exoplayer2.source.hls.HlsMediaChunk.load(HlsMediaChunk.java:314)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:415)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
    ]

[REQUIRED] Version of ExoPlayer being used

r2.11.7

[REQUIRED] Device(s) and version(s) of Android being used

Virtual device: Pixel_3a_API_30_x86 (Android 10.0+)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions