7.5 KiB
Measurement Setup
During our testing in Ulm we had two machines. The 5G-MEC, which we used as the sender of a video stream. The receiver of the stream was a laptop with a GNSS module and the 5G antenna.
The 5G-MEC was a VM running Ubuntu. To access the sender from the receiver, the receiver had to be on a specific mobile network. From there the receiver had access to a OpenVPN-Server, which granted us a connection to the 5G-MEC. To limit traffic between the sender and receiver to only the 5G connection, Wi-Fi was turned off.
Sender
The sender had a video file that was used by a ffmpeg container which then provided an rmtp stream. The resulting rtmp stream was forwarded to nginx-rtmp so it is accessable from the outside.
Video File
The video file the sender used for streaming had the following format:
- Bitrate: 23780 kb/s
- Encoding: h264
- Color model: yuv420p
- Resolution: 1920x1080
- Frame Rate: 23.98 fps
Video Stream
To stream the video the following flags were used:
-i /video/video.mkv -c:v libx264 -b:v 40M -movflags frag_keyframe+empty_moov -f flv ${STREAM_URL}
-i /video/video.mkv: This specifies the path to the video file-c:v libx264: Specifies the video coded that should be used. H264, the original codec, in this case.-b:v 40M: Specifies the target video bitrate, which is 40 Mb/s.-movflags frag_keyframe+empty_moov: These were used to make the file compatible with the FLV format-f flv: Specifies the target file format. FLV is necessary for the RTMP video stream.${STREAM_URL}: The URL where the stream will be served.
Receiver
The receiver had a GNSS module to record GPS data and a 5G mobile connection. It was running the videoprobe tool in docker along with ffmpeg and netshoot. ffmpeg was configured to use netshoot as its network gateway. netshoot ran tshark on its passing traffic and created a pcap file. That pcap file was written to a docker volume, which was also attached to our videoprobe tool. The videoprobe tool used the pcap file to gauge the throughput of the video stream.
Along with videoprobe to generate logs we also ran signal.sh to gain mobile network signal information from the antenna, such as "Reference Signal Received Quality" (RSRQ) and "Reference Signal Received Power" (RSRP).
The logfiles of both have to be manually joined on their timestamps at a later time.
Receiver
The receiver ran with the following flags:
-i ${STREAM_URL} -c copy -f null -
-i ${STREAM_URL}: The source of the video stream that should be read in.-c copy: Makes the receiver take in the input stream as is.-f null -: Discard the streamed video.
Netshoot
Netshoot is a network diagnostic tool for docker. We use it to get the traffic to/from the ffmpeg container.
VideoProbe
VideoProbe uses the following metrics:
- Location Data (from GNSS module)
- Throughput (from netshoot-pcap file)
- Latency (ping)
to create a logfile.
Each entry of the logfile has the fields: (timestamp, latitude,longitude, throughput, latency (in ns)). The resolution of the output was 1 entry/s.
signal.sh
We used qmicli to log signal information of the antenna.
An entry of the logfile has the fields: (timestamp, rsrq, rsrp) The resolution of the output was 1 entry/s.
Diagram
┌───────────────────────────────┐
│ │
│ Client (Laptop) │
│ │
│ ┌──────┐ ┌────────────┐ │
┌───────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │
│ │ │ │ pcap │◄─────┤ videoprobe │ │
│ Sender (5G-MEC) ┌────────────────────────────────────────┐ │ │ │ │ │ │ │
│ │ │ │ │ └──────┘ └────────────┘ │
│ ┌──────────────┐ │ Docker │ │ │ ▲ │
│ │ │ │ ┌────────┐ │ │ │ │ │
│ │ Videofile │ │ │ │ ┌──────────────┐ │ │ │ ┌──┴───────┐ ┌────────┐ │
│ │ - h264 │ │ │ ffmpeg │ │ │ │ │ │ │ │ │ │ │
│ │ - 1920x1080 ├─────┼────►│ - h264 ├────►│ nginx-server ├────┼──►├─────────────────────────────────┼─►│ netshoot ├─────►│ ffmpeg │ │
│ │ - 23.98 fps │ │ │ - 40M │ │ │ │ │ │ │ │ │ - copy │ │
│ │ - 23780 kb/s │ │ │ - flv │ └──────────────┘ │ │ │ └──────────┘ │ │ │
│ │ - mkv │ │ │ │ │ │ │ └────────┘ │
│ └──────────────┘ │ └────────┘ │ │ │ │
│ │ │ │ └───────────────────────────────┘
│ └────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────┘