우리는 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); }
을 스트림의 메타 데이터에 다음 항목이 있는지 확인할 수 있습니다.
seekpoints : 93 : offset = 10342550
seekpoints : 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, 메타 데이터는 이런 종류의 (metadata['keyframes']
, metadata['seekpoints']
등)의 개체가있는 경우 95174,136998,176043209542239148271062302006331724363948395039427503,456317,483313
는, 인코더 설정에 당신을 따라 다음을 수행 할 수 있습니다.
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))를 사용하여 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