所以我們有flv文件,例如我們用mx:vidodisplay來播放它。如何獲取我們目前正在使用的流幀?如何獲取當前正在播放的視頻文件的當前幀?
2
A
回答
2
可以查詢最近的關鍵幀的流元數據的當前時間
UPD
創建你需要處理它的onMetaData
調用流時:
private var metaInfo: Object;
private function initStream():void{ stream = new NetStream(conn); stream.bufferTime = 5; stream.addEventListener(NetStatusEvent.NET_STATUS, onStatus); stream.client = new Object(); stream.client.onMetaData = onMetaData;/*this is what you need*/ video.attachNetStream(stream); } private function onMetaData(info:Object):void { metaInfo = info; var tmpstr:String = ''; for(var s:String in info){ var tstr:String = s + ' = ' + info[s] + '\n'; tmpstr += tstr.indexOf('object') == -1 ? tstr : ''; for(var a:String in info[s]){ var ttstr:String = s + ':' + a + ' = ' + info[s][a] + '\n'; tmpstr += ttstr.indexOf('object') == -1 ? ttstr : ''; for(var c:String in info[s][a]){ var tttstr:String = s + ':' + a + ':' + c + ' = ' + info[s][a][c] + '\n'; tmpstr += tttstr.indexOf('object') == -1 ? tttstr : ''; } } } trace(tmpstr); }
在此跟蹤您會看到流的元數據是否包含以下項目:
搜索點:93:偏移量= 10342550
搜索點數:93:tim E = 165.799
或也許:
關鍵幀:次= 0,0.48,0.96,1.44,1.92,2.4,2.88,3.36,3.84,4.32,4.8,5.28,5.76,6.24
關鍵幀:filepositions = 1063, 95174,136998,176043,209542,239148,271062,302006,331724,363948,395039,427503,456317,483313
這取決於編碼器設置,如果你的元數據都有這種(metadata['keyframes']
,metadata['seekpoints']
等)的任何對象,你可以執行以下操作:
for (var i:int = 0; i < metaInfo['keyframes']['times'].length; i++) {
if (stream.time < metaInfo['keyframes']['times'][i]) {
var keyFrameNum: int = (metaInfo['keyframes']['times'][i] - stream.time < stream.time - metaInfo['keyframes']['times'][i - 1]) ? i : i - 1;
}
}
0
我做了一個靜態類來將netstream元數據對象解析爲as3對象。您可以使用JSON.stringify(parse(info))來檢查信息中的所有屬性。這個班只是草稿執行。可能是裏面的一些錯誤。
public class NetStreamMetaData
{
public static function parse(object:Object, isArray:Boolean = false):Object{
var ret:Object = {};
if(isArray)
ret = [];
var k:String;
for(k in object){
if(isNaN(Number(k))){
if(object[k] is Array){
ret[k] = parse(object[k], true);
}else{
ret[k] = object[k];
}
}else{
if(object[k] is Array){
ret.push(parse(object[k], false));
}else{
ret.push(object[k]);
}
}
}
return ret;
}
}
以及如何做這樣的事情? – Rella 2010-12-06 15:14:55