FFmpeg
Data Structures | Macros | Functions | Variables
udp.c File Reference
#include "avformat.h"
#include "avio_internal.h"
#include "libavutil/avassert.h"
#include "libavutil/parseutils.h"
#include "libavutil/fifo.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "libavutil/log.h"
#include "libavutil/time.h"
#include "internal.h"
#include "network.h"
#include "os_support.h"
#include "url.h"
#include "ip.h"

Go to the source code of this file.

Data Structures

struct  UDPContext
 

Macros

#define _DEFAULT_SOURCE
 
#define _BSD_SOURCE   /* Needed for using struct ip_mreq with recent glibc */
 
#define UDPLITE_SEND_CSCOV   10
 
#define UDPLITE_RECV_CSCOV   11
 
#define IPPROTO_UDPLITE   136
 
#define IPV6_ADD_MEMBERSHIP   IPV6_JOIN_GROUP
 
#define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP
 
#define UDP_TX_BUF_SIZE   32768
 
#define UDP_RX_BUF_SIZE   393216
 
#define UDP_MAX_PKT_SIZE   65536
 
#define UDP_HEADER_SIZE   8
 
#define OFFSET(x)   offsetof(UDPContext, x)
 
#define D   AV_OPT_FLAG_DECODING_PARAM
 
#define E   AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static int udp_set_multicast_ttl (int sockfd, int mcastTTL, struct sockaddr *addr)
 
static int udp_join_multicast_group (int sockfd, struct sockaddr *addr, struct sockaddr *local_addr)
 
static int udp_leave_multicast_group (int sockfd, struct sockaddr *addr, struct sockaddr *local_addr)
 
static int udp_set_multicast_sources (URLContext *h, int sockfd, struct sockaddr *addr, int addr_len, struct sockaddr_storage *local_addr, struct sockaddr_storage *sources, int nb_sources, int include)
 
static int udp_set_url (URLContext *h, struct sockaddr_storage *addr, const char *hostname, int port)
 
static int udp_socket_create (URLContext *h, struct sockaddr_storage *addr, socklen_t *addr_len, const char *localaddr)
 
static int udp_port (struct sockaddr_storage *addr, int addr_len)
 
int ff_udp_set_remote_url (URLContext *h, const char *uri)
 If no filename is given to av_open_input_file because you want to get the local port first, then you must call this function to set the remote server address. More...
 
int ff_udp_get_local_port (URLContext *h)
 Return the local port used by the UDP connection. More...
 
static int udp_get_file_handle (URLContext *h)
 Return the udp file handle for select() usage to wait for several RTP streams at the same time. More...
 
static int udp_open (URLContext *h, const char *uri, int flags)
 
static int udplite_open (URLContext *h, const char *uri, int flags)
 
static int udp_read (URLContext *h, uint8_t *buf, int size)
 
static int udp_write (URLContext *h, const uint8_t *buf, int size)
 
static int udp_close (URLContext *h)
 

Variables

static const AVOption options []
 
static const AVClass udp_class
 
static const AVClass udplite_context_class
 
const URLProtocol ff_udp_protocol
 
const URLProtocol ff_udplite_protocol
 

Detailed Description

UDP protocol

Definition in file udp.c.

Macro Definition Documentation

◆ _DEFAULT_SOURCE

#define _DEFAULT_SOURCE

Definition at line 27 of file udp.c.

◆ _BSD_SOURCE

#define _BSD_SOURCE   /* Needed for using struct ip_mreq with recent glibc */

Definition at line 28 of file udp.c.

◆ UDPLITE_SEND_CSCOV

#define UDPLITE_SEND_CSCOV   10

Definition at line 56 of file udp.c.

◆ UDPLITE_RECV_CSCOV

#define UDPLITE_RECV_CSCOV   11

Definition at line 57 of file udp.c.

◆ IPPROTO_UDPLITE

#define IPPROTO_UDPLITE   136

Definition at line 61 of file udp.c.

◆ IPV6_ADD_MEMBERSHIP

#define IPV6_ADD_MEMBERSHIP   IPV6_JOIN_GROUP

Definition at line 74 of file udp.c.

◆ IPV6_DROP_MEMBERSHIP

#define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP

Definition at line 75 of file udp.c.

◆ UDP_TX_BUF_SIZE

#define UDP_TX_BUF_SIZE   32768

Definition at line 78 of file udp.c.

◆ UDP_RX_BUF_SIZE

#define UDP_RX_BUF_SIZE   393216

Definition at line 79 of file udp.c.

◆ UDP_MAX_PKT_SIZE

#define UDP_MAX_PKT_SIZE   65536

Definition at line 80 of file udp.c.

◆ UDP_HEADER_SIZE

#define UDP_HEADER_SIZE   8

Definition at line 81 of file udp.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(UDPContext, x)

Definition at line 122 of file udp.c.

◆ D

Definition at line 123 of file udp.c.

◆ E

Definition at line 124 of file udp.c.

Function Documentation

◆ udp_set_multicast_ttl()

static int udp_set_multicast_ttl ( int  sockfd,
int  mcastTTL,
struct sockaddr *  addr 
)
static

Definition at line 161 of file udp.c.

Referenced by udp_open().

◆ udp_join_multicast_group()

static int udp_join_multicast_group ( int  sockfd,
struct sockaddr *  addr,
struct sockaddr *  local_addr 
)
static

Definition at line 183 of file udp.c.

Referenced by udp_open().

◆ udp_leave_multicast_group()

static int udp_leave_multicast_group ( int  sockfd,
struct sockaddr *  addr,
struct sockaddr *  local_addr 
)
static

Definition at line 216 of file udp.c.

Referenced by udp_close().

◆ udp_set_multicast_sources()

static int udp_set_multicast_sources ( URLContext h,
int  sockfd,
struct sockaddr *  addr,
int  addr_len,
struct sockaddr_storage local_addr,
struct sockaddr_storage sources,
int  nb_sources,
int  include 
)
static

Definition at line 249 of file udp.c.

Referenced by udp_open().

◆ udp_set_url()

static int udp_set_url ( URLContext h,
struct sockaddr_storage addr,
const char *  hostname,
int  port 
)
static

Definition at line 318 of file udp.c.

Referenced by ff_udp_set_remote_url().

◆ udp_socket_create()

static int udp_socket_create ( URLContext h,
struct sockaddr_storage addr,
socklen_t *  addr_len,
const char *  localaddr 
)
static

Definition at line 334 of file udp.c.

Referenced by udp_open().

◆ udp_port()

static int udp_port ( struct sockaddr_storage addr,
int  addr_len 
)
static

Definition at line 376 of file udp.c.

Referenced by udp_open().

◆ ff_udp_set_remote_url()

int ff_udp_set_remote_url ( URLContext h,
const char *  uri 
)

If no filename is given to av_open_input_file because you want to get the local port first, then you must call this function to set the remote server address.

url syntax: udp://host:port[?option=val...] option: 'ttl=n' : set the ttl value (for multicast only) 'localport=n' : set the local port 'pkt_size=n' : set max packet size 'reuse=1' : enable reusing the socket 'overrun_nonfatal=1': survive in case of circular buffer overrun

Parameters
hmedia file context
uriof the remote server
Returns
zero if no error.

Definition at line 406 of file udp.c.

Referenced by ff_rtp_set_remote_url(), and udp_open().

◆ ff_udp_get_local_port()

int ff_udp_get_local_port ( URLContext h)

Return the local port used by the UDP connection.

Parameters
hmedia file context
Returns
the local port number

Definition at line 445 of file udp.c.

Referenced by ff_rtp_get_local_rtp_port(), and rtp_open().

◆ udp_get_file_handle()

static int udp_get_file_handle ( URLContext h)
static

Return the udp file handle for select() usage to wait for several RTP streams at the same time.

Parameters
hmedia file context

Definition at line 456 of file udp.c.

◆ udp_open()

static int udp_open ( URLContext h,
const char *  uri,
int  flags 
)
static

Definition at line 624 of file udp.c.

Referenced by udplite_open().

◆ udplite_open()

static int udplite_open ( URLContext h,
const char *  uri,
int  flags 
)
static

Definition at line 947 of file udp.c.

◆ udp_read()

static int udp_read ( URLContext h,
uint8_t *  buf,
int  size 
)
static

Definition at line 957 of file udp.c.

◆ udp_write()

static int udp_write ( URLContext h,
const uint8_t *  buf,
int  size 
)
static

Definition at line 1021 of file udp.c.

◆ udp_close()

static int udp_close ( URLContext h)
static

Definition at line 1071 of file udp.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "buffer_size", "System data size (in bytes)", OFFSET(buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E },
{ "bitrate", "Bits to send per second", OFFSET(bitrate), AV_OPT_TYPE_INT64, { .i64 = 0 }, 0, INT64_MAX, .flags = E },
{ "burst_bits", "Max length of bursts in bits (when using bitrate)", OFFSET(burst_bits), AV_OPT_TYPE_INT64, { .i64 = 0 }, 0, INT64_MAX, .flags = E },
{ "localport", "Local port", OFFSET(local_port), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, D|E },
{ "local_port", "Local port", OFFSET(local_port), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, .flags = D|E },
{ "localaddr", "Local address", OFFSET(localaddr), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E },
{ "udplite_coverage", "choose UDPLite head size which should be validated by checksum", OFFSET(udplite_coverage), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, D|E },
{ "pkt_size", "Maximum UDP packet size", OFFSET(pkt_size), AV_OPT_TYPE_INT, { .i64 = 1472 }, -1, INT_MAX, .flags = D|E },
{ "reuse", "explicitly allow reusing UDP sockets", OFFSET(reuse_socket), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, D|E },
{ "reuse_socket", "explicitly allow reusing UDP sockets", OFFSET(reuse_socket), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, .flags = D|E },
{ "broadcast", "explicitly allow or disallow broadcast destination", OFFSET(is_broadcast), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E },
{ "ttl", "Time to live (multicast only)", OFFSET(ttl), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, INT_MAX, E },
{ "connect", "set if connect() should be called on socket", OFFSET(is_connected), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, .flags = D|E },
{ "fifo_size", "set the UDP receiving circular buffer size, expressed as a number of packets with size of 188 bytes", OFFSET(circular_buffer_size), AV_OPT_TYPE_INT, {.i64 = 7*4096}, 0, INT_MAX, D },
{ "overrun_nonfatal", "survive in case of UDP receiving circular buffer overrun", OFFSET(overrun_nonfatal), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, D },
{ "timeout", "set raise error timeout, in microseconds (only in read mode)",OFFSET(timeout), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, D },
{ "sources", "Source list", OFFSET(sources), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E },
{ "block", "Block list", OFFSET(block), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E },
{ NULL }
}

Definition at line 125 of file udp.c.

◆ udp_class

const AVClass udp_class
static
Initial value:
= {
.class_name = "udp",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 147 of file udp.c.

◆ udplite_context_class

const AVClass udplite_context_class
static
Initial value:
= {
.class_name = "udplite",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 154 of file udp.c.

◆ ff_udp_protocol

const URLProtocol ff_udp_protocol
Initial value:
= {
.name = "udp",
.url_open = udp_open,
.url_read = udp_read,
.url_write = udp_write,
.url_close = udp_close,
.url_get_file_handle = udp_get_file_handle,
.priv_data_size = sizeof(UDPContext),
.priv_data_class = &udp_class,
}

Definition at line 1115 of file udp.c.

◆ ff_udplite_protocol

const URLProtocol ff_udplite_protocol
Initial value:
= {
.name = "udplite",
.url_open = udplite_open,
.url_read = udp_read,
.url_write = udp_write,
.url_close = udp_close,
.url_get_file_handle = udp_get_file_handle,
.priv_data_size = sizeof(UDPContext),
.priv_data_class = &udplite_context_class,
}

Definition at line 1127 of file udp.c.

URL_PROTOCOL_FLAG_NETWORK
#define URL_PROTOCOL_FLAG_NETWORK
Definition: url.h:34
E
#define E
Definition: udp.c:124
OFFSET
#define OFFSET(x)
Definition: udp.c:122
sources
Note except for filters that can have queued frames and sources
Definition: filter_design.txt:285
udplite_context_class
static const AVClass udplite_context_class
Definition: udp.c:154
AV_OPT_TYPE_INT64
@ AV_OPT_TYPE_INT64
Definition: opt.h:225
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
options
static const AVOption options[]
Definition: udp.c:125
UDPContext
Definition: udp.c:83
udplite_open
static int udplite_open(URLContext *h, const char *uri, int flags)
Definition: udp.c:947
bitrate
int64_t bitrate
Definition: h264_levels.c:131
udp_close
static int udp_close(URLContext *h)
Definition: udp.c:1071
udp_read
static int udp_read(URLContext *h, uint8_t *buf, int size)
Definition: udp.c:957
D
#define D
Definition: udp.c:123
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:224
udp_write
static int udp_write(URLContext *h, const uint8_t *buf, int size)
Definition: udp.c:1021
udp_open
static int udp_open(URLContext *h, const char *uri, int flags)
Definition: udp.c:624
udp_get_file_handle
static int udp_get_file_handle(URLContext *h)
Return the udp file handle for select() usage to wait for several RTP streams at the same time.
Definition: udp.c:456
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:241
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:561
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Definition: opt.h:228
udp_class
static const AVClass udp_class
Definition: udp.c:147