2014-07-10 1 views
0

입니다. OpenGL ES 2.0을 사용하여 GLSurfaceView에서 비디오를 재생하고 있습니다. 이제 MediaCodec을 사용하여 표면보기에서 재생 한이 비디오를 MP4 비디오로 인코딩하는 방법을 찾고 있습니다.현재 Android의 MediaCodec으로 비디오를 인코딩하는 경우

따라서 bigflake 예제를 찾았습니다. 내 문제를 완벽하게 해결하는 것 같습니다 (http://bigflake.com/mediacodec/EncodeAndMuxTest.java.txt).

그러나 입력 소스를 올바르게 설정하기에는 너무 어리석은 것 같습니다. 이 예제는 mEncoder.createInputSurface()를 사용하여 입력 소스를 생성하지만 비디오가 실제로 재생되는 GLSurfaceView가 있습니다. 그렇다면 인코더의 입력 소스로 내 서페이스를 어떻게 설정해야합니까?

+0

Grafika (https://github.com/google/grafika)에서 몇 가지 추가 샘플을 찾을 수 있습니다. GLSurfaceView를 사용하면 EGL 컨텍스트를 제어 할 수 없기 때문에이를 공유하거나 (예 : "show + capture camera"참조) 평범한 SurfaceView를 사용하고 EGL을 직접 관리 할 수 ​​있습니다 (대부분의 예제는 Grafika). – fadden

답변

3

GLSurfaceView를 사용하고 있으므로 onSurfaceCreated()에서 서페이스를 할당하는 동안 onDrawFrame()에 차단 코드를 삽입해야합니다. 인코더 매개 변수를 설정 한 후 평소와 같이 입력 표면을 작성할 수 있습니다. 인터셉터는 egl 장면을 복사 셰이더를 통해 프레임 버퍼에 복사하는 형식으로 수행 할 수 있습니다. 그런 다음 스왑 버퍼를 사용하여 프레임을 인코딩하십시오. 임의의 elg 장면 캡처에 대한 자습서를보십시오 https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials-video-capturing-for-opengl-applications

+0

알겠습니다. 고마워요. 그것은 하나의 가능성입니다. 나는 또한 다른 무언가를 생각했다. 내가하고 싶은 기본적인 사항은 다음과 같습니다. 기존의 MP4 파일을 편집하고 (자르기 등으로 프레임 크기를 변경 한 다음) 편집 된 파일을 다시 저장합니다. 또한 https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java를 살펴 보았습니다. 비디오를 만드는 대신 MP4에서 비디오 청크 데이터를 가져 오는 방법을 잘 모릅니다. – Florian

+0

그래서 시각적으로 자르기 설정을하고 전체 스트림에 적용해야한다면 2 단계를 권합니다. 첫째 - 사용자가 원하는 자르기 설정을 감지 한 다음 적용된 비디오 자르기 효과로 코드 변환 시나리오를 실행합니다. 따라서 이러한 링크에서 i는 "비디오 효과"라고하는 엔드 - 투 - 엔드 트랜스 코딩 중에 적용되는 효과가있는 샘플도 제공했습니다. https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android 자습서 - 실행 - 샘플 – ugene

관련 문제