2012-02-20 2 views
3

저는 AS3 프로젝트에서 비디오 (H264)를 재생 중입니다. 특별한 이유가있어서 특정 위치로 가고 싶습니다.Netstream 및 step() 또는 seek()?

a) NetStream.seek()로 시도해보십시오. 키 프레임에만 적용됩니다. 현재의 상황에서 이것은 1 초마다 위치를 찾을 수 있음을 의미합니다. 나는 모든 재 인코딩하지 않기 때문에,

  • 이가의 definetly 나의 마음에 드는 방법이 아니다 (더 나은 해결을 위해, 나는 가능한 한, 일명 매 프레임마다 많은 키 프레임의 키 프레임으로 동영상을 인코딩해야 할 것이다) vids.

b) NetStream.step()을 사용해보십시오. 이렇게하면 프레임마다 느리게 단계를 밟을 수 있습니다. 하지만 설명서에 다음과 같이 명시되어 있습니다.

이 메서드는 데이터가 Flash Media Server 3.5.3 이상에서 스트리밍되고 NetStream.inBufferSeek가 true 인 경우에만 사용할 수 있습니다.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#step (

이 평균을 하는가)는 데스크톱 용 AIR 불가능? 내가 그것을 시도 할 때, 아무것도 작동하지 않습니다.

제안 사항,이 문제를 해결하는 방법은 무엇입니까?

인사말 & 감사합니다! Nicolas

답변

1

동영상을 호스팅하는 Flash Media Server가없는 한 플래시 비디오는 초 단위로만 초 단위로 전송할 수 있습니다. 기술적으로, 그것은 당신이 Air에서 의도 된대로 작동하도록 할 수 있다는 것을 의미합니다. 그러나 비디오는 스트리밍을해야합니다 (바보 같은 어도비 ...).

1) 가져 오기 무비 클립과 영상 :

당신은 두 가지 옵션이 있습니다. Flash IDE에는이를위한 마법사가 있으며 FlashIDE가 아닌 환경에서만 독점적으로 개발하는 경우 SWF 또는 SWC와 같은 외부 자산으로 변환하고 내보낼 수 있습니다. 그러면 앱에 임베드되거나 런타임에로드되어 MovieClip의 프레임 단위로 이동 가능한 메서드에 액세스 할 수 있습니다. 하지만 오디오 동기화 문제 (iirc)가 있습니다. 또한 거꾸로 문지르 기는 MC의 요새가 아닙니다.

2) 이미지 시퀀스를로드하고 각 프레임을 순서대로 표시하는 나만의 비디오 객체를 작성하십시오. 자체 오디오 동기화 기능을 설정해야하지만 FLVComponent 또는 NetStream과 별개로 가장 직접적인 솔루션 일 수 있습니다.

1

나는 플래시 플레이어 9가 멋지고 부드럽지만 플레이어 10+에서는 스크럽을하지 않는 것으로 나타났습니다.

필자의 수정으로 검색 기능 호출 횟수를 < = 200ms로 제한했습니다. 이 고정 스크러빙은 플레이어 9만큼 부드럽지 않습니다. 아마도 "플래시 비디오는 초 단위로만 진행할 수 있습니다"라는 한계 때문입니까? 비디오 용 seek()를 호출하는 함수를 사용하기 위해 타이머를 사용했습니다.

private var scrubInterval:Timer = new Timer(200); 

    private function videoScrubberTouch():void { 
     _ns.pause(); 

     var bounds:Rectangle = new Rectangle(0,0,340,0); 

     scrubInterval.addEventListener(TimerEvent.TIMER, scrubTimeline); 
     scrubInterval.start(); 

     videoThumb.startDrag(false, bounds); 


    } 
    private function scrubTimeline(e:TimerEvent):void { 
     var amt:Number = Math.floor((videoThumb.x/340) * duration); 
     trace("SCRUB duration: "+duration+" videoThumb.x: "+videoThumb.x+" amt "+amt); 

     _ns.seek(amt); 

    } 
0

Demo link (또는 데스크탑 플래시 플레이어를 통해 브라우저의 외부 테스트 the SWF file를 얻을 수)를 확인하시기 바랍니다.
참고 : 데모에는 H.264 비디오 코덱 및 AAC 또는 MP3 오디오 코덱이 포함 된 FLV가 필요합니다.

그 소스 코드는 여기에서 :도 (바이트 계)는 상기 데모 Github link

구하고 프레임 스테핑 프레임. 당신이 주로 공부하고자하는 기능은 다음과 같습니다

  • Append_SEEK (위치 금액) -이 뜻 바이트의 지정된 위치에 도착하고 가능한 가장 가까운 키 프레임을 검색합니다.

  • get_frame_TAG - 데이터의 한 프레임을 포함하는 태그를 추출합니다. 오디오도 프레임에있을 수 있지만 비디오 전용이라고 가정 할 수 있습니다. 이 기능은 타임 스탬프을 조정할 수있는 기회입니다. 실행될 때 태그를 추가합니다 (각 "get_frame_TAG"또한 "프레임 단계"이기도합니다).

예를 들어 : 각 타임 스탬프

1000 milisecs은/초당 25 프레임 = 40 단위 ... 당신은 재생에 사초에서 세 번째 프레임을하고자하는 25fps로 비디오를 가지고있다.
그래서 4000 ms == 4 초 + 40 x 세 번째 프레임 = 4120의 예상 타임 스탬프를 추가하십시오.

이렇게 프레임을 가져 오는 것은 의미합니다. 먼저 키 프레임을 찾습니다. 그런 다음 원하는 프레임을 나타내는 타임 스탬프를 확인하면서 각 프레임을 단계별로 실행합니다. 그렇지 않은 경우 가장 최근의 키 프레임 타임 스탬프와 동일하게 변경합니다 (프레임이 예상 시간보다 작 으면 그 시점까지 재생해야 함을 가정 할 때 플래시가 프레임을 빨리 감기로 동기화됩니다) . 빨리 감기의 모습을 좋아하지 않으면이 과정에서 비디오 객체를 "숨길"수 있습니다.

관련 문제