2012-08-06 4 views
2

제 애플리케이션에서 비디오를 비정상적으로 재생해야합니다. 특수 목적의 대화 형 플레이어와 같은 것입니다. 여기iOS 비디오 재생

주요 문제 :

  • 비디오 해상도가 될 수 있습니다 내가이 경우 비디오 60 PFS (-60 FPS에서 속도를 변경하는 능력을 가져야한다
  • 200 * 200 픽셀 최대 1024 * 1024 픽셀에서 선택한 속도에 따라 느리게 또는 더 빠르게 재생해야 함, 음수이면 비디오가 역방향으로 재생되어야 함을 나타냄)
  • 나는 비디오 위에 선과 물체를 그려야하며 이미지로 비율을 조정해야합니다.
  • 내가 능력 확대 이미지를 가지고있는 경우를 이동해야 더 내가

이제 다음 일을 메신저이 비디오의 밝기, 대비 및 반전 색상을 변경 할 수있는 능력이 있어야

  • 화면 크기보다 내용 :

    • I은 ​​JPG 내 동영상 초마다 N 회 (재생 속도 제어)
    • 각 타이머 틱에 대한 IM D
    • 생성 타이머 프레임 splited OpenGL은 새로운 텍스처 (다음 JPG 프레임) rawing은
    • 는 OpenGL ES 변환 (번역, 스케일)와 재생 줌 및 팬 메신저에 대한

    모든 내가 320 * 240 픽셀을 사용할 때까지 잘 보이는,하지만 난 512을 사용하는 경우 * 512px 내 플레이 속도가 내려갑니다. 아마 타이머 행동 문제, 어쩌면 OpenGL. 때로는 높은 재생 속도 (10-15 FPS 이상)로 큰 텍스처를 열려고 시도하는 경우 응용 프로그램이 메모리 경고와 충돌합니다.

    이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 어떤 방향으로 파야합니까? 어쩌면 cocos2d 또는 다른 게임 엔진이 나를 도와 줄 수 있을까요? Mb JPG는 텍스처를위한 최선의 해결책이 아니므로 PNG 또는 PVR 또는 다른 것을 사용해야합니까?

  • +1

    왜 어떤 유형의 이미지로 변환합니까? 왜 원시 프레임을 텍스처로 업로드하지 않습니까? JPG 또는 PNG 이미지로 프레임 압축은 비디오의 경우 엄청나게 비쌉니다. –

    +0

    비디오를 재생하기 전에 이러한 JPG 프레임을 준비합니다. 제 말은 이미 파일에서 이미 생성 된 JPG를 사용한다는 것입니다. 아니면 내 텍스처에 또 다른 (가장 효율적인) 형식을 사용할 수 있다고 말합니까? –

    답변

    1

    JPEG 프레임은 압축을 해제하는 데 엄청난 비용이 듭니다. 첫 번째 단계 : PNG를 사용합니다.

    하지만 잠깐! 더있다.

    Cocos2D는 주로 great support for sprite sheets을 통해 도움을 줄 수 있습니다.

    그러나 가장 큰 도움은 포장 된 질감 인 la TexturePacker에서 나올 수 있습니다. PVR.CCZ 압축을 사용하면 더 큰 비디오 크기에서 더 좋은 프레임 속도를 얻을 수있을 정도로 미친 양만큼 속도가 빨라질 수 있습니다.

    2

    비디오 데이터를 비디오로 유지하고 AVAssetReader을 사용하여 원시 프레임을 가져옵니다. 색 공간으로 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange을 사용하고 GLES에서 YUV-> RGB 색 공간 변환을 수행하십시오. 이는 메모리에 저장되는 데이터의 양을 줄이고 RGB 값보다는 luma 및 chroma 데이터로 작업하기 때문에 이미지 처리를 다소 단순하게 만듭니다.

    코코스 2d 나 게임 엔진에 신경 쓰지 않아도됩니다. OpenGL ES 2.0 및 쉐이더를 약간 실험 해 보는 것이 좋습니다. 비디오 용 OpenGL을 사용하는 것은 매우 간단하고 간단합니다. 믹스에 게임 엔진을 추가하는 것은 불필요한 오버 헤드와 추상입니다.

    이미지 데이터를 텍스처에 업로드 할 때 모든 프레임마다 새 텍스처를 만들지 마십시오. 대신 luma 용 텍스처와 chroma 데이터 용 텍스처 두 개를 만들고 각 프레임마다 텍스처를 다시 사용하십시오. 나는 당신의 기억 문제가 매 프레임마다 많은 이미지와 새로운 텍스처를 사용하고 오래된 텍스처를 삭제하지 않을 때 발생한다고 의심합니다.

    1

    블라드 (Vlad)는 짧은 응답은 동시에 작업 한 모든 기능을 결코 얻을 수 없다는 것입니다. 60 FPS로 비디오를 재생하는 1024 x 1024 비디오는 실제로 스트레칭이 될 것입니다. iOS 하드웨어가 60 FPS에서 이러한 종류의 데이터 전송 속도를 따라 잡을 수 있을지 의심 스럽습니다. 장치의 h.264 하드웨어조차도 1080p에서 30FPS 만 수행 할 수 있습니다. 그것은 가능할 수도 있지만 비디오 위에 그래픽 렌더링을 겹쳐서 동시에 밝기/대비를 편집 할 수있을 것으로 예상 할 때, 동시에 너무 많은 것들이 있습니다.

    모든 기능을 시도하는 대신 실제로 가능한 것에 집중해야합니다. iPad 하드웨어를 한계까지 밀어 넣는 예제 Xcode 응용 프로그램을 보려면 내 Fireworks 예제 프로젝트를보십시오. 이 코드는 이미 디코딩 된 여러 개의 h.264 비디오를 동시에 화면에 표시합니다. 구현은 CoreGraphics API를 기반으로 이루어 지지만, 핵심은 OpenGL에 대한 텍스처 업로드의 의미가 복사 최적화가 없기 때문에 매우 빠릅니다. 이 방법을 사용하면 많은 비디오를 장치로 스트리밍 할 수 있습니다.

    +0

    링크가 깨졌습니다. @MoDJ 예제 프로젝트를 어디에서 찾을 수 있습니까? – CAMOBAP

    +0

    링크 및 설명이 업데이트되었습니다. 지금 사용해보십시오. – MoDJ