Did anyone ever use navigation cue points in long F4V videos?
My experience, both with AME CS5.5 and CS6:
Embedded cue points with time bigger than 35:47.520 are not properly located in F4V export.
1. Put one navigation cuepoint into a movie longer than 36 minutes. Put the cuepoint somewhere beyond 35:47.520.
2. Export movie to F4V (other settings don't matter).
3. Play F4V file in a simple Flash AS3 application, using NetStream + onCuePoint (see e.g. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fla sh/net/NetStream.html#event:onCuePoint).
Results: Cuepoint info in F4V metadata is correct, but embedded cue point is located at 00:00.000.
Expected results: Embedded cuepoint should be at 35:47.520 or beyond, where it has been put in AME.
This makes navigation cue points useless for videos longer than 35 minutes.
Can anyone confirm this as happening? Does anyone know a workaround (in AME or Flash or ...)?
Have you tried it in a FLVPlayback component while adding in the cue points programmatically? It probably shouldn't matter but it's worth a try:
I can verify that adding a cuepoint on a f4v at 36 minutes fired off immediately but reported the time as 2159.5 despite. I also immediately seek to 2150 and watch the seconds. As it rolled over 2159.5 (36 seconds) no cue was fired. This is using NetConnection/NetStream/Video.
I tried a FLVPlayback and they didn't fix that (it only wraps VideoPlayer and uses the classes in question anyhow, long shot).
However, programmatically adding in the cuePoint with FLVPlayback works. I added one at 2160 and it didn't fire off immediately like the predefined cuepoint (in the video export app). As soon as the playhead crossed 2160 I received the cuePoint event.
Full Working Example (video generated just for this, 3.67mb, a black video with white square moving painfully slow over 40 minutes...)
You'll see the embedded cue fire off immediately. After that I seek to 2150. The time is printed in a TextField. As it rolls past 2160 you'll see the programmatically added cue fire properly in trace.
Thanks Sinious, your report matches my findings. This justifies a bug report. I have submitted one.
Regarding ASCuePoints, sure have I considered using them. But that kind of cuepoint isn't precise enough for me. On debugging your movie you can see there is a property _asCuePointTolerance = 0.125 (flv.video.CuePointManager). So the cuepoint can be placed 2 videoframes (on a 25fps movie) before or 2 frames after the frame where it should be. That makes the difference between a fluid experience and seeing glitches during playback.
.125 is pretty tolerant IMHO. I tend to make anything that needs to jump smoothly from one location to another on a rounded time (x:00:00). I also make absolutely sure I have a keyframe where I intend to jump, which should be added by any software that supports inserting Flash CuePoints. Remember, without FMS you need a keyframe to seek to:
Seeks the keyframe (also called an I-frame in the video industry) closest to the specified location.
To my knowledge, programmatically adding a cue point can't somehow generate a keyframe. I haven't created a test to see how accurate this is but I'm sure you can. Just make a video and set the keyframes wildly apart with no automatic keyframing (like every 10 seconds). Try to add a cue you know to be between that block of time and see if it jumps anywhere near it.
With spatinal compression only encoding the pixels that change over time, even if it did do it, what you're requesting is Flash to return to the previous keyframe and collect all accumulated video data up to the cue point to render the frame correctly. If you jump 8 seconds into a 10 second apart duration it must accumulate 8 full seconds (say 24fps, 192 frames) worth of data. That'd definitely cause a bog if it was supported, for a good reason.
Indeed, ASCuepoints don't add keyframes to the video (i.e. no embedded cuepoints). Navigation cuepoints in AME do. That's why they are so useful: they allow very precise navigation / seeking in a movie.
Regarding spatial compression, as the docs say,
you cannot start the video at a point between the keyframes.
So in your example seeking to 8 seconds would actually move the playhead to 10 seconds.
I have done some testing on the accuracy of ASCuePoints, and there is indeed an inaccuracy of about 0.25 seconds. The inaccuracy depends among others on how dense the keyframes are. Adding more keyframes makes ASCuepoints more precise.
I have to make up my mind on what to do next. Can I wait for a bug fix? BTW, is there any way to know the status of bug reports? Otherwise I might try to use very small keyframe distances and see where that gets me.
Err, make that 4.9 seconds . Yes it'd seek to 10, you're right.
All the bugs be here:
If you can find it in search, vote it up for a faster fix and share the bug link. I'll vote it up as well. The status of any bug is indicated in the upper right including state and priority. Issues like this that all users will encounter are likely to be fixed faster than rare or unreproducable errors. Feel free to (modify if you wish) or submit the example code I listed above. That helps get bugs fixed quicker when the Adobe team doesn't need to generate anything to test reproduction (esp the 40min video I had AE render just to test it haha).
I had submitted a Premiere bug report, as AME is shipping with Premiere these days. But these bug reports aren't accessible.
So I have created a new bugreport, you can find it (and vote for it) at https://bugbase.adobe.com/index.cfm?event=bug&id=3400547. I can't vote for it myself, though.
Thanks a lot!
I created my 40 minute video with After Effects using a marker (settings->flash cue point) for mine so it's not actually a Premiere bug. I also did it with Sorenson Squeeze on my source file. I believe this is solely a Flash issue. The cuepoint is fine, but flash is glitching reading it.