Media Player (Part1) – RTSP Player Android

by baka3k
1.2K views
This entry is part [part not set] of 9 in the series Coding

Có nhiều cách để play RTSP trên Android, ứng cử viên hàng đầu là VideoView sẵn có trên Android SDK. Tuy nhiên Video View có rất nhiều hạn chế khi chúng ta cần custom lại, ví dụ chỉnh sửa thêm thắt vào protocol,  add các hiệu ứng hình ảnh vào video khi đang play, record, chuyển đổi các track..etc. Khi đó chúng ta phải lựa chọn một giải pháp khác, cụ thể ở đây mình đang nói đến

  1. Exoplayer
  2. IJKPlayer

Exoplayer (https://github.com/google/ExoPlayer) open source, apache licence, java core, rất dễ dàng để anh em lập trình android/java tiếp xúc nhưng điểm trừ của nó là độ trễ – low latency

Khi test với 1 số server RTSP, ExoPlayer cho ra độ trễ vào khoảng 1.2s đến 2.5s tùy chất lượng video out put. Còn IJKPlayer(https://github.com/bilibili/ijkplayer) thì có thể đạt 0.6s đến 0.8s.  Điểm trừ của IJKPlayer là licence, IJKPlayer sử dụng FFMPEG, một thư viện rất nổi tiếng, nên nếu ko muốn dính dáng đến pháp lý khi bán sản phẩm, bạn nên cẩn thận khi lựa chọn nó cho khách hàng hoặc nhúng vào sản phẩm.

Để build được IJKPlayer cũng khá đơn giản(nếu bạn chuẩn bị đủ môi trường), hướng dẫn này mình viết chạy trên môi trường MAC OS nhé, Window hoặc Ubuntu cách làm tương tự, tuy nhiên môi trường chuẩn bị sẽ khác đi 1 chút

Check out source code

Các bạn có thể lấy source IJK từ nhánh chính ở trên hoặc từ repo bên dưới, repo này mình đã add thêm một vài  chỉnh sửa liên quan đến RTSP và Recorder

Option 1: https://github.com/baka3k/IjkPlayerRecorder(có recorder)

Option 2: https://github.com/bilibili/ijkplayer(nguyên bản)

Cài đặt NDK cho Mac: mình test thực tế thì thấy build trên bản NDK 10, NDK16(khá cũ) thì ok nhất, ko cần sửa lỗi và chỉnh lại config build, tất nhiên các bạn pro hơn có thể thử với version NDK khác

https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip

Giải nén NDK, chỉnh lại enviroment path về thư mục NDK vừa download

Với window thì System>Advanced System setting>Enviroment variable, giống khi các bạn add path cho adb hoặc sdk

Với Mac OS thì sửa file  ~/.bash_profile hoặc ~/.zshrc hoặc ~/.profile – tùy thuộc vào bạn đang dùng command build nào nhé 🙂

# export ANDROID_SDK=<your sdk path> # export ANDROID_NDK=<your ndk path>

Buid nào:

Kiểm tra kết nối internet(khi build cần tải 1 số package về, nên tốt nhất là full mạng ko qua proxy gì cả)

Install home brew, git, yasm (chạy lần lượt các lệnh sau theo step nhé)

# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm

 Build Android

git clone https://github.com/baka3k/IjkPlayerRecorder.git
cd IjkPlayerRecorder
./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

Sau khi build xong các bạn có thể tìm thấy file .so trong thư mục

- /IjkPlayerRecorder/android/ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a
- /IjkPlayerRecorder/android/ijkplayer/ijkplayer-armv5/src/main/libs/armeabi
- /IjkPlayerRecorder/android/ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a

Và có thể copy những file .so này vào thư mục sample sẵn có để chạy thử

Sample đặt tại đường dẫn

- IjkPlayerRecorder/android/ijkplayer/ijkplayer-example

Lúc này nó như là 1 app android thông thường, đã có sẵn JNI để call xuống .so nhé 🙁

Have fun 🙂

Series NavigationRaw String in Swift >>

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like