16.4.获得视频长度

问题
我想知道视频长度是多少
解决办法
使用onMetaData( )回调函数读取长度的元数据值
讨论
NetStream类没有定义一个属性指明视频长度,不过大多数情况,可以从flv文件本身获得长度值。

flv文件可以包含元数据,大多数视频编码器都包含长度元数据,单位为秒,我们可通过ActionScript读取它。

当一个NetStream对象载入一个flv文件,它会自动调用onMetaData( )回调方法,该回调模型不同于ActionScript 3.0 APIs 中的一般事件模型,一般情况下我们通过使用addEventListener( ). 对一个事件进行监听,但是元数据事件必须为一个对象定义一个叫onMetaData( )方法,然后把这个对象赋值给NetStream对象的client属性。该方法自动传递一个类型为Object的关联数组,其包含flv文件的元数据信息。下面的例子是用trace( )显示视频的长度元数据:
+展开
-ActionScript
var client:Object = new Object( );
client.onMetaData = function(metadata:Object):void {
trace(metadata.duration);
};
videoStream.client = client;

上面的例子代码实际上并不实用,我们更喜欢把函数引用赋值给NetStream对象的onMetaData属性:
+展开
-ActionScript
package {
import flash.display.TextField;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.NetStatusEvent;
import flash.display.TextFieldAutoSize;
import flash.display.Sprite;
import flash.events.Event;
public class Example extends Sprite {
private var _stream:NetStream;
private var _video:Video;
private var _playbackTime:TextField;
private var _duration:uint;
public function Example( ) {
_video = new Video(160, 120);
_playbackTime = new TextField( );
_playbackTime.autoSize = TextFieldAutoSize.LEFT;
_playbackTime.y = 120;
_playbackTime.text = "test";
_duration = 0;
var connection:NetConnection = new NetConnection( );
connection.connect(null);
_stream = new NetStream(connection);
_stream.play("video.flv");
var client:Object = new Object( );
client.onMetaData = onMetaData;
_stream.client = client;
_video.attachNetStream(_stream);
addChild(_video);
addChild(_playbackTime);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onMetaData(data:Object):void {
_duration = data.duration;
}
private function onEnterFrame(event:Event):void {
if(_duration > 0 && _stream.time > 0) {
_playbackTime.text = Math.round(_stream.time) + " / " + Math.round(_duration);
}
}
}
}

加支付宝好友偷能量挖...


评论(0)网络
阅读(113)喜欢(0)flash/flex/fcs/AIR