96 lines
7.5 KiB
Org Mode
96 lines
7.5 KiB
Org Mode
* 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 [[https://hub.docker.com/r/jrottenberg/ffmpeg][ffmpeg]] container which then provided an rmtp stream.
|
|
The resulting rtmp stream was forwarded to [[https://hub.docker.com/r/tiangolo/nginx-rtmp/][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:
|
|
#+begin_src shell
|
|
-i /video/video.mkv -c:v libx264 -b:v 40M -movflags frag_keyframe+empty_moov -f flv ${STREAM_URL}
|
|
#+end_src
|
|
- ~-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 [[https://hub.docker.com/r/jrottenberg/ffmpeg][ffmpeg]] and [[https://hub.docker.com/r/nicolaka/netshoot][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:
|
|
#+begin_src shell
|
|
-i ${STREAM_URL} -c copy -f null -
|
|
#+end_src
|
|
- ~-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
|
|
#+begin_src
|
|
┌───────────────────────────────┐
|
|
│ │
|
|
│ 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 │ │ │ │ │ │ │ └────────┘ │
|
|
│ └──────────────┘ │ └────────┘ │ │ │ │
|
|
│ │ │ │ └───────────────────────────────┘
|
|
│ └────────────────────────────────────────┘ │
|
|
│ │
|
|
└───────────────────────────────────────────────────────────────────┘
|
|
#+end_src
|