This application allows you to search for stations from your Channels DVR server, select desired channels, and generate a custom M3U playlist. You can then download or copy this playlist for use with other media players or services.
The application is served via a lightweight, multi-container Docker setup using Nginx and PHP-FPM for optimal performance and a small footprint.
- Search and Filter: Easily find Channels DVR stations by name, call sign, channel number, station ID, and more.
- Select Channels: Interactively select individual channels to include in your playlist.
- Custom M3U8 URLs: For each selected channel, you can provide a specific M3U8 stream URL.
- M3U Generation: Generate a standard EXTM3U playlist based on your selections.
- Download & Copy: Download the generated M3U file or copy its content directly to your clipboard.
- Multi-Arch Support: Docker images are available for
linux/amd64andlinux/arm64, supporting a wide range of devices from standard PCs to Raspberry Pis.
To run this application, you will need:
- A running Channels DVR Server.
- Docker and Docker Compose.
This is the fastest and easiest way to get the application running. It pulls the pre-built images directly from Docker Hub.
-
Create a
docker-compose.ymlfile with the following content.version: '3.8' services: nginx: image: rcvaughn2/cdvr-station-search-nginx:latest ports: - "5003:80" depends_on: - php-fpm restart: unless-stopped php-fpm: image: rcvaughn2/cdvr-station-search-php:latest environment: - CHANNELS_DVR_IP=${CHANNELS_DVR_IP} restart: unless-stopped
-
Create an
.envfile in the same directory as yourdocker-compose.yml. This file will store the IP address of your Channels DVR server.# Replace with the IP address of your Channels DVR server e.g. CHANNELS_DVR_IP=192.168.86.64 -
Start the application by running the following command in your terminal:
docker-compose up -d
-
Access the Application: Open your web browser and navigate to
http://localhost:5003.
Follow these instructions if you have cloned the repository and want to build the Docker images yourself.
-
Clone the Repository:
git clone https://github.com/nuken/CDVR-Station-Search-M3U-Generator.git cd CDVR-Station-Search-M3U-Generator -
Create the Environment File: Create a file named
.envin the root of the project. Add the IP address of your Channels DVR server to this file:# Replace with the IP address of your Channels DVR server e.g. CHANNELS_DVR_IP=192.168.86.64 -
Build and Run with Docker Compose: Use the
docker-compose.ymlfile included in the repository to build and start the services.# This command will build the images and start the containers in detached mode docker-compose up -d --build -
Access the Application: Open your web browser and navigate to
http://localhost:5003(orhttp://your-docker-host-ip:5003if Docker is running on a different machine).
- Initial Load: The application will attempt to fetch stations from your Channels DVR server.
- Search for Stations: Use the search bar to filter channels by name, call sign, etc.
- View All Stations: Click "View All Stations" to see a complete list.
- Select Channels: Check the box on any channel card to include it in your playlist.
- Enter M3U8 URLs: For each selected channel, you must enter a valid M3U8 stream URL in the input field that appears.
- Generate M3U Playlist: Once all selected channels have a URL, click the "Generate M3U Playlist" button.
- Download or Copy: Use the "Download M3U" or "Copy to Clipboard" buttons to save your generated playlist.
- "Error loading stations: Could not connect to Channels DVR server...":
- Ensure your Channels DVR server is running.
- Double-check that the
CHANNELS_DVR_IPin your.envfile is correct and reachable from the machine running Docker. - Check the container logs for more specific errors:
docker-compose logs php-fpm.
- Application is not accessible at
localhost:5003:- Verify the containers are running with
docker-compose ps. - Check the Nginx container logs for startup errors:
docker-compose logs nginx.
- Verify the containers are running with
- "Please provide an M3U8 URL for all selected channels.":
- You must enter a stream URL for every channel you have selected before you can generate the playlist.
-
The application is split into two containers:
nginx: A lightweight web server that serves theindex.htmlfile and proxies PHP requests.php-fpm: Processes theproxy.phpscript, which fetches station data from the Channels DVR server API. This proxy is necessary to avoid CORS (Cross-Origin Resource Sharing) browser errors.
-
The setup is configured for automatic builds and pushes to Docker Hub via GitHub Actions.