2014-09-30 3 views
2

지금 개발중인 앱을 필요로하는 특수 디자인이 있습니다.동영상 플레이어에서의 흐릿한 패널

지금은 비디오 스트림을 재생하는 타사 비공개 비디오 라이브러리가 있습니다. 이 화면의 디자인에는 비디오 상단에 겹쳐진 반투명 패널이 포함되어 뒤에있는 비디오 부분을 흐리게 만듭니다.

일반적으로 배경을 흐리게 처리하려면보기의 스크린 샷을 캡처하고 흐리게 처리하여 전경보기의 이미지로 사용해야합니다.

이 경우 동영상은 계속 재생되므로 흐린 이미지가 모든 프레임마다 바뀝니다. 그러면 어떻게 구현할 수 있을까요?

가능한 해결책은 스레드를 만들고 스크린 샷을 찍은 다음 자르고 배경으로 배치하는 것입니다. 그 뷰가 SurfaceView라면 더 좋을 것입니다. 하지만이 경우 가장 좋은 방법이 무엇인지 궁금합니다. 지속적으로 스크린 샷을 찍는 스레드가 성능에 큰 영향을 줄까요? 이러한 이미지로 surfaceView 버퍼를 공급할 수 있습니까?

감사합니다.

+0

제 2의 옵션을 사용하면됩니다. surfaceView buffer –

답변

0

SurfaceView 표면은 그래픽 버퍼의 소비자입니다. 한 소비자에게는 두 명의 제작자가있을 수 없습니다. 즉, 비디오를 보내고 동시에 그 위에 그릴 수는 없습니다.

여러 레이어가있을 수 있습니다. SurfaceView 표면은 View UI 레이어 뒤에 별도의 레이어에 있습니다. 따라서 SurfaceView의 표면에 비디오를 재생하고 SurfaceView의 뷰에 흐림 사각형을 그릴 수 있습니다. 일반적으로 SurfaceView의 뷰는 완전히 투명한 것으로 레이아웃 용도의 자리 표시 자로 사용됩니다.

또 다른 옵션은 비디오 프레임을 SurfaceTexture으로 렌더링하는 것입니다. 그런 다음 GLES로 SurfaceView 표면에 텍스처를 렌더링하고 흐림 사각형을 맨 위에 렌더링합니다. Grafika에 라이브 카메라 입력을 GLES 텍스처로 처리하는 예제를 찾을 수 있습니다 ("카메라의 텍스처"작업). 이것은 View 시스템과 상호 작용하지 않기 때문에 SurfaceView 표면이 응용 프로그램이 아닌 시스템에 의해 합성되므로 별도의 스레드에서 모두 수행 할 수 있다는 추가적인 이점이 있습니다.

어떤 경우에도 렌더링, 스크린 샷 잡아 내기 및 다시 렌더링은 위에서 설명한 옵션보다 느려질 것입니다.

왜 작동하는지에 대한 자세한 내용은 Android System-Level Graphics 아키텍처 문서를 참조하십시오.

관련 문제