sannies / mp4parser

A Java API to read, write and create MP4 files
Apache License 2.0
2.74k stars 563 forks source link

H264NalConsumingTrack -- wrong sliceNalUnitHeader used for sample creation #383

Open dstukalov opened 5 years ago

dstukalov commented 5 years ago

I think in H264NalConsumingTrack.consumeNal the assignment sliceNalUnitHeader = nalUnitHeader; should be after the call to createSample:

                FirstVclNalDetector current = new FirstVclNalDetector(nal,
                        nalUnitHeader.nal_ref_idc, nalUnitHeader.nal_unit_type);
                // sliceNalUnitHeader = nalUnitHeader; // <-- this causes wrong nal unit header to be used in createSample
                if (fvnd != null && fvnd.isFirstInNew(current)) {
                    LOG.debug("Wrapping up cause of first vcl nal is found");
                    pushSample(createSample(buffered, fvnd.sliceHeader, sliceNalUnitHeader), false, false);
                    buffered.clear();
                }
                sliceNalUnitHeader = nalUnitHeader; // <--
                fvnd = current;
mondain commented 4 years ago

@sannies is this valid? I'm attempting to use H264NalConsumingTrack and I'm getting unplayable content, so I'm curious about this issue.