2009-02-02 15 views
6

VideoDisplay를 사용하여 flv, mov 및 mp4를 재생하고 있으며 모든 것이 잘 작동합니다. 그들은 모두 점진적 다운로드를 통해로드되며 스트리밍되지 않습니다. 내가 뭘하고 싶은 건지 하나의 지정된 프레임을 (10 초 마크에 표시되는 것과 같이) 잡고 비트 맵으로 변환하고 해당 비트 맵을 비디오의 미리보기 이미지로 사용하는 것입니다. 런타임에이 작업을 수행하고 싶습니다. 따라서 표시 될 모든 비디오에 대한 미리보기 이미지를 만들 필요가 없습니다.플렉스 : 비디오의 미리보기 이미지를 동적으로 만듭니다.

어떻게하면 좋을까요? 그걸 틀어서 가짜로 만들지는 않을 것입니다. 특정 프레임을 찾고 나서 일시 정지시키지 만 다른 선택의 여지가 없을 수도 있습니다.

답변

2

Ryan과 James는 정확합니다. 올바른 방법은 업로드/트랜스 코딩 시간에 프레임을 추출하는 것입니다. 그러나 이것이 옵션이 아니라면 자신의 기본/자리 표시 자 이미지 (일 반적으로 또는 엄지가 아직 캡처되지 않은 모든 비디오에 적합 함)를 사용하도록 선택할 수 있으며 VideoDisplay의 DisplayObject-ness를 사용하여 예를 들어, 잡아 다음 서버로 프레임을 업로드 :

<mx:Script> 
    <![CDATA[ 

     var captured:Boolean; 

     private function creationCompleteHandler(event:Event):void 
     { 
      videoDisplay.source = "http://yourserver/yourvideo.flv"; 
     } 

     private function videoDisplay_playheadUpdate(event:VideoEvent):void 
     { 
      if (!captured && videoDisplay.playheadTime >= 10) 
       capture(); 
     } 

     private function capture():void 
     { 
      var bmpData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height); 
      bmpData.draw(videoDisplay); 

      captured = true; 

      // Now just upload the byte array to your server for the next user 
      var loader:URLLoader = new URLLoader(); 
      loader.dataFormat = URLLoaderDataFormat.BINARY; 

      // ... etc. 
     } 

    ]]> 
</mx:Script> 

<mx:VideoDisplay id="videoDisplay" playheadUpdate="videoDisplay_playheadUpdate(event)" /> 

다시 말하지만, 그것은 아마도 가장 우아한 해결책은 아니지만, 확실히 작동합니다. 이렇게하면 첫 번째 사용자는 일반 이미지를 볼 수 있지만 이후 모든 사용자는 생성 된 미리보기 이미지를 가져옵니다. (물론, 당신은 그때까지 업로드하고 적절히 연관시킬 것입니다.) 말이 되십니까?

+0

나는 이것과 비슷한 것을했다. (나는 앱이 오프라인으로 실행될 수 있어야하므로 대부분의 시간 동안 서버에 쉽게 접근 할 수 없다는 것을 명심해야했다.) 그러나 나는 결국 코딩을 끝내었다. 동영상을로드하고 필요한 프레임에서 동영상을 일시 중지하는 것과 관련된 해킹입니다. 감사! – onekidney

+0

굉장하고, 기쁜 데 도움이되었습니다. –

1

나는 이것이 가능하지 않을 것이라고 확신합니다. 그것은 아마도 ... 그렇게 생각하지는 않을 것입니다. 비디오 로딩하는 유일한 방법은 NetStream 및 NetConnection 객체를 사용하는 것입니다. NetStream 및 NetConnection 객체는 비디오 로딩을 시작하는 것으로 알 수 있습니다.

이것이 사용자 제작 비디오 인 경우 가장 좋은 방법은 미리보기 이미지를 생성하는 몇 개의 세이브 사이드 스크립트를 만드는 것입니다. 이것이 어떻게 행해지는지 모르지만 이것이 대부분의 클립 사이트가 작동하는 방법이라고 생각하십시오.

모든 비디오가 제어되면 비디오 편집 프로그램 중 하나의 스크립트를 작성하여 파일 목록의 특정 프레임에 대한 이미지 생성을 자동화 할 수 있습니다. 나는 이것이 아마 당신이 빨리 일어나고 달리게 할 수있는 대안으로서 당신의 최선의 길이라고 생각합니다.

막연한 대답을 드려 죄송합니다. 빠른 해결책이 필요한 경우 올바른 방향으로 안내 할 수 있습니다.

-1

저는 James에게 동의합니다.이 작업을 수행하는 유일한 방법은 서버 측 스크립트로 수행하고 특정 프레임을 비디오에서 꺼내는 것입니다. flex를 사용하여이 작업을 수행 할 수 있다고해도 클라이언트 시스템에서이 작업을 수행하는 데 부담을 걸지는 않을 것입니다. 물론 이미지를 생성하는 것이 flex가로드 될 때마다 표시 할 미리보기를 결정하는 것보다 훨씬 효율적입니다.

관련 문제