explaingit

bilibili/ijkplayer

Analysis updated 2026-06-20

33,148CAudience · developerComplexity · 4/5LicenseSetup · hard

TLDR

A mobile video player for Android and iOS built on FFmpeg that handles a far wider range of video formats than the default platform players, with hardware-accelerated decoding for smooth, battery-efficient playback.

Mindmap

mindmap
  root((ijkplayer))
    What it does
      Wide format support
      Hardware decoding
      Cross-platform player
    Platforms
      Android Java
      iOS Objective-C
    Under the hood
      FFmpeg core
      MediaCodec Android
      VideoToolbox iOS
    Use Cases
      Streaming apps
      Custom video SDK
      High-res playback
    Setup
      Android NDK needed
      Xcode for iOS
      Build from source
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Add support for unusual video formats and streaming protocols to an Android or iOS app

USE CASE 2

Replace the platform's native video player in a streaming app to gain more control over decoding

USE CASE 3

Build a mobile video player that uses hardware acceleration for smooth 1080p or 4K playback

USE CASE 4

Embed FFmpeg-based video decoding into a mobile SDK without building from scratch

What is it built with?

CJavaObjective-CFFmpegAndroid NDKXcode

How does it compare?

bilibili/ijkplayernothings/stbraysan5/raylib
Stars33,14833,55832,706
LanguageCCC
Setup difficultyhardeasyeasy
Complexity4/52/52/5
Audiencedeveloperdeveloperdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · hard Time to first run · 1day+

Requires the Android NDK for Android builds and Xcode for iOS, building FFmpeg from source with the right configuration adds significant setup time.

Use and modify freely but you must share changes to the LGPL-covered code, commercial use is allowed as long as LGPL obligations are met.

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 an HLS stream that the native MediaPlayer can't handle?
Prompt 2
Walk me through setting up ijkplayer on iOS using CocoaPods and playing a video from a URL
Prompt 3
My ijkplayer integration is stuttering on 4K video, how do I enable hardware decoding via VideoToolbox on iOS?
Prompt 4
How do I build ijkplayer from source with a custom FFmpeg configuration to add codec support?
Prompt 5
I want to switch my Android streaming app from ExoPlayer to ijkplayer, what are the trade-offs and how do I migrate?

Frequently asked questions

What is ijkplayer?

A mobile video player for Android and iOS built on FFmpeg that handles a far wider range of video formats than the default platform players, with hardware-accelerated decoding for smooth, battery-efficient playback.

What language is ijkplayer written in?

Mainly C. The stack also includes C, Java, Objective-C.

What license does ijkplayer use?

Use and modify freely but you must share changes to the LGPL-covered code, commercial use is allowed as long as LGPL obligations are met.

How hard is ijkplayer to set up?

Setup difficulty is rated hard, with roughly 1day+ to a first successful run.

Who is ijkplayer for?

Mainly developer.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Scan in gitsafehub Deploy in gitdeployhub bilibili on gitmyhub

Verify against the repo before relying on details.