Giới thiệu về RTMPDump
RTMPDump là một bộ công cụ mã nguồn mở để xử lý giao thức RTMP (Real-Time Messaging Protocol) của Adobe. Nó bao gồm thư viện librtmp và các công cụ dòng lệnh để phát trực tuyến (stream) nội dung qua RTMP.
Build RTMPDump cho Android
- Cài đặt NDK: Tải Android NDK từ trang chủ Android
- Tạo Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := rtmp LOCAL_SRC_FILES := rtmp.c amf.c hashswf.c log.c include $(BUILD_SHARED_LIBRARY)
- Build với NDK:
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
Sử dụng RTMPDump trên Android để đẩy stream từ camera
Dưới đây là luồng xử lý chính:
+-------------------+ +----------------+ +----------------+ +---------------+
| Android Camera | | MediaCodec | | RTMP Packager | | RTMP Server |
| | | (Encoder) | | (FLV Format) | | (e.g. Nginx) |
+-------------------+ +----------------+ +----------------+ +---------------+
| | | |
| 1. Camera Data | | |
| (YUV/NV21 frames) | | |
|------------------------>| | |
| | | |
| | 2. Encoded Video | |
| | (H.264 NAL Units) | |
| |------------------------>| |
| | | |
| | | 3. FLV Tagged Data |
| | | (Video/Audio Tags) |
| | |------------------------>|
| | | |
| | | 4. RTMP Handshake |
| | | & Chunk Protocol |
| | |=======================>|
| | | |
| | | 5. Stream Continuously |
| | |------------------------>|
| | | |
Chi tiết từng bước:
- Camera Capture:
[Camera] --YUV Frame--> [SurfaceTexture] --> [ImageReader]
- Video Encoding:
[ImageReader] --YUV Data--> [MediaCodec InputBuffer] [MediaCodec] --H.264 NAL Units--> [Encoder Callback]
- RTMP Packaging:
[NAL Units] --AVC Decoder Config--> [FLV Header] [NAL Units] --AVC NALU--> [FLV Video Tag] [Optional Audio] --AAC--> [FLV Audio Tag]
- RTMP Network Protocol:
[FLV Tags] --RTMP Chunks--> [Socket] Handshake Sequence: C0C1 --> S0S1S2 --> C2 --> Stream Begin
- Server-side Processing:
[RTMP Server] --Demux--> [HLS/DASH] or [Re-stream]
Biểu đồ timeline:
+----------+ +-----------+ +------------+ +-----------+ | Capture |-->| Encode |-->| Package |-->| Transport | | (Camera) | | (H.264) | | (FLV/RTMP) | | (TCP) | +----------+ +-----------+ +------------+ +-----------+ 1-30ms 5-20ms 2-10ms 10-100ms (depends on (hardware (CPU-bound) (network resolution) accelerated) dependent)
#rtmp #android #prebuild #android-ndk #ndk #android #rtmp-dump