Hi Paul, I have had to deal with differing player intervals or timeScales in my application which I develop on the Mac working with the player in LC. It uses Video files only. I first realized this was a problem when I would create a project file that annotates a video then later compress the video and the next time I would open the project file all the time based data was off even though it was the same video. I found that the compression program used a different timeScale than the original movie depending on the compression codec, frame rate etc.
What I had to do to deal with the varying timeScales was do a conversion to a common timescale that I used in the application and when saving to the project file. I used an application/document timescale of 1000/second. I had considered a number of options i.e. something divisible by 30 for 30 FPS, using another common timeScale like 600 or 90000.. In the end I used 1000 or 1000/second since milliseconds is property I used in the application for tracking user action so I considered that a time scale that was native to the application. When I retrieved any of the Player’s time properties - currentTime, startTime, endTime, timeScale, and duration etc. I would convert them with the following function to the 1000/sec common timeScale function convertPlayerTimeScaleTo1000 pTime, pTimeScale if pTimeScale = 0 or pTimeScale is empty then # This is to prevent Divide by zero errors or other issues if timeScale is empty put 600 into pTimeScale end if local t1000Scale put round(pTime/pTimeScale * 1000) into t1000Scale return t1000Scale end convertPlayerTimeScaleTo1000 Then when I set any of those properties I use this function to convert back from the application timescale 1000/sec to the native timeScale. function convert1000ToPlayerTimescale pTime, pTimeScale local tNativeScale put round(pTime/1000 * pTimeScale) into tNativeScale return tNativeScale end convert1000ToPlayerTimescale I did not notice big differences in values when I used different codecs from the same video but I guess that makes sense since I am only working on the Mac. My application will be running on Windows as well so that is something I am going to have to test. Regards, Martin Koob > On Feb 18, 2020, at 10:13 AM, Paul Dupuis via use-livecode > <use-livecode@lists.runrev.com <mailto:use-livecode@lists.runrev.com>> wrote: > > Or even more specifically, does any one know what player object "intervals" > (the values for currentTime, startTime, endTime, timeScale, and duration > properties of a player) actually are? Are they frames? Something else? And > does anyone know why they vary by Media Framework (i.e Quicktime vs Apple > Video Foundation vs DirectShow) > > For example, the same MP3 file under Quicktime (macOS or Windows) has a > timeScale of 600, and under AVF a timeScale of 44100 and under DirectShow a > timeScale of 10000000. > > What's more if you get the duration and the timeScale and convert to seconds, > the different frameworks give (slightly) different values (largest difference > is 3s on a 2m45s MP3) > > For example, look at the lengthy list of data below: This is timeScale and > duration for different file formats by media frameworks. A file of the same > name (i.e. audio.aac) is the SAME file on any media Framework that can read > it. Formats readable by the player differ by Media Framework. The data is tab > delimited, so if the listserv preserves the tabs, you should be able to cut > and paste to a spreadsheet for easier viewing. _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode