ijkplayer README

The project's README from github.com/bilibili/ijkplayer. As one markdown file: README.md.

ijkplayer

Platform Build Status
Android Build Status
iOS Build Status

Video player based on ffplay

Download

# required
allprojects {
    repositories {
        jcenter()
    }
}

dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

My Build Environment

Latest Changes

Features

NOT-ON-PLAN

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
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
# choose [No] to use bash
sudo dpkg-reconfigure dash

Build Android

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./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.8

./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 (支持)

License

Copyright (c) 2017 Bilibili
Licensed under LGPLv2.1 or later

ijkplayer required features are based on or derives from projects below:

android/ijkplayer-exo is based on or derives from projects below:

android/example is based on or derives from projects below:

ios/IJKMediaDemo is based on or derives from projects below:

ijkplayer's build scripts are based on or derives from projects below:

Commercial Use

ijkplayer is licensed under LGPLv2.1 or later, so itself is free for commercial use under LGPLv2.1 or later

But ijkplayer is also based on other different projects under various licenses, which I have no idea whether they are compatible to each other or to your product.

IANAL, you should always ask your lawyer for these stuffs before use it in your product.

ijkplayer (bilibili/ijkplayer)

Searching Database…

33.2K ·GitHub
Что это?ijkplayer — это open-source библиотека видеоплеера от Bilibili для Android и iOS, построенная на FFmpeg (n3.4) и ffplay, с аппаратным декодированием через MediaCodec и VideoToolbox.
Это приложение-видеоплеер, которое можно установить, или библиотека для моего приложения?Это библиотека, которую вы встраиваете в своё приложение, а не самостоятельный плеер: на Android она предоставляет API, похожий на MediaPlayer, на iOS — похожий на MediaPlayer.framework.
Как добавить её в свой проект?На Android вы подключаете её через Gradle. Готовые бинарники для iOS помечены как «in coming», так что там сначала нужно собрать её из исходников приложенными скриптами.
Что нужно на моём компьютере, чтобы её собрать?Референсная конфигурация — Mac: для Android нужны NDK (автор использовал r10e), Android Studio 2.1.3 и Gradle 2.14.1; для iOS — Xcode (7.3) и HomeBrew.
Аппаратное декодирование работает на всех поддерживаемых версиях?Только начиная с определённых версий: MediaCodec требует Android 4.1+ (API 16+), а VideoToolbox — iOS 8+; на более старых останется программное декодирование средствами FFmpeg.
Какие версии Android и iOS она реально поддерживает?Android API 9~23 на ARMv7a, ARM64v8a и x86 (ARMv5 на реальных устройствах не тестировался), а также iOS 7.0~10.2.x на armv7, arm64, i386 и x86_64.
Можно ли использовать её в коммерческом приложении?Сам ijkplayer распространяется по LGPLv2.1 или более поздней версии и свободен для коммерческого использования, но он построен на проектах с разными лицензиями, поэтому автор советует проверить совместимость с юристом. GitHub определяет лицензию репозитория как GPL-2.0.
Можно ли переключиться на другой плеерный бэкенд?Да. На Android в качестве альтернативного бэкенда можно использовать android.media.MediaPlayer или ExoPlayer (для этого есть отдельный модуль ijkplayer-exo), на iOS — AVPlayer из AVFoundation; MPMoviePlayerController устарел начиная с iOS 8.
Можно ли уменьшить размер библиотеки?Да. Сборка по умолчанию уже исключает редко используемые компоненты FFmpeg через config/module-lite.sh, а в разделе Before Build предлагаются варианты с большим или меньшим набором кодеков (опционально с сохранением HEVC) — это компромисс между размером бинарника и поддержкой форматов.
Есть ли что-то, что точно не планируется?Да — список NOT-ON-PLAN: устаревшие платформы (Android API-8 и ниже, iOS до 6.0), устаревшие процессоры (ARMv5, ARMv6, MIPS), нативный рендеринг субтитров и поддержка avfilter.
Creator
bilibili
Size
8.1 MB
Stars
33.2K
Updated
CommitApr 26
Age
13y
Commits · 90 Days