# Raspberry Pi Video Player Auto-Start System A comprehensive video player system for Raspberry Pi that automatically starts on boot and provides TV-like channel navigation with IR remote control support. ## Features - **Auto-Start on Boot**: Automatically starts when Raspberry Pi boots - **VLC Integration**: Uses VLC media player for robust video playback - **IR Remote Control**: Full IR remote support with multiple protocol decoding (NEC, RC5) - **TV Channel System**: Number key mapping to videos (0-9, multi-digit support) - **Configuration Management**: Comprehensive configuration system with validation - **Systemd Service**: Reliable service management with auto-restart - **Logging**: Detailed logging with rotation - **Easy Setup**: Interactive setup wizard and installation scripts ## Hardware Requirements ### Required - Raspberry Pi (any model with sufficient processing power) - MicroSD card (minimum 16GB, Class 10 recommended) - Power supply (official Raspberry Pi power adapter recommended) - HDMI cable for display output - **IR Receiver Module**: Compatible with Raspberry Pi GPIO (e.g., TSOP4838, TSOP38238) - **IR Remote Control**: Any standard IR remote (TV, DVD player, etc.) ### Optional - External storage for video files - Case with cooling for extended operation ## Software Requirements - **Operating System**: Raspbian Desktop (latest version) - **Python**: Python 3.x (usually pre-installed on Raspbian) - **VLC Media Player**: Latest version compatible with Raspbian - **System Dependencies**: Standard Linux utilities for service management ## Installation ### Quick Installation 1. **Clone the repository**: ```bash git clone https://github.com/your-repo/ulivision-tv.git cd ulivision-tv ``` 2. **Run the installation script**: ```bash sudo chmod +x install.sh sudo ./install.sh ``` 3. **Run the setup wizard**: ```bash sudo python3 setup.py ``` 4. **Start the service**: ```bash video-player-start ``` ### Manual Installation 1. **Install system dependencies**: ```bash sudo apt-get update sudo apt-get install -y python3 python3-pip vlc python3-rpi.gpio ``` 2. **Install Python dependencies**: ```bash pip3 install -r requirements.txt ``` 3. **Copy files to system directories**: ```bash sudo mkdir -p /opt/video_player /etc/video_player sudo cp *.py /opt/video_player/ sudo cp video-player.service /etc/systemd/system/ ``` 4. **Enable and start the service**: ```bash sudo systemctl daemon-reload sudo systemctl enable video-player sudo systemctl start video-player ``` ## Configuration ### Main Configuration The main configuration is stored in `/etc/video_player/config.json`: ```json { "video_folder": "/home/pi/Videos", "default_channel": 1, "auto_play": true, "fullscreen": true, "ir_pin": 18, "ir_protocols": ["NEC", "RC5"], "vlc_options": [ "--fullscreen", "--no-video-title-show", "--no-audio-display" ], "log_level": "INFO" } ``` ### Channel Configuration Channels are configured in `/etc/video_player/channels.json`: ```json { "1": { "number": 1, "name": "Sample Video 1", "path": "/home/pi/Videos/sample1.mp4", "description": "First sample video", "category": "general", "enabled": true, "priority": 0 } } ``` ### IR Remote Mapping IR codes are mapped in `/etc/video_player/ir_mapping.json`: ```json { "NEC_00FF_807F": { "ir_code": "NEC_00FF_807F", "command": "channel_0", "description": "Channel 0", "repeatable": true } } ``` ## Usage ### Basic Operation 1. **Add video files** to the configured video folder (default: `/home/pi/Videos`) 2. **Configure channels** using the setup wizard or manually edit the channels.json file 3. **Map IR remote codes** using the IR learning mode or manually edit the mapping file 4. **Start the service** and use your IR remote to control playback ### IR Remote Commands - **Number keys (0-9)**: Direct channel access - **Multi-digit channels**: Enter channel number (e.g., 12, 25) - **Play/Pause**: Toggle playback - **Stop**: Stop current video - **Next/Previous**: Navigate between channels - **Volume Up/Down**: Control audio volume - **Power**: Exit application ### Management Commands - `video-player-start`: Start the service - `video-player-stop`: Stop the service - `video-player-restart`: Restart the service - `video-player-status`: Check service status - `video-player-logs`: View live logs ## IR Remote Setup ### Learning IR Codes 1. **Start IR learning mode**: ```bash sudo /opt/video_player/venv/bin/python /opt/video_player/ir_remote.py ``` 2. **Press buttons** on your remote control 3. **Enter commands** when prompted (e.g., "channel_1", "play_pause") 4. **Save mappings** to the configuration file ### Manual IR Code Mapping Edit `/etc/video_player/ir_mapping.json` to manually map IR codes: ```json { "NEC_00FF_807F": { "ir_code": "NEC_00FF_807F", "command": "channel_0", "description": "Channel 0", "repeatable": true } } ``` ## Hardware Setup ### IR Receiver Connection 1. **Connect IR receiver** to Raspberry Pi GPIO: - VCC → 3.3V (Pin 1) - GND → Ground (Pin 6) - OUT → GPIO 18 (Pin 12) - or configure different pin 2. **Test IR receiver**: ```bash sudo python3 -c "import RPi.GPIO as GPIO; GPIO.setmode(GPIO.BCM); GPIO.setup(18, GPIO.IN); print('GPIO 18 ready')" ``` ### GPIO Pin Configuration The IR receiver GPIO pin can be configured in the main configuration file: ```json { "ir_pin": 18 } ``` ## Troubleshooting ### Common Issues 1. **Service won't start**: - Check logs: `video-player-logs` - Verify configuration: `sudo python3 setup.py` - Check file permissions 2. **IR remote not working**: - Verify GPIO pin configuration - Check IR receiver connections - Test with IR learning mode - Verify IR code mappings 3. **Videos not playing**: - Check video file formats (supported: MP4, AVI, MKV, MOV, WMV, FLV, WebM, M4V) - Verify file paths in channels.json - Check VLC installation: `vlc --version` 4. **No audio**: - Check audio device configuration - Verify volume settings - Test audio: `speaker-test -t wav -c 2` ### Log Files - **Service logs**: `journalctl -u video-player -f` - **Application logs**: `/var/log/video_player.log` - **System logs**: `/var/log/syslog` ### Debug Mode Enable debug logging by setting log level to DEBUG in the configuration: ```json { "log_level": "DEBUG" } ``` ## Development ### Project Structure ``` ulivision-tv/ ├── video_player.py # Main video player application ├── ir_remote.py # IR remote control system ├── config_manager.py # Configuration management ├── setup.py # Interactive setup wizard ├── install.sh # Installation script ├── uninstall.sh # Uninstallation script ├── video-player.service # Systemd service file ├── requirements.txt # Python dependencies └── README.md # This file ``` ### Adding New Features 1. **Fork the repository** 2. **Create a feature branch** 3. **Implement your changes** 4. **Add tests** (if applicable) 5. **Submit a pull request** ### Testing Run the test suite: ```bash python3 -m pytest tests/ ``` ## Uninstallation To completely remove the video player system: ```bash sudo ./uninstall.sh ``` This will remove: - Application files - Configuration files - Service configuration - Management scripts - Desktop shortcuts - Log files ## License This project is licensed under the MIT License - see the LICENSE file for details. ## Contributing 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## Support For support and questions: - **Issues**: Create an issue on GitHub - **Documentation**: Check the wiki - **Community**: Join our Discord server ## Changelog ### Version 1.0.0 - Initial release - VLC integration - IR remote control - TV channel system - Systemd service - Configuration management - Setup wizard ## Acknowledgments - VLC Media Player team for the excellent media player - Raspberry Pi Foundation for the amazing hardware - Python community for the great libraries - Contributors and testers --- **Note**: This system is designed for educational and personal use. Ensure you have proper licensing for any video content you play.