-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b63b91e
commit 4417e35
Showing
1 changed file
with
97 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,101 @@ | ||
rt-tx-poc | ||
====== | ||
# LTE-based 5G Broadcast Transmitter | ||
|
||
The 5G Braodcast transmitter builds a proof of concept development for the 3GPP LTE-based Terrestrial Broadcast (FeMBMS), base in the [srsRAN](https://www.srsran.com) implementation. This software is provided as is and are not part of the reference tools. It doesn't (and won't) have support from the developers team, it's main porpuse is to show and demonstrate an implementation of the standard and its capabilities. | ||
This repository holds the standalone LTE-based 5G Broadcast transmitter part of the 5G-MAG Reference Tools | ||
|
||
The baseline of the transmitter is a Rel-9 eNodeB from the srsRAN suite, the actual tx includes: | ||
* Release 14 CAS subframe. | ||
* Subcarrier spacing of 1.25 kHz. | ||
* Release 14 frame structure (1 CAS + 39 MCH subframes). | ||
## Introduction | ||
|
||
The rest of the features are the same as the srsRAN implementation. | ||
[] | ||
|
||
For build instructions see the [srsRAN documentation](https://docs.srsran.com). | ||
### Specifications | ||
|
||
A list of specification related to this repository is available in the [Standards Wiki](https://github.com/5G-MAG/Standards/wiki/MBMS-&-LTE-based-5G-Broadcast:-Relevant-Specifications). | ||
|
||
### About the implementation | ||
|
||
This implementation of an LTE-Based 5G Broadcast transmitter is based on the existing MBMS implementation in [srsRAN_4G](https://github.com/srsran/srsRAN_4G) eNodeB, modified to include a feature set of 3GPP Rel-17 LTE-based 5G Terrestrial Broadcast. It also includes a basic MBMS gateway which creates a virtual network interface sgi_mb which receives IP multimedia traffic. Note that an instance of an EPC is also required to be executed as part of the srsRAN_4G implementation. The eNodeB generates an LTE-based 5G Broadcast radio-frequency signal (I/Q samples) which can then be input to a USRP. | ||
|
||
Note that the implementation lacks an M2 interface, therefore control plane data is obtained from configuration files. Only a single MCH can be transmitted. | ||
|
||
Additional information can be found in the srsRAN documentation: https://docs.srsran.com/projects/4g/en/latest/app_notes/source/embms/source/index.html | ||
|
||
A list of currently supported features is available [here](https://github.com/5G-MAG/rt-mbms-tx/wiki/Features). | ||
|
||
## Install dependencies | ||
|
||
In Ubuntu: | ||
```` | ||
sudo apt-get install build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev | ||
```` | ||
|
||
## Downloading | ||
|
||
The source can be obtained by cloning the github repository. | ||
|
||
```bash | ||
cd ~ | ||
git clone --recurse-submodules https://github.com/rt-mbms-tx.git | ||
cd rt-mbms-tx | ||
git submodule update | ||
``` | ||
|
||
## Building | ||
|
||
To build the LTE-based 5G Broadcast transmitter from the source: | ||
|
||
```bash | ||
cd ~/rt-mbms-tx | ||
mkdir build | ||
cd build | ||
cmake ../ | ||
make | ||
make test | ||
``` | ||
|
||
## Installing | ||
|
||
To install the LTE-based 5G Broadcast transmitter: | ||
|
||
``` | ||
sudo make install | ||
srsran_install_configs.sh user | ||
``` | ||
|
||
## Running | ||
|
||
Enter to the build directory and lunch the MBMS gateway, and the srsEPC, in diferent terminals. | ||
|
||
```` | ||
sudo ./srsepc/src/srsmbms | ||
sudo ./srsepc/src/srsepc | ||
```` | ||
|
||
It could be launch in background appending `` & `` at the end of the command | ||
|
||
After running the MBMS gateway, executing `` ip a `` in the terminal we should see a network interface called `` sgi_mb ``. We need now to route the IP traffic to this new interface. Since it's a multicast interface we use smcroutectl. | ||
|
||
Restarting the multicast route table: | ||
|
||
`` sudo smcroutectl restart `` | ||
|
||
Add a rule to redirect the traffic from the physical network interface of the PC with a specific IP address, to the sgi_mb. To know whats the name of the physical network interface run `` ip a `` in the termianl an look for one with a name similar to en0 or enp0. | ||
|
||
`` sudo smcroutectl add eno0 239.255.1.1 sgi_mb `` | ||
|
||
The IP address is the IP address source of the incoming IP traffic. | ||
|
||
If the IP traffic is been generated in the PC using PCAP, ffmpeg or similar, it is recommended to create a rule that avoids the multicast traffic goes to the network where the PC are connected, flooding it with multicast traffic. That can be avoided with the following: | ||
|
||
`` sudo route add -net 239.255.1.0 netmask 255.255.255.0 dev sgi_mb `` | ||
|
||
At this point we can create an IP transmission from a multimedia file using ffmpeg, from example, with the following command we will transmit a MPEG TS to the transmitter endlessly: | ||
|
||
`` while true; do ffmpeg -re -i file.ts -c copy -map 0 -f rtp_mpegts rtp://239.255.1.1:9988; done `` | ||
|
||
The last step is to lunch the eNodeB. The eNode needs the conf files where it reads the configuration values. Copy `` the sib.conf.mbsfn `` to the folder `` rt-tx-poc/build/ ``, and enb.conf to `` /root/.config/srsran/enb.conf ``. Lunch the eNB with `` sudo ./srsenb``. | ||
|
||
## Development | ||
|
||
This project follows | ||
the [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow). The | ||
`development` branch of this project serves as an integration branch for new features. Consequently, please make sure to | ||
switch to the `development` branch before starting the implementation of a new feature. |