From what I recall, seek accuracy is dependant on the keyframe rate of your
FLV
(which is not the same as the frame rate of your FLV), and not fps of the app.
It's a tradeoff: if you encode your FLV with a high keyframe rate, your
filesize
will be astronomical, and you'd better streaming that sucka. And I don't
beleive
you can create cuepoints at a higher interval than your FLV keyframe rate.
And taking BitmapData on a video has security restrictions, so you'd want to
look into them, and for a live playing video that would be hugely processor
intensive and land up possibly slowing down playback, which would defeat the
point.
So my advice is increase the keyframe encoding rate of your FLV, and if the
filesize gets too large you'll have to stream it. That's your only practical
solution.
___
Joseph Balderson, Flash Platform Developer | http://joeflash.ca
liu_bai_un wrote:
I'm trying to figure out how to get more accurate seek times (to
milliseconds). I've been using the VideoDisplay and imported Flash's
FLVPlayback component to Flex. For the reference video I'm using, I
get about a 3-4 second accuracy, when the frame rate is at 30fps.
From my understanding, all video files loaded into Flex/AIR are
considered progressive downloads, and therefore can only seek to
keyframes*.
I've been messing around with a couple ideas:
- skipping to the previous keyframe, play, and pause on exact time
- extending videoplayback/video class to take a screenshot of the
frames in between
- dynamically creating cuepoints for the video at 100 ms intervals
It would be great if you guys comment on other suggestions or the
feasiblility of the above solutions.
* Just for reference, this is the javadocs for FLVPlayback.seek():
Seeks to a given time in the file, specified in seconds, with a
precision of three decimal places (milliseconds).
For several reasons, the playheadTime property might not have the
expected value immediately after you call one of the seek methods or
set playheadTime to cause seeking. First, for a progressive download,
you can seek only to a keyframe, so a seek takes you to the time of
the first keyframe after the specified time. (When streaming, a seek
always goes to the precise specified time even if the source FLV file
doesn't have a keyframe there.) Second, seeking is asynchronous, so if
you call a seek method or set the playheadTime property, playheadTime
does not update immediately. To obtain the time after the seek is
complete, listen for the seek event, which does not start until the
playheadTime property has updated.
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups Links