2014-10-09 6 views
3

가능한 한 CPU에 미치는 영향을 최소화하면서 한 위치에서 다른 위치로 효율적으로 1080p 비디오의 픽셀을 복사하고 싶습니다.as3에서 비디오 픽셀에 액세스하는 가장 빠른 방법은 무엇입니까?

지금까지 내 구현은 매우 간단하다 :의 BitmapData의 copyPixels를 사용하여 비디오

  • 에서 픽셀을 잡아의 BitmapData의 무승부() 메소드를 사용하여

    • 은()에 대한

    이상적으로 픽셀을 뒤섞 가능한 한 CPU에 미치는 영향은 거의 없지만 옵션이 부족하여 숙련 된 ActionScript 3 개발자의 팁을 실제로 사용할 수 있습니다.

    스카우트로 코드를 프로파일 링했으며 CPU 사용량이 거의 70 % 정도이지만 100 %를 훨씬 넘는 것으로 나타났습니다. 나는 StageVideo에보고했지만 주요 한계 중 하나는 이것이다 : 비디오 데이터가 BitmapData 객체 (하여 BitmapData.draw)에 복사 할 수 없습니다

    .

    DisplayObject를 래스터 화하는 대신 비디오 픽셀에 직접 액세스하는 방법이 있습니까?

    각 비디오 프레임을 직접 ByteArray로 액세스하여 BitmapData 객체에 연결할 수 있습니까? (내가 찾은 appendBytes하지만 내 설정에서 필요한 것과 반대로 수행하는 것 같습니다).

    actionscript 3에서 h264 1080p 비디오의 픽셀을 조작하는 데 가장 CPU 친화적 인 방법은 무엇입니까?

    또한 Flash Player를 사용하여 copyPixels() 이외의 다른 픽셀을 빠르게 이동하는 방법이 있습니까? 또한 스카우트 (Skout)는 비디오가 하드웨어 가속화가 아니라고 지적합니다 (.rend.video.hwrender: false). this article에 따라 h264 비디오를 하드웨어 가속화해야합니까 (아니면 전체 화면 모드에만 해당됩니까?)?

  • +1

    추상화의 여러 레이어를 사용하여이 대규모 데이터 세트를 조작하는 것이 이미 가지고있는 것보다 빠르게 진행되지 않아야하고, 예,'copyPixels() '는 가장 빠른 방법 중 하나입니다. 'getPixels()'또는'getVector()'를 사용하면 실제로 무엇을해야하는지에 따라 더 빨리 할 수 ​​있습니다. – Vesper

    +0

    copyPixels()에 대한 정보를 삭제 해 주셔서 감사합니다. BitmapData'draw()를 사용하지 않고도 비디오에서 직접 픽셀을 가져 오는 방법을 알고 있습니까? –

    +0

    잡는 바이트에 신경 쓰지 마라. 압축에서 디코딩 할 때까지는 픽셀이 없습니다 (예 : 사용자 정의 h.264 디코더 작성). appendBytes를 디코딩 바로 가기로 사용하면 바이트가 픽셀이되지만 뭘 추측합니까? 'BitmapData.draw()'가 Adobe에 의해 차단되었습니다 !! 파일을 재생할 수있는 곳에서 byteArray를 통해 공급 된 동일하거나 다른 맞춤 비디오 데이터 _가 정책 파일 오류 (wtf?)를 던졌습니다 –

    답변

    2

    최신 AIR 베타 introduced 비디오를 텍스처 지원으로 사용하여 GPU에서 비디오를 조작 할 수 있습니다 (BitmapData보다 빠름). 그러나 현재 Windows에서만 AIR에서만 사용할 수 있으며 몇 가지 다른 제한 사항이 있습니다.

    +0

    제안 해 주셔서 감사합니다 (+1). 그러나 AIR가 아닌 Flash Player 런타임을 사용해야하며 최대한 많은 데스크톱 시스템을 지원해야합니다. Flash Player와 비슷한 방법을 알고 있습니까? –

    +0

    사실, BitmapData를 사용하지 않고 프레임을 GPU에 효율적으로 업로드하는 다른 방법은 없습니다. 그러나 앞으로 VideoTexture 지원이 Flash Player에 제공 될 것이라 확신합니다. 그렇기 때문에 BitmapData 방식을 고수해야합니다. – Varnius