2011-02-03 4 views
0

, 나는 큐 포인트의 몇 가지를 추가 너무 늦게 트리거, 다음 콜백을 등록하고 당한다마다 추적 :초기 액션 영화 큐 포인트가 나는 영화를 재생하기 전에

private function onCuePoint(evt:CuePointEvent):void { 
     var cuePointObject:Object = {name:evt.cuePointName, time:evt.cuePointTime, type:evt.cuePointType};   

     trace("onCuePoint: " + evt.cuePointName + "=" + cueDict[evt.cuePointName] + " @t=" + cuePointObject.time + " playtime=" + playheadTime); 
    } 

당신에게 ' d cuePointObject.time은 대략 영화의 playheadTime과 같을 것이라고 생각합니다. "cue3.4는"트리거하고 나머지는 어떤 이유에 따라 때까지 기다립니다 것처럼

onCuePoint: cue3.4=cue3.4 @t=5.6 playtime=5.611 
onCuePoint: cue1=cue1 @t=1 playtime=5.611 
onCuePoint: cue2=cue2 @t=3 playtime=5.611 
onCuePoint: cue2=cue2 @t=5 playtime=5.611 
onCuePoint: cue3.1=cue3.1 @t=5 playtime=5.611 
onCuePoint: cue3.1=cue3.1 @t=5.2 playtime=5.611 
onCuePoint: cue3.2=cue3.2 @t=5.2 playtime=5.611 
onCuePoint: cue3.2=cue3.2 @t=5.4 playtime=5.611 
onCuePoint: cue3.3=cue3.3 @t=5.4 playtime=5.611 
onCuePoint: cue3.3=cue3.3 @t=5.6000000000000005 playtime=5.611 
onCuePoint: cue3.4=cue3.4 @t=5.8 playtime=5.888 
onCuePoint: cue3.5=cue3.5 @t=5.8 playtime=5.888 
onCuePoint: cue4=cue4 @t=10 playtime=9.92 
onCuePoint: cue1=cue1 @t=11 playtime=11.221 

것 같습니다 : 여기에 출력합니다. 그것들은 배열로 비디오에 추가됩니다.이 배열은 대략적인 순서로 정렬되므로 cue3.4가 첫 번째가 아닙니다.

+0

actionscript 큐 포인트가 항상 신뢰할 수있는 것은 아닙니다. 포함 된 큐 포인트를 사용할 수 있다면 좋을 것입니다. actionscript 큐 포인트를 사용하고 있는데 제대로 작동하지 않는다면 Timer 클래스 (여러 인스턴스 또는 시간 값 배열에서 큐 간 상대 시간으로 업데이트하는 단일 인스턴스)를 사용할 수 있습니다. –

+0

"안정적인"이란 무엇을 의미합니까? 나는 그들이 +/- 0.1 초 이내에 어느 곳에서든지 방아쇠를 당길 수 있다는 것을 알고 있지만,이 유스 케이스의 경우 나에게 도움이된다. 삽입 된 큐 포인트는 비디오가 이미 인코딩 된 후에 필 요한 주석 UI를 수행 할 때 옵션이 아닙니다. – Srekel

답변

0

잠시 동안 디버깅을 한 후에 문제가 발견되었으므로 누군가 다른 문제가 발생할 경우를 대비하여 여기에 해결책을 게시하고 있습니다.

Flex에서 버그가 있습니다. v3.6을 사용하고 있지만 고정되어 있는지 여부는 알 수 없습니다. 큐가 CuePointManager에 추가되면 큐의 시간을 기준으로 삽입 정렬을 수행합니다. 그러나, 알고리즘의 한 시점에서이 같은 숫자 반올림 : 나중에 다음

var compTime1:Number = Math.round(time * 1000); 
var compTime2:Number = Math.round(cuePoint.time * 1000); 

그리고, 그것은 인덱스를 확인하는 라운딩을 사용하지 않고 (는 큐 삽입을하셔야합니다 말한다) 비교 메소드가 리턴 :

index = getCuePointIndex(cuePoints, true, copy.time, null, 0, 0); 
index = (cuePoints[index].time > copy.time) ? 0 : index + 1; 

5.6000000000000005에서 트리거되는 3.3 큐는 부동 소수점 오류로 인해 그 값을 갖습니다. 즉, 0.2에서 5.4를 추가했습니다. 따라서 getCuePointIndex은 오른쪽 색인을 반환하지만 그 다음 두 번째 줄에 으로 설정되어 목록에 첫 번째로 놓입니다.

trace("pushing cue " + c.id + "@"+ c.time + " - " + ((c.time + c.duration) * 1000)/1000); 
cuePointArr.push({name:c.id + "_start", time:Math.round(c.time * 1000)/1000,    type:"actionscript"}); 
cuePointArr.push({name:c.id + "_stop", time:Math.round((c.time + c.duration) * 1000)/1000, type:"actionscript"}); 

(참고 :

내 수정 내가 그들을 추가하기 전에 단서 '시간 자신의 라운딩을 간단하게하는 것입니다 내가 가진 이후 "_start"와 "_stop"부분을 추가하기 때문에 나는했습니다 같은 이름의 두 단서가있는 문제)

희망이 있으면 도움이 될 것입니다.

관련 문제