Coder Social home page Coder Social logo

zwfm-dabplus's Introduction

ZuidWest DAB+

This project is designed to establish a DAB+ broadcasting system utilizing Open Digital Radio tools. It focuses on setting up a DAB+ multiplex for West-Brabant in the Netherlands, which spans allotments 49 and 50.

⚠️ This project is no longer under active development and has been shelved. The experimental features and code in this repository are highly insecure and should not be used in their current state. Further development and enhancements are necessary to ensure security and stability.

Architecture

The architecture is built around a dynamic system that auto-generates all required configurations from the editable stations.json.

  • Internet streams of all included stations are transcoded using ODR-AudioEnc, and metadata is incorporated via ODR-PadEnc.
  • A supervisory tool monitors these encoding operations.
  • NodeJS scripts generate all necessary configuration files, such as mux.json for ODR-DabMux.
  • Any modifications trigger the deployment of updated configuration files to the server, followed by a restart of the affected processes.
  • If changes necessitate a multiplex rebuild, a complete restart of the multiplex is scheduled for 3 AM, because ODR-DabMux does not support live reloading.

CI/CD

CI/CD pipelines are triggered by updates to stations.json. They oversee the setup, modification, or removal of ODR-AudioEnc encoders and the compilation of a new mux.json for ODR-DabMux. This process can also be initiated manually from the Actions tab on GitHub.

Repository Contents

ZuidWest-DAB+/
│
├── .github/                   # GitHub specific files like workflows and actions
│   └── workflows/             # CI/CD workflows
│
├── config/                    # Configuration files
│   ├── dabmux.service         # Service file for the DAB multiplexer
│   ├── websocket.service      # Service file for the websocket that feeds the webinterface
│   └── mux.json               # Auto-generated multiplexer configuration
│
├── scripts/                   # Node helper scripts
│   ├── generator-dirs.js      # Node.js script to generate directories
│   ├── generator-encoders.js  # Node.js script for encoder configuration
│   └── generator-mux.js       # Node.js script for multiplexer configuration
│
├── web/                       # Highly insecure web interface (seriously, don't put this in production)
│   ├── index.html             # Status page for ODR-DabMux
│   ├── websocket.py           # Python script that converts the ZeroMQ output of ODR-DabMux to a websocket
│   └── setupweb.sh            # Set-up script for web interface
│
├── test/                      # Automated tests
│   └── validate-stations.js   # Validates the configuration in stations.json
│
├── stations.json              # User-edited station configuration (Edit this to get started)
├── setup.sh                   # Shell script for inital server setup
├── .gitignore                 # Specifies intentionally untracked files to ignore
└── README.md                  # Project overview and documentation

zwfm-dabplus's People

Contributors

rmens avatar actions-user avatar pe9ghz avatar

Watchers

 avatar  avatar

zwfm-dabplus's Issues

Manual ID for DAB/FM switching

According to @pe9ghz, it is beneficial to use an ID that matches the RDS PI code. This allows transmitters to switch to FM when DAB+ signals are unavailable.

Currently, IDs are generated based on the SHA-256 hash of a station's name. This method should be revised to use the PI code instead.

Further investigation may be required. We need to determine if this approach works on all receivers, or if service linking is still necessary.

Edge case: bitrate change

Changed bitrates in 11a4741. That triggered an encoder restart, but not an immediate ODR-DabMux restart. Which lead to a config mismatch and ODR-DabMux malfunctioning.

Always restart ODR-DabMux on bitrate changes.

Enhancement: Copy ice/shoutcast metadata

Option: true/false

If true, extra argument in odr-audioenc (for example: -w /tmp/sobfm.icy)

Verify: does this only work with GStreamer input? Documentation says it does so, but @pe9ghz reports using it with VLC input.

   For the VLC input:
     -v, --vlc-uri=uri                    Enable VLC input and use the URI given as source
     -C, --vlc-cache=ms                   Specify VLC network cache length.
     -V                                   Increase the VLC verbosity by one (can be given 
                                          multiple times)
     -L OPTION                            Give an additional options to VLC (can be given
                                          multiple times)
   For the GStreamer input:
     -G, --gst-uri=uri                    Enable GStreamer input and use the URI given as source
         --gst-pipeline=pipeline          Specify a GStreamer pipeline that receives your source.
                                          The last pipeline element is connected to a caps filter that specifies
                                          the audio format and sample rate.
     -w, --write-icy-text=filename        Write the ICY Text into the file, so that ODR-PadEnc can read it.
     -W, --write-icy-text-dl-plus         When writing the ICY Text into the file, add DL Plus information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.