Jwplayer5.10视频拍照(截图)
Jwplayer是个非常好用的开源网页视频播放器,可以在播放器中下载到jwplayer,在源代码中下载到源代码,它提供丰富的javascript API接口,同时还提供非常多的插件,现在最新的jwplayer已经到了6。
Jwplayer提供插件接口,为jwplayer开发插件只需实现IPlugin接口即可。最近为jwplayer开发了一个截图插件,是基于jwplayer4原来的一个叫snapshot的插件来完成的,现在将实现方法分享给大家:
使用jwplayer截图的主要原理就是使用BitmapData的draw方法对jwplayer的图层(layer)进行绘制,其关键就是找到jwplayer加载媒体”media”的layer,原先的snapshot插件在jwplayer5.x中老是绘出黑屏,就是因为jwplayer5的layer加载发生了变化,要想了解jwplayer的layer加载,可以查看源代码 “src\com\longtailvideo\jwplayer\view\View.as”文件,我使用的是jwplayer5.10,其layer布局为:
RootReference--stage->loaderScreen->loaderAnim
->_root->_maskerLayers->background
->imageLayer
->mediaLayer->_model.media.display
->components->DisplayerComponent
->PlaylistComponent
->DockComponent
->ControlBar
值得说明的是:loaderScreen并不是RootReference. Stage的第一层(index=0),因为在View的completeView方法中,loaderScreen会被删除掉。
这样就可以根据需要,来获取jwplayer的各层layer了,比如想要获取mediaLayer层,则代码为:
Sprite( RootReference.stage.getChildAt(0). getChildAt(0)). getChildAt(2);
说明:------------------_root---------------maskerLayers----mediaLayer---
mediaLayer即为前文中提到的加载媒体”media”的实际的播放层,那么,在jwplayer5.10中实现对所播放的视频进行截图的代码为:
1.引入包:
import com.adobe.images.JPGEncoder;//jpg编码类
import flash.display.*;//BitmapData类
import com.longtailvideo.jwplayer.utils.RootReference;
2.截图
private function Clip(event:MouseEvent):void {
private var bitmap:BitmapData;
private var encoder:JPGEncoder;
encoder = new JPGEncoder(90);
bitmap = new BitmapData(width, height,false,0x000000);
bitmap.draw(videoObject());
encoder.encode(bitmap);
}
private function videoObject():DisplayObject {
var skn:Sprite = RootReference.stage.getChildAt(0) as Sprite;
var tem:Sprite = Sprite(skn.getChildAt(0)).getChildAt(2) as Sprite;//mediaLayer
return tem as DisplayObject;
};