64#define MOD_NAME "[video_rxtx/rtp] "
69using std::ostringstream;
90 MSG(ERROR,
"Failed receiver to %s.\n",
msg->receiver);
92 "Changing receiver failed!");
94 MSG(NOTICE,
"Changed receiver to %s.\n",
msg->receiver);
104 if (
msg->rx_port != 0) {
116 MSG(ERROR,
"Failed to Change TX port to %d.\n",
119 "Changing TX port failed!");
121 MSG(NOTICE,
"Changed TX port to %d.\n",
msg->tx_port);
128 if (strcmp(
msg->fec_cfg,
"flush") == 0) {
129 delete old_fec_state;
135 if (strstr(
msg->fec_cfg,
"help") ==
nullptr) {
136 MSG(ERROR,
"Unable to initalize FEC!\n");
149 delete old_fec_state;
150 MSG(NOTICE,
"Fec changed successfully\n");
171 MSG(ERROR,
"Unable to change SSRC!\n");
176 "Changed SSRC from 0x%08" PRIx32
" to "
177 "0x%08" PRIx32
".\n",
184 MSG(ERROR,
"Unexpected audio message ID %d!\n",
msg->type);
187 MSG(ERROR,
"Unknown message ID %d!\n",
msg->type);
215 params.at(
"bitrate").ll)) == NULL) {
244 "Unable to set buffer size to %d B.\n"
246 "See https://github.com/CESNET/UltraGrid/wiki/Extending-Network-Buffers-%%28Windows%%29 for details.\n",
248 "Please set net.core.rmem_max value to %d or greater (see also\n"
249 "https://github.com/CESNET/UltraGrid/wiki/OS-Setup-UltraGrid):\n"
251 "\tsysctl -w kern.ipc.maxsockbuf=%d\n"
252 "\tsysctl -w net.inet.udp.recvspace=%d\n"
254 "\tsysctl -w net.core.rmem_max=%d\n"
256 "To make this persistent, add these options (key=value) to /etc/sysctl.conf\n"
268 int send_port,
struct pdb *participants,
int force_ip_version,
269 const char *mcast_if,
int ttl)
271 double rtcp_bw = 5 * 1024 * 1024;
274 const bool multithreaded =
true;
276 const bool multithreaded =
false;
279 if (strlen(mcast_if) == 0) {
283 rtp_init_if(addr, mcast_if, recv_port, send_port, ttl, rtcp_bw,
285 force_ip_version, multithreaded);
286 if (device ==
nullptr) {
std::mutex m_network_devices_lock
struct response * process_sender_message(struct msg_sender *msg) override
static struct rtp * initialize_network(const char *addrs, int recv_port_base, int send_port_base, struct pdb *participants, int force_ip_version, const char *mcast_if, int ttl)
struct rtp * m_network_device
static void destroy_rtp_device(struct rtp *network_devices)
struct pdb * m_participants
rtp_video_rxtx(std::map< std::string, param_u > const ¶ms)
std::string m_requested_receiver
virtual ~rtp_video_rxtx()
static void display_buf_increase_warning(int size)
void log_msg(int level, const char *format,...)
#define LOG_LEVEL_INFO
normal reporting
void module_done(struct module *module_data)
volatile int video_offset
added video delay in ms (non-negative), can be used to tune AV sync
#define EXIT_FAIL_TRANSMIT
#define EXIT_FAIL_NETWORK
struct response * new_response(int status, const char *text)
@ SENDER_MSG_QUERY_VIDEO_MODE
@ SENDER_MSG_CHANGE_RECEIVER
#define RESPONSE_NO_CONTENT
#define RESPONSE_INT_SERV_ERR
#define IN6_BLACKHOLE_SERVER_MODE_STR
struct pdb * pdb_init(volatile int *delay_ms)
int pdb_add(struct pdb *db, uint32_t ssrc)
void pdb_destroy(struct pdb **db_p)
bool rtp_set_send_buf(struct rtp *session, int bufsize)
bool rtp_set_recv_buf(struct rtp *session, int bufsize)
bool rtp_set_option(struct rtp *session, rtp_option optname, int optval)
struct rtp * rtp_init_if(const char *addr, const char *iface, uint16_t rx_port, uint16_t tx_port, int ttl, double rtcp_bw, int tfrc_on, rtp_callback callback, uint8_t *userdata, int force_ip_version, bool multithreaded)
uint32_t rtp_my_ssrc(struct rtp *session)
bool rtp_set_sdes(struct rtp *session, uint32_t ssrc, rtcp_sdes_type type, const char *value, int length)
void rtp_done(struct rtp *session)
@ RTP_OPT_WEAK_VALIDATION
#define INITIAL_VIDEO_SEND_BUFFER_SIZE
#define INITIAL_VIDEO_RECV_BUFFER_SIZE
void rtp_recv_callback(struct rtp *session, rtp_event *e)
static fec * create_from_config(const char *str, bool is_audio) noexcept
unsigned long long int m_frames_sent
struct module m_sender_mod
void check_sender_messages()
struct common_opts m_common
struct tx * tx_init(struct module *parent, unsigned mtu, enum tx_media_type media_type, const char *fec, const char *encryption, long long int bitrate)
This is an umbrella header for video functions.
API for video compress drivers.
API for video decompress drivers.