explaingit

bilibili/ijkplayer

33,152CAudience · developerComplexity · 4/5StaleLicenseSetup · hard

TLDR

Open-source video player for Android and iOS built on FFmpeg, with hardware-accelerated decoding and support for a wide range of video formats.

Mindmap

mindmap
  root((ijkplayer))
    What it does
      FFmpeg-based decoder
      Hardware acceleration
      Wide format support
      Mobile streaming
    Tech stack
      C core
      Java Android
      Objective-C iOS
      FFmpeg ffplay
    Use cases
      Stream unusual codecs
      Custom video apps
      High-res playback
      Battery-efficient decoding
    Key features
      MediaCodec on Android
      VideoToolbox on iOS
      Familiar native APIs
      Flexible control

Things people build with this

USE CASE 1

Build a streaming app that plays video formats the native player doesn't support well.

USE CASE 2

Create a custom video player with more control over decoding and playback behavior.

USE CASE 3

Stream high-resolution video on mobile while minimizing battery drain through hardware acceleration.

USE CASE 4

Handle unusual video codecs or protocols in an Android or iOS app.

Tech stack

CFFmpegJavaObjective-CAndroid NDKXcodeMediaCodecVideoToolbox

Getting it running

Difficulty · hard Time to first run · 1day+

Requires Android NDK + Xcode setup, FFmpeg compilation for multiple architectures, and native code building for both platforms.

Use freely for any purpose, including commercial use, as long as you comply with LGPLv2.1 requirements including providing source code and license notices.

In plain English

ijkplayer is an open-source video player for Android and iOS, created by Bilibili (the Chinese video streaming platform). The problem it solves is that the built-in media players on Android and iOS have significant limitations: they support only certain video formats, lack flexibility for unusual codecs, and don't give developers much control over decoding behavior. When building a streaming app that needs to handle a wide variety of video formats, you often need a custom player. ijkplayer is built on top of FFmpeg, the industry-standard open-source multimedia framework, specifically using its ffplay component. This gives it the ability to handle a very wide range of video and audio formats. On top of the raw FFmpeg decoding pipeline, it adds hardware-accelerated decoding support: on Android it uses MediaCodec (available from Android 4.1), and on iOS it uses VideoToolbox (available from iOS 8). Hardware decoding offloads the work from the CPU to dedicated video hardware, which significantly reduces battery usage and enables smooth playback of high-resolution video on mobile devices. The API is designed to look familiar: on Android it mirrors the standard MediaPlayer interface, and on iOS it mirrors the MediaPlayer framework. This means developers already familiar with the platform's native player APIs can adopt it without a steep learning curve. You would use ijkplayer when building an Android or iOS app that needs to stream or play video in formats or protocols that the platform's native player doesn't handle well, or when you want more control over the decoding pipeline. The tech stack is C (the core FFmpeg/ffplay layer), with Java bindings for Android and Objective-C for iOS. Build tools include the Android NDK and Xcode for iOS respectively. It is licensed under LGPLv2.1.

Copy-paste prompts

Prompt 1
How do I integrate ijkplayer into my Android app to play RTMP streams that the native MediaPlayer doesn't handle?
Prompt 2
Show me how to set up hardware-accelerated video decoding in ijkplayer on iOS using VideoToolbox.
Prompt 3
What's the difference between using ijkplayer and the native MediaPlayer on Android, and when should I choose ijkplayer?
Prompt 4
Help me build a custom video player for iOS that uses ijkplayer to decode H.265 video with lower battery consumption.
Prompt 5
How do I configure ijkplayer to handle multiple video formats and codecs in a single Android app?
Open on GitHub → Explain another repo

Generated 2026-05-18 · Model: sonnet-4-6 · Verify against the repo before relying on details.