172 líneas
5.6 KiB
Markdown
172 líneas
5.6 KiB
Markdown
# ChatRTC - Android WebRTC Chat Application
|
|
|
|
A modern Android chat application with WebRTC support for audio/video calling and emoji text messaging.
|
|
|
|
## Features
|
|
|
|
- **Nickname-based joining**: Users only need to enter their nickname to join the chat
|
|
- **Text messaging with emoji support**: Full emoji keyboard and rendering support
|
|
- **Audio/Video calling**: WebRTC-powered audio and video communication
|
|
- **Modern UI**: Material Design components with beautiful chat bubbles
|
|
- **Camera controls**: Toggle video, mute audio, and switch between front/back cameras
|
|
- **Real-time communication**: Instant messaging and WebRTC peer-to-peer connections
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
chatrtc/
|
|
├── app/ # Android application
|
|
│ ├── src/main/java/com/chatrtc/app/
|
|
│ │ ├── MainActivity.java # Nickname entry screen
|
|
│ │ ├── ChatActivity.java # Main chat interface
|
|
│ │ ├── adapter/
|
|
│ │ │ └── ChatAdapter.java # RecyclerView adapter for messages
|
|
│ │ ├── model/
|
|
│ │ │ └── ChatMessage.java # Message data model
|
|
│ │ └── webrtc/
|
|
│ │ └── WebRTCManager.java # WebRTC connection management
|
|
│ └── src/main/res/ # Android resources
|
|
└── signaling-server/ # Node.js signaling server
|
|
├── server.js # Socket.IO signaling server
|
|
└── package.json # Server dependencies
|
|
```
|
|
|
|
## Setup Instructions
|
|
|
|
### 1. Android App Setup
|
|
|
|
1. **Prerequisites**:
|
|
- Android Studio Arctic Fox or later
|
|
- JDK 8 or later
|
|
- Android SDK API 24+ (Android 7.0)
|
|
|
|
2. **Open the project**:
|
|
```bash
|
|
cd chatrtc
|
|
# Open in Android Studio
|
|
```
|
|
|
|
3. **Configure signaling server URL**:
|
|
- Open `app/src/main/java/com/chatrtc/app/webrtc/WebRTCManager.java`
|
|
- Update the `SIGNALING_SERVER_URL` constant with your server URL:
|
|
```java
|
|
private static final String SIGNALING_SERVER_URL = "https://your-server.com";
|
|
// For local development: "http://10.0.2.2:3000"
|
|
```
|
|
|
|
4. **Build and run**:
|
|
- Connect your Android device or start an emulator
|
|
- Click "Run" in Android Studio
|
|
|
|
### 2. Signaling Server Setup
|
|
|
|
1. **Install Node.js**: Download from [nodejs.org](https://nodejs.org/)
|
|
|
|
2. **Install dependencies**:
|
|
```bash
|
|
cd signaling-server
|
|
npm install
|
|
```
|
|
|
|
3. **Start the server**:
|
|
```bash
|
|
npm start
|
|
# or for development with auto-restart:
|
|
npm run dev
|
|
```
|
|
|
|
4. **Server will run on**: `http://localhost:3000`
|
|
|
|
## Usage
|
|
|
|
1. **Start the signaling server** (see setup instructions above)
|
|
2. **Install and run the Android app** on your device(s)
|
|
3. **Enter your nickname** on the welcome screen
|
|
4. **Grant permissions** for camera and microphone when prompted
|
|
5. **Start chatting**:
|
|
- Send text messages with emoji support
|
|
- Toggle video/audio using the control buttons
|
|
- Switch cameras using the camera switch button
|
|
- Multiple users can join the same chat room
|
|
|
|
## Key Components
|
|
|
|
### Android App
|
|
|
|
- **MainActivity**: Handles nickname entry and permissions
|
|
- **ChatActivity**: Main chat interface with video views and message list
|
|
- **WebRTCManager**: Manages WebRTC connections, media streams, and signaling
|
|
- **ChatAdapter**: Handles different message types (own, other, system)
|
|
- **Emoji Support**: Uses Vanniktech emoji library for full emoji rendering
|
|
|
|
### WebRTC Features
|
|
|
|
- **Peer-to-peer connections**: Direct audio/video streams between users
|
|
- **Data channels**: For text message transmission
|
|
- **STUN servers**: Google's STUN servers for NAT traversal
|
|
- **Camera management**: Front/back camera switching
|
|
- **Media controls**: Toggle audio/video streams
|
|
|
|
### Signaling Server
|
|
|
|
- **Socket.IO based**: Real-time bidirectional communication
|
|
- **Room management**: Users join a common chat room
|
|
- **WebRTC signaling**: Handles offer/answer/ICE candidate exchange
|
|
- **User management**: Tracks connected users and broadcasts join/leave events
|
|
|
|
## Dependencies
|
|
|
|
### Android
|
|
- **WebRTC**: `org.webrtc:google-webrtc:1.0.32006`
|
|
- **Socket.IO**: `io.socket:socket.io-client:2.0.1`
|
|
- **Emoji Support**: `com.vanniktech:emoji-google:0.16.0`
|
|
- **Material Design**: `com.google.android.material:material:1.9.0`
|
|
|
|
### Server
|
|
- **Express**: Web server framework
|
|
- **Socket.IO**: Real-time communication
|
|
- **CORS**: Cross-origin resource sharing
|
|
|
|
## Network Configuration
|
|
|
|
For local development, the app includes network security configuration to allow HTTP connections to localhost and common local IP addresses.
|
|
|
|
## Permissions
|
|
|
|
The app requires:
|
|
- `CAMERA`: For video calling
|
|
- `RECORD_AUDIO`: For audio calling
|
|
- `MODIFY_AUDIO_SETTINGS`: For audio management
|
|
- `INTERNET`: For signaling server connection
|
|
- `ACCESS_NETWORK_STATE`: For network status
|
|
|
|
## Deployment
|
|
|
|
### Android App
|
|
- Build APK: `./gradlew assembleDebug`
|
|
- Install: `adb install app/build/outputs/apk/debug/app-debug.apk`
|
|
|
|
### Signaling Server
|
|
- Deploy to any Node.js hosting service (Heroku, Railway, etc.)
|
|
- Update the `SIGNALING_SERVER_URL` in the Android app
|
|
- Ensure HTTPS is used for production (required by WebRTC)
|
|
|
|
## Troubleshooting
|
|
|
|
1. **Connection issues**: Check signaling server URL and network connectivity
|
|
2. **Permission errors**: Ensure camera/microphone permissions are granted
|
|
3. **Video not showing**: Check camera availability and permissions
|
|
4. **Audio not working**: Verify microphone permissions and device audio settings
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create your feature branch
|
|
3. Commit your changes
|
|
4. Push to the branch
|
|
5. Create a Pull Request
|
|
|
|
## License
|
|
|
|
This project is open source and available under the MIT License.
|