src/main/java/org/jcodec/containers/mp4/QTTimeUtil.java
public static String qtPlayerTimecode(TimecodeMP4DemuxerTrack timecodeTrack, RationalLarge tv, int movieTimescale)
            throws IOException {
        TrakBox tt = timecodeTrack.getBox();
        int ttTimescale = tt.getTimescale();
        long ttTv = editedToMedia(tt, tv.multiplyS(ttTimescale), movieTimescale);

        return formatTimecode(
                timecodeTrack.getBox(),
                timecodeTrack.getStartTimecode()
                        + timevalueToTimecodeFrame(timecodeTrack.getBox(), new RationalLarge(ttTv, ttTimescale),
                                movieTimescale));
    }
public static String qtPlayerTimecode(TimecodeMP4DemuxerTrack timecodeTrack, RationalLarge tv, int movieTimescale)
            throws IOException {
        TrakBox tt = timecodeTrack.getBox();
        int ttTimescale = tt.getTimescale();
        long ttTv = editedToMedia(tt, tv.multiplyS(ttTimescale), movieTimescale);

        return formatTimecode(
                timecodeTrack.getBox(),
                timecodeTrack.getStartTimecode()
                        + timevalueToTimecodeFrame(timecodeTrack.getBox(), new RationalLarge(ttTv, ttTimescale),
                                movieTimescale));
    }
public static String qtPlayerTimecode ( TimecodeMP4DemuxerTrack timecodeTrack , RationalLarge tv , int movieTimescale ) throws IOException { TrakBox tt = timecodeTrack . getBox ( ) ; int ttTimescale = tt . getTimescale ( ) ; long ttTv = editedToMedia ( tt , tv . multiplyS ( ttTimescale ) , movieTimescale ) ; return formatTimecode ( timecodeTrack . getBox ( ) , timecodeTrack . getStartTimecode ( ) + timevalueToTimecodeFrame ( timecodeTrack . getBox ( ) , new RationalLarge ( ttTv , ttTimescale ) , movieTimescale ) ) ; }
Calculates and formats tape timecode as in Quicktime player

@param timecodeTrack
@param tv
@param startCounter
@return
@throws IOException
Calculates and formats tape timecode as in Quicktime player