일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- pyenv
- 이직
- 크레인인형뽑기
- 기술인터뷰
- C++
- 안드로이드
- 파이썬설치
- Android
- 코딩시험
- Cpp
- 3진수
- 코딩테스트
- AAudio
- 일일코테
- sdkmanager
- 완주하지못한선수
- Python
- JavaScript
- MediaCodec
- 알고리듬
- CMAKE
- 개발영어
- 코테
- MediaExtractor
- 알고리즘
- 프로그래머스
- 데일리코테
- 커맨드라인툴
- NDK
- 데일로코테
- Today
- Total
Nomad Engineer
안드로이드 NDK로 미디어 플레이어 만들기(MediaExtractor, MediaCodec) 본문
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)
JNI 도움말 | Android NDK | Android Developers
JNI는 Java Native Interface(자바 네이티브 인터페이스)의 약어입니다. JNI는 Android가 관리 코드에서 컴파일하는 바이트 코드(자바 또는 Kotlin 프로그래밍 언어로 작성됨)와 네이티브 코드(C/C++로 작성됨
developer.android.com
기본 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
'개발 > 안드로이드' 카테고리의 다른 글
[Android NDK] Kotlin 객체와 C++ object 1:1 바인딩 하는방법 (0) | 2021.02.28 |
---|---|
Android NDK 첫 가상각기 만들기 (0) | 2021.02.01 |
안드로이드(Android) NDK 개발 유용한 사이트 모음 (0) | 2021.01.31 |
안드로이드 NDK 명령줄에서 설치 및 빌드하기 (0) | 2021.01.31 |
안드로이드 기존 프로젝트에 c++ 코드를 사용하는 방법 (4) | 2021.01.30 |