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;

 };

 

                         

posted @ 2013-01-05 16:08  xiaoSoldier  阅读(1406)  评论(1编辑  收藏  举报