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