5G-MAG Reference Tools - MBMS Middleware
ContentStream.h
Go to the documentation of this file.
1 // 5G-MAG Reference Tools
2 // MBMS Middleware Process
3 //
4 // Copyright (C) 2021 Klaus Kühnhammer (Österreichische Rundfunksender GmbH & Co KG)
5 //
6 // Licensed under the License terms and conditions for use, reproduction, and
7 // distribution of 5G-MAG software (the “License”). You may not use this file
8 // except in compliance with the License. You may obtain a copy of the License at
9 // https://www.5g-mag.com/reference-tools. Unless required by applicable law or
10 // agreed to in writing, software distributed under the License is distributed on
11 // an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12 // or implied.
13 //
14 // See the License for the specific language governing permissions and limitations
15 // under the License.
16 //
17 
18 #pragma once
19 
20 #include <string>
21 #include <thread>
22 #include <libconfig.h++>
23 #include "File.h"
24 #include "Receiver.h"
25 #include "CacheManagement.h"
26 #include "DeliveryProtocols.h"
27 
28 namespace MBMS_RT {
29  class ContentStream {
30  public:
31  ContentStream(std::string base, std::string flute_if, boost::asio::io_service& io_service, CacheManagement& cache, DeliveryProtocol protocol, const libconfig::Config& cfg);
32  virtual ~ContentStream();
33 
34  enum class StreamType {
35  Basic,
37  };
38  virtual StreamType stream_type() const { return StreamType::Basic; };
39  virtual std::string stream_type_string() const { return "Basic"; };
40 
41  bool configure_5gbc_delivery_from_sdp(const std::string& sdp);
42  void read_master_manifest(const std::string& manifest);
43  void start();
44 
45  virtual void flute_file_received(std::shared_ptr<LibFlute::File> file);
46 
47  const std::string& base() const { return _base; };
48  const std::string& playlist_path() const { return _playlist_path; };
49 
50  std::string flute_info() const;
51 
53  std::string delivery_protocol_string() const { return _delivery_protocol == DeliveryProtocol::HLS ? "HLS" :
54  (_delivery_protocol == DeliveryProtocol::DASH ? "DASH" : "RTP"); };
55 
56 
57  const std::string& resolution() const { return _resolution; };
58  void set_resolution(std::string r) { _resolution = std::move(r); };
59 
60  const std::string& codecs() const { return _codecs; }
61  void set_codecs(std::string c) { _codecs = std::move(c); };
62 
63  unsigned long bandwidth() const { return _bandwidth; }
64  void set_bandwidth(unsigned long b) { _bandwidth = b; };
65 
66  double frame_rate() const { return _frame_rate; }
67  void set_frame_rate(double f) { _frame_rate = f; };
68 
69  std::string base_path() const { return _base_path; }
70  void set_base_path(std::string p) { _base_path = p; };
71 
72  protected:
73  const libconfig::Config& _cfg;
75  std::string _base = "";
76  std::string _base_path;
77  std::string _playlist_path;
78  std::string _5gbc_stream_iface;
79  std::string _5gbc_stream_type = "none";
80  std::string _5gbc_stream_mcast_addr = {};
81  std::string _5gbc_stream_mcast_port = {};
82  unsigned long long _5gbc_stream_flute_tsi = 0;
83  std::thread _flute_thread;
84  std::unique_ptr<LibFlute::Receiver> _flute_receiver;
85 
86  boost::asio::io_service& _io_service;
88 
89  std::string _resolution;
90  std::string _codecs;
91  unsigned long _bandwidth;
92  double _frame_rate;
93  };
94 }
std::string _playlist_path
Definition: ContentStream.h:77
const std::string & resolution() const
Definition: ContentStream.h:57
void set_bandwidth(unsigned long b)
Definition: ContentStream.h:64
void set_base_path(std::string p)
Definition: ContentStream.h:70
unsigned long bandwidth() const
Definition: ContentStream.h:63
const std::string & playlist_path() const
Definition: ContentStream.h:48
std::thread _flute_thread
Definition: ContentStream.h:83
unsigned long _bandwidth
Definition: ContentStream.h:91
bool configure_5gbc_delivery_from_sdp(const std::string &sdp)
virtual std::string stream_type_string() const
Definition: ContentStream.h:39
unsigned long long _5gbc_stream_flute_tsi
Definition: ContentStream.h:82
std::string base_path() const
Definition: ContentStream.h:69
virtual void flute_file_received(std::shared_ptr< LibFlute::File > file)
CacheManagement & _cache
Definition: ContentStream.h:87
virtual StreamType stream_type() const
Definition: ContentStream.h:38
const libconfig::Config & _cfg
Definition: ContentStream.h:70
DeliveryProtocol _delivery_protocol
Definition: ContentStream.h:74
void read_master_manifest(const std::string &manifest)
void set_resolution(std::string r)
Definition: ContentStream.h:58
std::unique_ptr< LibFlute::Receiver > _flute_receiver
Definition: ContentStream.h:84
double frame_rate() const
Definition: ContentStream.h:66
ContentStream(std::string base, std::string flute_if, boost::asio::io_service &io_service, CacheManagement &cache, DeliveryProtocol protocol, const libconfig::Config &cfg)
boost::asio::io_service & _io_service
Definition: ContentStream.h:86
DeliveryProtocol delivery_protocol() const
Definition: ContentStream.h:52
const std::string & base() const
Definition: ContentStream.h:47
const std::string & codecs() const
Definition: ContentStream.h:60
std::string _5gbc_stream_mcast_port
Definition: ContentStream.h:81
std::string _5gbc_stream_iface
Definition: ContentStream.h:78
std::string _5gbc_stream_mcast_addr
Definition: ContentStream.h:80
void set_frame_rate(double f)
Definition: ContentStream.h:67
void set_codecs(std::string c)
Definition: ContentStream.h:61
std::string _5gbc_stream_type
Definition: ContentStream.h:79
std::string delivery_protocol_string() const
Definition: ContentStream.h:53
std::string flute_info() const
static Config cfg
Global configuration object.
Definition: main.cpp:111