AIR - 使用伪流式搜索视频

时间:2016-03-28 21:24:36

标签: actionscript-3 flash air

我在AIR应用程序中为流视频创建了一个擦除器。它适用于短视频,但使用较长的视频则不起作用。

问题是如何使seek()方法转到特定时间而无需完全缓冲视频数据?

感谢:

var _duration:Number;
var _scrubbing:Boolean;

//-------------------- download and add the video ----------------------------//

var nC:NetConnection = new NetConnection ();
nC.connect(null);

var ns:NetStream = new NetStream(nC);
ns.play("")

var vid:Video = new Video();
vid.attachNetStream(ns);
addChild(vid);


vid.width = v_container.width;
vid.height = v_container.height;
vid.smoothing = true;

var client:Object = new Object(); 
client.onMetaData = onMetaData; 
ns.client = client;             


function onMetaData(metaData:Object):void
{
    _duration = metaData.duration;  
}

//--------------------  creat playhead and lesten to mouse event--------------------------//

drag.addEventListener(MouseEvent.MOUSE_DOWN,drag_To_Position);
stage.addEventListener(MouseEvent.MOUSE_UP,_stop_drag_To_Position);
addEventListener(Event.ENTER_FRAME,calculate_position);

function drag_To_Position(e:MouseEvent):void
{
    drag.startDrag(false,new Rectangle(bar.x,bar.y,bar.width - drag.width,0));
    _scrubbing = true;
}

//---------------------------------------------------------------//

function _stop_drag_To_Position(e:MouseEvent):void
{
    drag.stopDrag();
    _scrubbing = false ;

}

//----------------- seek method & specific time ------------------//

function calculate_position(e:Event):void
{

    if ( _duration > 0 )
    {
        if ( _scrubbing == true )
        {
            ns.seek( _duration * drag.x / bar.width );
            var posi:Number = Math.floor((bar.x - drag.x) / (drag.width  - bar.width) * 100 );
            pro.gotoAndStop(posi);
        }
        else
        {
            var seckto:Number = Math.floor((bar.x - drag.x) / (drag.width  - bar.width) * 100 );
            drag.x = ns.time / _duration * bar.width ; 
            pro.gotoAndStop(seckto)
        }
    }
}

0 个答案:

没有答案