5#include <unordered_map>
11#include <sys/socket.h>
12#include <netinet/in.h>
53 media_stream(std::string cname, std::string remote_addr, std::string local_addr, uint16_t src_port, uint16_t dst_port,
54 rtp_format_t fmt,
int rce_flags);
75 rtp_error_t init(std::shared_ptr<uvgrtp::zrtp> zrtp);
118 rtp_error_t
push_frame(uint8_t *data,
size_t data_len,
int rtp_flags);
142 rtp_error_t
push_frame(std::unique_ptr<uint8_t[]> data,
size_t data_len,
int rtp_flags);
173 rtp_error_t
push_frame(uint8_t *data,
size_t data_len, uint32_t ts,
int rtp_flags);
207 rtp_error_t
push_frame(uint8_t* data,
size_t data_len, uint32_t ts, uint64_t ntp_ts,
int rtp_flags);
238 rtp_error_t
push_frame(std::unique_ptr<uint8_t[]> data,
size_t data_len, uint32_t ts,
int rtp_flags);
272 rtp_error_t
push_frame(std::unique_ptr<uint8_t[]> data,
size_t data_len, uint32_t ts, uint64_t ntp_ts,
int rtp_flags);
331 uint32_t get_key()
const;
359 rtp_error_t init_connection();
362 rtp_error_t create_media(rtp_format_t fmt);
365 rtp_error_t free_resources(rtp_error_t ret);
367 rtp_error_t init_srtp_with_zrtp(
int rce_flags,
int type, std::shared_ptr<uvgrtp::base_srtp> srtp,
368 std::shared_ptr<uvgrtp::zrtp> zrtp);
370 rtp_error_t start_components();
372 uint32_t get_default_bandwidth_kbps(rtp_format_t fmt);
374 bool check_pull_preconditions();
375 rtp_error_t check_push_preconditions(
int rtp_flags,
bool smart_pointer);
377 inline uint8_t* copy_frame(uint8_t* original,
size_t data_len);
381 std::shared_ptr<uvgrtp::srtp> srtp_;
382 std::shared_ptr<uvgrtp::srtcp> srtcp_;
383 std::shared_ptr<uvgrtp::socket> socket_;
384 std::shared_ptr<uvgrtp::rtp> rtp_;
385 std::shared_ptr<uvgrtp::rtcp> rtcp_;
387 sockaddr_in remote_sockaddr_;
388 sockaddr_in6 remote_sockaddr_ip6_;
389 std::string remote_address_;
390 std::string local_address_;
403 uint32_t rtp_handler_key_;
404 uint32_t zrtp_handler_key_;
407 std::unique_ptr<uvgrtp::reception_flow> reception_flow_;
410 std::unique_ptr<uvgrtp::formats::media> media_;
413 std::unique_ptr<uvgrtp::holepuncher> holepuncher_;
417 ssize_t fps_numerator_ = 30;
418 ssize_t fps_denominator_ = 1;
419 uint32_t bandwidth_ = 0;
420 std::shared_ptr<std::atomic<std::uint32_t>> ssrc_;
424namespace uvg_rtp = uvgrtp;
RTCP instance handles all incoming and outgoing RTCP traffic, including report generation.