- SSL Pinning & Signature checking(SecureCoding – P2)
- Review Source code
- Giao thức bảo mật HTTPS và MITM attack(Secure Coding P1)
- Tại sao nên hạn chế sử dụng Singleton, static function(util class, Helper class)?
- The Good, The Bad and the Ugly
- Media Player (Part2) – Add Record function vào IJKPlayer trên Android
- Media Player (Part1) – RTSP Player Android
- Raw String in Swift
- If / switch expression – Swift 5.9 (P.1)
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
- Exoplayer
- 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 🙂