Android/iOS video player based on FFmpeg n3.3, with MediaCodec, VideoToolbox support.
Video player based on ffplay
from https://github.com/Bilibili/ijkplayer
Platform | Build Status |
---|---|
Android | |
iOS |
Download
- Android:
- Gradle
# required
allprojects {
repositories {
jcenter()
}
}
dependencies {
# required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.2'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.2'
# Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.2'
compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.2'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.2'
compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.2'
# ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.2'
}
- iOS
- in coming...
My Build Environment
- Common
- Mac OS X 10.11.5
- Android
- NDK r10e
- Android Studio 2.1.3
- Gradle 2.14.1
- iOS
- Xcode 7.3 (7D175)
- HomeBrew
- ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- brew install git
Latest Changes
Features
- Common
- remove rarely used ffmpeg components to reduce binary size config/module-lite.sh
- workaround for some buggy online video.
- Android
- platform: API 9~23
- cpu: ARMv7a, ARM64v8a, x86 (ARMv5 is not tested on real devices)
- api: MediaPlayer-like
- video-output: NativeWindow, OpenGL ES 2.0
- audio-output: AudioTrack, OpenSL ES
- hw-decoder: MediaCodec (API 16+, Android 4.1+)
- alternative-backend: android.media.MediaPlayer, ExoPlayer
- iOS
- platform: iOS 7.0~10.2.x
- cpu: armv7, arm64, i386, x86_64, (armv7s is obselete)
- api: MediaPlayer.framework-like
- video-output: OpenGL ES 2.0
- audio-output: AudioQueue, AudioUnit
- hw-decoder: VideoToolbox (iOS 8+)
- alternative-backend: AVFoundation.Framework.AVPlayer, MediaPlayer.Framework.MPMoviePlayerControlelr (obselete since iOS 8)
NOT-ON-PLAN
- obsolete platforms (Android: API-8 and below; iOS: pre-6.0)
- obsolete cpu: ARMv5, ARMv6, MIPS (I don't even have these types of devices…)
- native subtitle render
- avfilter support
Before Build
# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>
# on Cygwin (unmaintained)
# install git, make, yasm
- If you prefer more codec/format
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
- If you prefer less codec/format for smaller binary size (include hevc function)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
- If you prefer less codec/format for smaller binary size (by default)
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
- For Ubuntu/Debian users.
# choose [No] to use bash
sudo dpkg-reconfigure dash
- If you'd like to share your config, pull request is welcome.
Build Android
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.2
./init-android.sh
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd ..
./compile-ijk.sh all
# Android Studio:
# Open an existing Android Studio project
# Select android/ijkplayer/ and import
#
# define ext block in your root build.gradle
# ext {
# compileSdkVersion = 23 // depending on your sdk version
# buildToolsVersion = "23.0.0" // depending on your build tools version
#
# targetSdkVersion = 23 // depending on your sdk version
# }
#
# If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
# sh android/patch-debugging-with-lldb.sh armv7a
# Install Android Studio 2.2(+)
# Preference -> Android SDK -> SDK Tools
# Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
# Open an existing Android Studio project
# Select android/ijkplayer
# Sync Project with Gradle Files
# Run -> Edit Configurations -> Debugger -> Symbol Directories
# Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
# Run -> Debug 'ijkplayer-example'
# if you want to reverse patches:
# sh patch-debugging-with-lldb.sh reverse armv7a
#
# Eclipse: (obselete)
# File -> New -> Project -> Android Project from Existing Code
# Select android/ and import all project
# Import appcompat-v7
# Import preference-v7
#
# Gradle
# cd ijkplayer
# gradle
Build iOS
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.2
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
# Demo
# open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode
#
# Import into Your own Application
# Select your project in Xcode.
# File -> Add Files to ... -> Select ios/IJKMediaPlayer/IJKMediaPlayer.xcodeproj
# Select your Application's target.
# Build Phases -> Target Dependencies -> Select IJKMediaFramework
# Build Phases -> Link Binary with Libraries -> Add:
# IJKMediaFramework.framework
#
# AudioToolbox.framework
# AVFoundation.framework
# CoreGraphics.framework
# CoreMedia.framework
# CoreVideo.framework
# libbz2.tbd
# libz.tbd
# MediaPlayer.framework
# MobileCoreServices.framework
# OpenGLES.framework
# QuartzCore.framework
# UIKit.framework
# VideoToolbox.framework
#
# ... (Maybe something else, if you get any link error)
#
Support (支持)
- Please do not send e-mail to me. Public technical discussion on github is preferred.
- 请尽量在 github 上公开讨论技术问题,不要以邮件方式私下询问,恕不一一回复。
License
Copyright (c) 2017 Bilibili
Licensed under LGPLv2.1 or later
ijkplayer required features are based on or derives from projects below:- LGPL
- zlib license
- BSD-style license
- ISC license
- Apache License 2.0
- GPL
- android-ndk-profiler (not included by default)
- Unknown license
from https://github.com/Bilibili/ijkplayer
No comments:
Post a Comment