MediaX v1.0.0rc7 [7e6cb74]
Video streaming for military vehicles
Loading...
Searching...
No Matches
sap_announcer.h
Go to the documentation of this file.
1//
2// Copyright (c) 2025, Astute Systems PTY LTD
3//
4// This file is part of the VivoeX project developed by Astute Systems.
5//
6// Licensed under the Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)
7// License. See the LICENSE file in the project root for full license details.
8//
14
15#ifndef SAP_SAP_ANNOUNCER_H_
16#define SAP_SAP_ANNOUNCER_H_
17
18#ifdef _WIN32
19#include <winsock2.h>
20#include <ws2tcpip.h>
21#else
22#include <arpa/inet.h>
23#include <ifaddrs.h>
24#include <netinet/in.h>
25#include <sys/socket.h>
26#endif
27#include <stdint.h>
28#include <unistd.h>
29
30#include <array>
31#include <map>
32#include <string>
33#include <thread>
34#include <vector>
35
36#include "rtp/rtp_types.h"
37
38// The Session Announcement Protocol (SAP) and Session Description Protocol (SDP) namespace
39namespace mediax::sap {
40
42struct SapHeader {
43 public:
45 uint8_t version;
47 uint8_t auth_len;
49 uint16_t hash;
62};
63
66 public:
71 static SapAnnouncer &GetInstance();
72
77 SapAnnouncer(SapAnnouncer const &) = delete;
78
84 void AddSapAnnouncement(const ::mediax::rtp::StreamInformation &stream_information);
85
93 ::mediax::rtp::StreamInformation &GetSapAnnouncment(std::string_view session_name,
94 std::string_view multicast_address = "");
95
102 void DeleteSapAnnouncement(std::string_view session_name, std::string_view multicast_address = "");
103
109 void UndeleteSapAnnouncement(std::string_view session_name);
110
116
122 void Start();
123
128 void Stop();
129
134 void Restart();
135
142 bool Active() const;
143
149 void SetSourceInterface(uint32_t select = 0);
150
156 std::map<uint32_t, std::string> GetInterfaces() const;
157
163 std::vector<::mediax::rtp::StreamInformation> &GetStreams();
164
170 uint32_t GetActiveStreamCount() const;
171
172 private:
177 SapAnnouncer();
178
184
192 static void SapAnnouncementThread(SapAnnouncer *stream_information);
193
199 void SendSapAnnouncement(const ::mediax::rtp::StreamInformation &stream_information) const;
200
206 void SendSapDeletion(const ::mediax::rtp::StreamInformation &stream_information) const;
207
215 int SendSapPacket(const ::mediax::rtp::StreamInformation &stream_information, bool deletion) const;
216
221 void DeleteAllStreams() const;
222
229 uint32_t GetIpv4Address(std::string_view interface_name) const;
230
237 std::string GetIpv4AddressString(std::string_view interface_name) const;
238
242 std::vector<::mediax::rtp::StreamInformation> streams_;
244 std::thread thread_;
250 struct sockaddr_in multicast_addr_;
252 bool running_ = false;
253};
254
255} // namespace mediax::sap
256
257#endif // SAP_SAP_ANNOUNCER_H_
Class to announce the stream details using the SAP protocol.
Definition sap_announcer.h:65
SapAnnouncer()
Construct a new SapAnnouncer::SapAnnouncer object.
Definition sap_announcer.cc:39
std::vector<::mediax::rtp::StreamInformation > & GetStreams()
Get the Streams object.
Definition sap_announcer.cc:409
uint32_t GetIpv4Address(std::string_view interface_name) const
Get the Ipv4 Address as a number.
Definition sap_announcer.cc:331
static void SapAnnouncementThread(SapAnnouncer *stream_information)
Function to broadcast SAP announcements for a list of streams.
Definition sap_announcer.cc:300
uint32_t source_ipaddress_
The IPV4 source address.
Definition sap_announcer.h:246
std::thread thread_
The SAP/SDP transmission thread.
Definition sap_announcer.h:244
~SapAnnouncer()
Destroy the SapAnnouncer::SapAnnouncer object.
Definition sap_announcer.cc:46
void AddSapAnnouncement(const ::mediax::rtp::StreamInformation &stream_information)
Add Sap stream announcement information.
Definition sap_announcer.cc:96
static SapAnnouncer singleton_
The singleton.
Definition sap_announcer.h:240
SapAnnouncer(SapAnnouncer const &)=delete
Construct a new SapAnnouncer object, not used so deleted.
void Stop()
Stop the SAP/SDP announcement thread.
Definition sap_announcer.cc:70
int sockfd_
The open socket file descriptor.
Definition sap_announcer.h:248
bool running_
The flag indicating the SAP thread is active.
Definition sap_announcer.h:252
void Start()
Start the SAP/SDP announcements thread. Ensure you have set the source interface using SetSourceInter...
Definition sap_announcer.cc:55
static SapAnnouncer & GetInstance()
A Singleton get method.
Definition sap_announcer.cc:53
void DeleteSapAnnouncement(std::string_view session_name, std::string_view multicast_address="")
Delete a specific session announcement.
Definition sap_announcer.cc:129
void SetSourceInterface(uint32_t select=0)
Set the Source Interface object.
Definition sap_announcer.cc:316
std::map< uint32_t, std::string > GetInterfaces() const
Get the Interfaces as a map of strings.
Definition sap_announcer.cc:368
void SendSapDeletion(const ::mediax::rtp::StreamInformation &stream_information) const
Function to send a SAP deletion.
Definition sap_announcer.cc:172
void DeleteAllStreams() const
Delete all the SAP/SDP streams.
Definition sap_announcer.cc:88
int SendSapPacket(const ::mediax::rtp::StreamInformation &stream_information, bool deletion) const
Send a SAP packet.
Definition sap_announcer.cc:177
struct sockaddr_in multicast_addr_
The multicast address.
Definition sap_announcer.h:250
void UndeleteSapAnnouncement(std::string_view session_name)
Undelete a specific session announcement.
Definition sap_announcer.cc:151
void Restart()
Restart any deleted SAP/SDP announcements.
Definition sap_announcer.cc:77
void DeleteAllSapAnnouncements()
Deletes all announcements, thread is still running. Call Stop() method to terminate the thread.
Definition sap_announcer.cc:159
bool Active() const
Returns tru if running, Start() has beed called.
Definition sap_announcer.cc:86
std::vector<::mediax::rtp::StreamInformation > streams_
A list of active SAP streams.
Definition sap_announcer.h:242
std::string GetIpv4AddressString(std::string_view interface_name) const
Get the Ipv 4 Address as a string.
Definition sap_announcer.cc:358
::mediax::rtp::StreamInformation & GetSapAnnouncment(std::string_view session_name, std::string_view multicast_address="")
Get the Sap Announcment object.
Definition sap_announcer.cc:110
void SendSapAnnouncement(const ::mediax::rtp::StreamInformation &stream_information) const
Function to send a SAP announcement.
Definition sap_announcer.cc:168
uint32_t GetActiveStreamCount() const
Get the number of active streams.
Definition sap_announcer.cc:398
The Session Announcment Protocol (SAP)/ Session Description Protocol (SDP) namespace.
Definition sap_announcer.cc:35
RTP streaming video types.
Struct capturing all stream information.
Definition rtp_types.h:223
Class to announce the stream details using the SAP protocol.
Definition sap_announcer.h:42
uint16_t hash
Hash, must be unique for this announcement.
Definition sap_announcer.h:49
uint8_t auth_len
Authentication length.
Definition sap_announcer.h:47
uint8_t version
Protocol version.
Definition sap_announcer.h:45
uint32_t originating_source
Originating Source, IPV4.
Definition sap_announcer.h:51
SapHeader(uint8_t version, uint8_t auth_len, uint16_t hash, uint32_t originating_source)
Create a new Sap Header object.
Definition sap_announcer.h:60