diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000000000000000000000000000000000000..2e2eafeadfbe9107dec73102a4e3a8fc57be4a21 --- /dev/null +++ b/README.en.md @@ -0,0 +1,120 @@ +# RKMediaCodecDemo + +RTSP Real-time Streaming Media Player Demo, based on Rockchip MPP Hardware Decoder + +## Project Overview + +This project is an Android demo application demonstrating how to play RTSP real-time streaming media using Rockchip MPP (Media Process Platform) hardware decoders. It supports simultaneous playback of up to 4 RTSP video streams with hardware-accelerated decoding for H.264 video and AAC audio. + +## Features + +- **Multi-stream RTSP Playback**: Supports simultaneous playback of up to 4 RTSP video streams +- **Hardware-accelerated Decoding**: Implements H.264 hardware decoding via Rockchip MPP +- **Audio Decoding**: Supports AAC audio hardware decoding +- **RTSP/RTP Protocol**: Full RTSP protocol implementation supporting TCP/UDP transport +- **H.264 NAL Unit Parsing**: Supports reassembly of FU-A fragmented units +- **FPS Statistics**: Real-time display of decoding frame rate + +## Module Structure + +``` +app/ # Main application module +├── MainActivity.java # Main interface, demonstrating 4-stream video playback +├── PlayerView.java # Custom player view +├── RKMediaplayer.java # Core media player class +├── PortScanner.java # Network port scanning tool +└── rtsp/ # RTSP/RTP protocol implementation + ├── RTSPConnector.java # RTSP connector + ├── RTPConnector.java # RTP packet receiver + ├── RTPPackage.java # RTP packet parser + ├── H264Package.java # H.264 frame assembler + ├── NALUnit.java # NAL unit parser + ├── AACPackage.java # AAC packet handler + └── RTCPPackage.java # RTCP packet handler + +rkmediacodec/ # Hardware decoder module +├── RKMediaCodec.java # MediaCodec wrapper +├── rk_mpp.h # MPP header file +└── native-lib.cpp # JNI native code +``` + +## Technology Stack + +- **Android SDK**: API 21+ +- **NDK**: ARM64-v8a +- **Core Libraries**: libmpp.so, libvpu.so (Rockchip MPP media processing libraries) +- **Video Codec**: H.264 (hardware-decoded) +- **Audio Codec**: AAC (hardware-decoded) +- **Streaming Protocol**: RTSP/RTP/RTCP + +## Quick Start + +### Prerequisites + +- Android Studio 3.0+ +- NDK (ARM64-v8a) +- Android SDK API 21+ +- Rockchip platform device (or emulator) + +### Build Steps + +1. Clone the project to your local machine +2. Open the project in Android Studio +3. Sync Gradle dependencies +4. Compile and run on a target device + +### Configure RTSP Stream Addresses + +Modify the RTSP stream addresses in `MainActivity.java`: + +```java +private String RTSP_IP1 = "192.168.1.100"; +private int RTSP_port = 554; +private String RTSP_func = "/stream1"; +``` + +## Usage Instructions + +1. Install the app on a Rockchip device +2. Tap the "Start" button on the interface to begin playback +3. View up to 4 simultaneous RTSP video streams +4. Tap "Stop" to halt playback +5. Supports pause and resume operations + +## Core Class Descriptions + +### RKMediaPlayer + +The core media player class responsible for: +- Establishing RTSP stream connections +- Receiving RTP data +- Decoding H.264 video +- Decoding AAC audio +- Synchronizing audio and video + +### RTSPConnector + +Implements the RTSP protocol, handling: +- RTSP session establishment (OPTIONS/DESCRIBE/SETUP/PLAY) +- SDP media description parsing +- Track selection + +### RKMediaCodec + +A Rockchip-enhanced wrapper around Android MediaCodec, invoking native MPP libraries to enable hardware decoding. + +## Notes + +1. This demo must run on a Rockchip platform device to leverage hardware decoding performance. +2. Ensure the Rockchip MPP libraries are correctly configured on the device. +3. Modify RTSP stream addresses according to your actual network environment. +4. Supports both TCP and UDP transport modes. + +## License + +This code is provided solely for learning and research purposes. + +## Related Resources + +- [Rockchip MPP Official Documentation](http://www.rock-chips.com) +- [Android MediaCodec](https://developer.android.com/reference/android/media/MediaCodec) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..93ad02ad53cd95bda1218a83207bb579f0d0e29f --- /dev/null +++ b/README.md @@ -0,0 +1,122 @@ +Based on the code map provided, I can analyze the project structure and create a comprehensive README. This is an Android demo project for Rockchip's RTSP media streaming with hardware-accelerated decoding. + +# RKMediaCodecDemo + +RTSP 实时流媒体播放 Demo,基于 Rockchip MPP 硬件解码器 + +## 项目简介 + +本项目是一个 Android 演示应用,展示了如何使用 Rockchip MPP (Media Process Platform) 硬件解码器实现 RTSP 实时流媒体的播放。支持同时播放 4 路 RTSP 视频流,并支持 H.264 视频和 AAC 音频的硬件解码。 + +## 功能特性 + +- **多路 RTSP 流播放**:支持同时播放最多 4 路 RTSP 视频流 +- **硬件加速解码**:基于 Rockchip MPP 实现 H.264 硬件解码 +- **音频解码**:支持 AAC 音频硬件解码 +- **RTSP/RTP 协议**:完整的 RTSP 协议实现,支持 TCP/UDP 传输 +- **H.264 NAL 单元解析**:支持 FU-A 分片单元的重组 +- **FPS 统计**:实时显示解码帧率 + +## 模块结构 + +``` +app/ # 主应用模块 +├── MainActivity.java # 主界面,4路视频播放演示 +├── PlayerView.java # 自定义播放器视图 +├── RKMediaplayer.java # 媒体播放器核心类 +├── PortScanner.java # 网络端口扫描工具 +└── rtsp/ # RTSP/RTP 协议实现 + ├── RTSPConnector.java # RTSP 连接器 + ├── RTPConnector.java # RTP 数据包接收 + ├── RTPPackage.java # RTP 包解析 + ├── H264Package.java # H.264 帧组装 + ├── NALUnit.java # NAL 单元解析 + ├── AACPackage.java # AAC 包处理 + └── RTCPPackage.java # RTCP 包处理 + +rkmediacodec/ # 硬件解码器模块 +├── RKMediaCodec.java # MediaCodec 封装 +├── rk_mpp.h # MPP 头文件 +└── native-lib.cpp # JNI 本地代码 +``` + +## 技术栈 + +- **Android SDK**: API 21+ +- **NDK**: ARM64-v8a +- **核心库**: libmpp.so, libvpu.so (Rockchip MPP 媒体处理库) +- **视频编解码**: H.264 (硬解) +- **音频编解码**: AAC (硬解) +- **流媒体协议**: RTSP/RTP/RTCP + +## 快速开始 + +### 环境要求 + +- Android Studio 3.0+ +- NDK (ARM64-v8a) +- Android SDK API 21+ +- Rockchip 平台设备 (或模拟器) + +### 编译步骤 + +1. 克隆项目到本地 +2. 使用 Android Studio 打开项目 +3. 同步 Gradle 依赖 +4. 编译运行到设备 + +### 配置 RTSP 流地址 + +在 `MainActivity.java` 中修改 RTSP 流地址: + +```java +private String RTSP_IP1 = "192.168.1.100"; +private int RTSP_port = 554; +private String RTSP_func = "/stream1"; +``` + +## 使用方法 + +1. 安装应用到 Rockchip 设备 +2. 点击界面上的 "Start" 按钮开始播放 +3. 可同时观看 4 路 RTSP 视频流 +4. 点击 "Stop" 停止播放 +5. 支持暂停/继续操作 + +## 核心类说明 + +### RKMediaPlayer + +媒体播放器核心类,负责: +- RTSP 流连接 +- RTP 数据接收 +- H.264 视频解码 +- AAC 音频解码 +- 音视频同步 + +### RTSPConnector + +RTSP 协议实现,负责: +- RTSP 会话建立 (OPTIONS/DESCRIBE/SETUP/PLAY) +- SDP 媒体描述解析 +- Track 轨道选择 + +### RKMediaCodec + +Android MediaCodec 的 Rockchip 扩展封装,调用本地 MPP 实现硬件解码。 + +## 注意事项 + +1. 本 Demo 需要在 Rockchip 平台设备上运行才能发挥硬件解码性能 +2. 确保设备已正确配置 Rockchip MPP 库 +3. RTSP 流地址需要根据实际网络环境修改 +4. 支持 TCP 和 UDP 两种传输模式 + +## 许可证 + +本项目代码仅供学习和研究使用。 + +## 相关资源 + +- [Rockchip MPP 官方文档](http://www.rock-chips.com) +- [Android MediaCodec](https://developer.android.com/reference/android/media/MediaCodec) \ No newline at end of file