one*_*ney 6 apache-flex video actionscript-3 videodisplay
我正在使用VideoDisplay播放flv,mov和mp4,一切都很好.它们都是通过渐进式下载加载的,并且没有流式传输.我想要做的是抓取一个指定的帧(就像在10秒标记处显示的那样),将其转换为位图并使用该位图作为视频的预览图像.我想在运行时这样做,所以我不必为每个要显示的视频创建预览图像.
有什么想法如何做到这一点?我宁愿不通过玩它来伪造它 - 寻找那个特定的框架,然后暂停它,但我可能别无选择?
Ryan 和 James 是正确的——正确的方法可能是在上传/转码时提取帧。但如果这不是一个选项,您可以选择使用您自己的某种默认/占位符图像(通用的或以某种方式适合尚未捕获拇指的所有视频),并且只需使用 VideoDisplay 的 DisplayObject-ness抓取然后将帧上传到您的服务器,例如:
<mx:Script>
<![CDATA[
var captured:Boolean;
private function creationCompleteHandler(event:Event):void
{
videoDisplay.source = "http://yourserver/yourvideo.flv";
}
private function videoDisplay_playheadUpdate(event:VideoEvent):void
{
if (!captured && videoDisplay.playheadTime >= 10)
capture();
}
private function capture():void
{
var bmpData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);
bmpData.draw(videoDisplay);
captured = true;
// Now just upload the byte array to your server for the next user
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
// ... etc.
}
]]>
</mx:Script>
<mx:VideoDisplay id="videoDisplay" playheadUpdate="videoDisplay_playheadUpdate(event)" />
Run Code Online (Sandbox Code Playgroud)
再说一次,它可能不是最优雅的解决方案,但它确实有效。这样,第一个用户会看到通用图像,但此后每个用户都会获得生成的缩略图。(当然,到那时您已经上传并正确关联了。)有意义吗?