src/main/java/org/jcodec/containers/mp4/QTTimeUtil.java
public static String qtPlayerTimecodeFromMovie(MovieBox movie, TimecodeMP4DemuxerTrack timecodeTrack, int mediaFrameNo)
            throws IOException {
        TrakBox videoTrack = movie.getVideoTrack();
        long editedTv = mediaToEdited(videoTrack, frameToTimevalue(videoTrack, mediaFrameNo), movie.getTimescale());

        TrakBox tt = timecodeTrack.getBox();
        int ttTimescale = tt.getTimescale();
        long ttTv = editedToMedia(tt, editedTv * ttTimescale / videoTrack.getTimescale(), movie.getTimescale());

        return formatTimecode(
                timecodeTrack.getBox(),
                timecodeTrack.getStartTimecode()
                        + timevalueToTimecodeFrame(timecodeTrack.getBox(), new RationalLarge(ttTv, ttTimescale),
                                movie.getTimescale()));
    }
public static String qtPlayerTimecodeFromMovie(MovieBox movie, TimecodeMP4DemuxerTrack timecodeTrack, int mediaFrameNo)
            throws IOException {
        TrakBox videoTrack = movie.getVideoTrack();
        long editedTv = mediaToEdited(videoTrack, frameToTimevalue(videoTrack, mediaFrameNo), movie.getTimescale());

        TrakBox tt = timecodeTrack.getBox();
        int ttTimescale = tt.getTimescale();
        long ttTv = editedToMedia(tt, editedTv * ttTimescale / videoTrack.getTimescale(), movie.getTimescale());

        return formatTimecode(
                timecodeTrack.getBox(),
                timecodeTrack.getStartTimecode()
                        + timevalueToTimecodeFrame(timecodeTrack.getBox(), new RationalLarge(ttTv, ttTimescale),
                                movie.getTimescale()));
    }
public static String qtPlayerTimecodeFromMovie ( MovieBox movie , TimecodeMP4DemuxerTrack timecodeTrack , int mediaFrameNo ) throws IOException { TrakBox videoTrack = movie . getVideoTrack ( ) ; long editedTv = mediaToEdited ( videoTrack , frameToTimevalue ( videoTrack , mediaFrameNo ) , movie . getTimescale ( ) ) ; TrakBox tt = timecodeTrack . getBox ( ) ; int ttTimescale = tt . getTimescale ( ) ; long ttTv = editedToMedia ( tt , editedTv * ttTimescale / videoTrack . getTimescale ( ) , movie . getTimescale ( ) ) ; return formatTimecode ( timecodeTrack . getBox ( ) , timecodeTrack . getStartTimecode ( ) + timevalueToTimecodeFrame ( timecodeTrack . getBox ( ) , new RationalLarge ( ttTv , ttTimescale ) , movie . getTimescale ( ) ) ) ; }
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