ijkplayer는 FFmpeg n3.4 기반의 크로스 플랫폼 동영상 플레이어로, Android와 iOS 시스템에서 MediaCodec 및 VideoToolbox 하드웨어 가속을 지원합니다. 이 플레이어는 온라인 스트리밍부터 로컬 파일 재생까지 전문적인 동영상 재생 기능을 제공합니다.
ijkplayer의 주요 장점
- 크로스 플랫폼: Android (API 9+) 및 iOS (7.0+) 지원
- 하드웨어 가속: MediaCodec과 VideoToolbox를 통한 CPU 부하 감소
- 광범위한 포맷 지원: FFmpeg 기반으로 대부분의 주요 미디어 포맷 호환
- 경량 설계:
config/module-lite.sh를 통한 코덱 선택적 포함 가능 - 직관적인 API: 시스템 MediaPlayer와 유사한 인터페이스
Android 통합 방법
Gradle을 통해 ijkplayer를 Android 프로젝트에 추가합니다:
allprojects {
repositories {
jcenter()
}
}
dependencies {
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
// 추가 아키텍처 (필요 시)
// implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
// implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
}
iOS 통합 방법
CocoaPods 또는 수동 빌드 방식으로 iOS 프로젝트에 추가합니다:
# 저장소 클론
git clone https://gitcode.com/gh_mirrors/ij/ijkplayer ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8
# 초기화 및 컴파일
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
컴파일 후 Xcode에서 ios/IJKMediaDemo/IJKMediaDemo.xcodeproj 프로젝트를 열어 예제를 확인할 수 있습니다.
커스텀 빌드: 코덱 설정 조정
프로젝트 요구에 따라 코덱 모듈을 선택하여 라이브러리 크기를 최적화합니다:
# 기본 (최대 코덱 지원)
cd config
rm module.sh
ln -s module-default.sh module.sh
# 경량 (HEVC 포함)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
# 최소 구성
cd config
rm module.sh
ln -s module-lite.sh module.sh
하드웨어 가속 설정
ijkplayer는 기본적으로 하드웨어 가속을 활성화하며, API를 통해 제어할 수 있습니다:
// Android: MediaCodec 활용
IjkMediaPlayer player = new IjkMediaPlayer();
player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);
player.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
재생 제어 및 이벤트 처리
// 기본 재생 제어
player.setDataSource(context, videoUri);
player.prepareAsync();
player.start();
player.pause();
player.seekTo(position);
player.stop();
player.release();
// 이벤트 리스너
player.setOnPreparedListener(mp -> {
// 준비 완료
});
player.setOnCompletionListener(mp -> {
// 재생 완료
});
문제 해결 및 최적화 팁
- NDK 버전: NDK r10e 사용 권장
- 의존성:
brew install yasm으로 빌드 도구 설치 - 경량화:
module-lite.sh를 활용하여 불필요한 코덱 제거 - 버퍼 설정: 메모리와 부드러운 재생 간 균형 유지
참고 자료
자세한 내용은 공식 문서(doc/preflight_checklist.md)와 예제 프로젝트(android/ijkplayer-example)를 확인하세요.