Nomad Engineer

안드로이드 NDK로 미디어 플레이어 만들기(MediaExtractor, MediaCodec) 본문

개발/안드로이드

안드로이드 NDK로 미디어 플레이어 만들기(MediaExtractor, MediaCodec)

universehan 2021. 2. 11. 18:24

Activity 생성

Activity를 생성한다.

NdkLibrary 초기화

CMakeflie.txt에 정의한 이름으로 네이티브 라이브러리를 로드하는 코드를 다음과 같이 추가한다.

class NativePlayerActivity : AppCompatActivity() {
  //...
  
  companion object {
    init {
      System.loadLibrary("native-lib")
    }
  }
}

NativeMethod 정의

다음과 같이 Native로 호출할 맴버 함수를 정의한다.

external fun createEngine()

JNI Bridge에 함수 추가하기

extern "C"
JNIEXPORT void JNICALL
Java_com_your_project_uri_NativeRecordingActivity_play(JNIEnv *env, jobject thiz) {
    AMediaExtractor* extractor = AMediaExtractor_new();
}

MediaExtractor 생성 및 초기화

우선 CMakelist.txt에 mediandk 라이브러리를 다음과 같이 추가한다.

target_link_libraries(native-lib
        mediandk
        // ...
        )

CPP 소스 파일에서 MediaExtractor 해더파일을 추가한다.

#include "media/NdkMediaExtractor.h"

 

디코딩.

AMediaCodec_queueInputBuffer(..., time);

 

presentationTimeUs

outputSurface에 렌더링 되는 타이밍을 동기화 하는데 사용한다. 실제 버퍼가 Surface에 렌더링 되는 시간이며, 이 시간은 현재 System#nanoTime 의 값보다 1초 이상이 되면 안된다. (그러면 timestamp값은 무시된다.) 보통 이 값은 실제 렌더링 되기 원하는 지점의 VSYNC의 두배 정도 크기면 적당하다고 한다. 60Hz 라면 대략 33ms 정도가 된다.

 

결론은 렌더링 되기 원하는 시점이 예를들어 1000ms 에 렌더링 되고 싶다면 현재 967ms 시점에서 releaseOutputBuffer를 호출하는것이 좋다.

 

이제 

(작성중...)

참고자료(References)

NDK 공식문서 - 네이티브 라이브러리 로드하기

 

JNI 도움말  |  Android NDK  |  Android Developers

JNI는 Java Native Interface(자바 네이티브 인터페이스)의 약어입니다. JNI는 Android가 관리 코드에서 컴파일하는 바이트 코드(자바 또는 Kotlin 프로그래밍 언어로 작성됨)와 네이티브 코드(C/C++로 작성됨

developer.android.com

NDK 공식문서 - Media API Library

 

기본 API  |  Android NDK  |  Android Developers

이 페이지에서는 NDK에 포함된 라이브러리에 관한 개요와 NDK API 참조의 관련 요소 및 라이브러리 위치 가이드의 링크를 제공합니다. 네이티브 API 사용 다음 두 단계를 통해 NDK에서 제공하는 라이

developer.android.com

NDK 공식문서 - Media API Reference

 

Media  |  Android NDK  |  Android Developers

Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates. Last updated 2020-10-28 UTC.

developer.android.com

Android 공식문서 - MediaCodec Reference

 

MediaCodec  |  Android 개발자  |  Android Developers

 

developer.android.com

Android 공식문서 - releaseOutputBuffer 에 대한 설명

 

MediaCodec  |  Android 개발자  |  Android Developers

 

developer.android.com

 

반응형