HowToFeMBMS authored by Dr.-Ing.  Javier Morgade's avatar Dr.-Ing. Javier Morgade
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">FeMBMS</font></b>
</td>
</tr>
</table>
# Author
**Javier Morgade** (javier.morgade@ieee.org)
# Description
The Further evolved multimedia broadcast multicast service (FeMBMS) is the *LTE broadcast only* mode standardized in 3GPP Rel.14 where several modifications were made to enhance the system architecture and media formats flexibility for content providers, broadcasters and mobile network operators.
The key 3GPP eMBMS radio interface enhancements were introduced in 3GPP TS 36.211, TS 36.212 and TS 36.213. Rel-14 also contains enhancements of the 3GPP eMBMS system architecture and media formats.
The code is being harmonized in `fembms-enb-ue`. There is an ongoing merge request in into `develop` !860`
# FeMBMS usage in OAI
## Working FeMBMS configuration files ##
Look into the [CI configuration folder](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/ci-scripts/conf_files):
eMBMS *Mixed BC/UC* FDD files for RFSIM: for example [eMBMS-BC/UC-FDD-5MHz-RFSIM](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf)
FeMBMS *dedicated BC* files for RFSIM: for example [FeMBMS-BC-5MHz-RFSIM](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/ci-scripts/conf_files/lte-fdd-fembms-basic-sim.conf)
eMBMS *Mixed BC/UC* FDD files for USRP: for example [eMBMS-BC/UC-FDD-5MHz-USRP](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf)
FeMBMS *dedicated BC* files for USRP: take example [FeMBMS-BC-5MHz-USRP](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf) as reference and `ENABLE` the `mbms_dedicated_serving_cell` flag
Adapt the `eNBs` `MCEs` and `MMEs` config objects to your system needs.
### eBNs section
```
////////// MCE parameters:
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
///M2
enable_enb_m2 = "yes";
mbms_configuration_data_list = (
{
mbsfn_sync_area = 0x0001;
mbms_service_area_list=(
{
mbms_service_area=0x0001;
}
);
}
);
NETWORK_INTERFACES :
{
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
ENB_PORT_FOR_X2C = 36422; # Spec 36422
ENB_IPV4_ADDRESS_FOR_M2C = "127.0.0.2/24";
ENB_PORT_FOR_M2C = 36443; # Spec 36443
};
```
### MCEs section
```
MCEs = (
{
MCE_ID = 0xe00;
MCE_name = "MCE-LTE";
//M2
enable_mce_m2 = "yes";
//M3
enable_mce_m3 = "yes";
target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
ipv6 = "192:168:30::17";
active = "yes";
preference = "ipv4";
}
);
NETWORK_INTERFACES :
{
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
MCE_IPV4_ADDRESS_FOR_M2C = "127.0.0.7/24";
MCE_PORT_FOR_M2C = 36443; # Spec 36443
MCE_INTERFACE_NAME_FOR_M3_MME = "lo";
MCE_IPV4_ADDRESS_FOR_M3C = "127.0.0.3/24";
MCE_PORT_FOR_M3C = 36444; # Spec 36444
};
plnm:
{
mcc = 208;
mnc = 93;
mnc_length = 2;
};
mbms_sched_info :
{
mcch_update_time = 10;
mbms_area_config_list = (
{
common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
mbms_area_id = 0;
pmch_config_list = (
{
allocated_sf_end=512;
data_mcs=15;
mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
mbms_session_list = (
{
#plnm + service_id ->tmgi
plnm:
{
mcc = 208;
mnc = 93;
mnc_length = 2;
}
service_id=0; #keep this allways as 0 (workaround for TUN if)
lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
}
);
}
);
mbms_sf_config_list = (
{
radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
radioframe_alloocation_offset=0;
num_frame="oneFrame";
subframe_allocation=57; #xx111001
//num_frame="fourFrame";
//subframe_allocation=14548987; #
}
);
}
);
};
mcch_config_per_mbsfn_area = (
{
mbsfn_area = 0;
pdcch_length = 1; #s1(0), s2(1)
repetition_period = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
offset = 0;
modification_period = 0; #rf512(0; rf1024(1)
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
mcs = 0; #n2(0), n7(1), n13(2), n19(3)
}
);
}
);
```
### MMEs section
```
MMEs = (
{
MME_ID = 0xe00;
MME_name = "MME-MBMS-LTE";
//M3
enable_mme_m3 = "yes";
NETWORK_INTERFACES :
{
MME_INTERFACE_NAME_FOR_M3_MCE = "lo";
MME_IPV4_ADDRESS_FOR_M3C = "127.0.0.18/24";
MME_PORT_FOR_M3C = 36444; # Spec 36444
};
}
);
```
## Build Run and Test ##
Build using the `build_oai` script as usual. When MBMS is enable (FeMBMS/eMBMS) The lte-softmodem is used to trigger two additional tasks (MCE-MBMS-Task and MME-MBMS-Task). This two tasks handle both M3AP and M2AP application interfaces.
### Build
```bash
$ git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
$ cd openairinterface5g
$ git checkout fembms-enb-ue
$ cd cmake_targets
$ ./build_oai -I -w USRP #Dependencies install (USRP flag can be avoided if only RFSIM will be used)
$ ./build_oai --UE --eNB -w USRP #USRP flag can be avoided if only RFSIM will be used
```
### Run eMBMS mixed UC/MC with RFSIM
Run following targets.
Be aware that two additional `TUN` interfaces will be created: `oaitun_enm1` and `oaitun_uem1`
Take care you configure the suitable IP addres in <enb-ip> flag.
#### eNB
```bash
$ cd cmake_targets
$ sudo RFSIMULATOR=enb ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf --noS1 --nokrnmod 1 --rfsim
```
#### UE
```bash
$ cd cmake_targets
$ sudo RFSIMULATOR=<enb-ip> ran_build/build/lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1 --rfsim
```
### Run FeMBMS eNB dedicated BC with RFSIM
Run following targets.
Be aware that two additional `TUN` interfaces will be created: `oaitun_enm1` and `oaitun_uem1`
Take care you configure the suitable IP addres in <enb-ip> flag.
#### eNB
```bash
$ cd cmake_targets
$ sudo RFSIMULATOR=enb ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/lte-fdd-mbms-basic-sim.conf --rfsim --noS1 --nokrnmod 1 --eNBs.[0].component_carriers.[0].mbms_dedicated_serving_cell DISABLE --MCEs.[0].mbms_sched_info.mbms_area_config_list.[0].pmch_config_list.[0].allocated_sf_end 1024
```
#### UE
```bash
$ cd cmake_targets
$ sudo RFSIMULATOR=<enb-ip> ran_build/build/lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1 --rfsim
```
### Run eMBMS mixed UC/MC with USRP in Band7
Run following targets.
Be aware that two additional `TUN` interfaces will be created: `oaitun_enm1` and `oaitun_uem1`
#### eNB
```bash
$ cd cmake_targets
$ sudo ran_build/build/lte-softmodem -O O ../ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf --noS1 --nokrnmod 1
--eNBs.[0].component_carriers.[0].eutra_band 7
--eNBs.[0].component_carriers.[0].downlink_frequency 2680000000
--eNBs.[0].component_carriers.[0].uplink_frequency_offset -120000000
--eNBs.[0].component_carriers.[0].N_RB_DL 25
--noS1 --nokrnmod 1
```
#### UE
```bash
$ cd cmake_targets
$ sudo RFSIMULATOR=<enb-ip> ran_build/build/lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1
```
### Run FeMBMS eNB dedicated BC with USRP Band7
Run following targets.
Be aware that two additional `TUN` interfaces will be created: `oaitun_enm1` and `oaitun_uem1`
#### eNB
```bash
$ cd cmake_targets
$ sudo ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf --noS1 --nokrnmod 1
--eNBs.[0].component_carriers.[0].eutra_band 7
--eNBs.[0].component_carriers.[0].downlink_frequency 2680000000
--eNBs.[0].component_carriers.[0].uplink_frequency_offset -120000000
--eNBs.[0].component_carriers.[0].N_RB_DL 25
--eNBs.[0].component_carriers.[0].mbms_dedicated_serving_cell ENABLE
--MCEs.[0].mbms_sched_info.mbms_area_config_list.[0].pmch_config_list.[0].allocated_sf_end 512
```
#### UE
```bash
$ cd cmake_targets
$ sudo ran_build/build/lte-uesoftmodem -C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1
```
### Test end-to-end video streaming
#### `ffmpeg` install and get a video test sample
```bash
$ sudo apt-get install ffmpeg
$ wget http://jell.yfish.us/media/jellyfish-5-mbps-hd-h264.mkv #http://jell.yfish.us/
```
#### push RTP stream over eNB machine (either FeMBMS or eMBMS setup )
```bash
$ ffmpeg -re -i jellyfish-5-mbps-hd-h264.mkv -f rtp_mpegts rtp://10.0.2.2:5000
```
#### Playback RTP stream on UE machine (either FeMBMS or eMBMS setup )
```bash
$ ffplay rtp://10.0.2.2:5000
```