#include "avformat.h"
#include "avio_internal.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 "internal.h"
#include "network.h"
#include "os_support.h"
#include "url.h"
Go to the source code of this file.
Data Structures | |
| struct | UDPContext |
Defines | |
| #define | _BSD_SOURCE |
| #define | HAVE_PTHREAD_CANCEL 0 |
| #define | IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP |
| #define | IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP |
| #define | UDP_TX_BUF_SIZE 32768 |
| #define | UDP_MAX_PKT_SIZE 65536 |
| #define | OFFSET(x) offsetof(UDPContext, x) |
| #define | D AV_OPT_FLAG_DECODING_PARAM |
| #define | E AV_OPT_FLAG_ENCODING_PARAM |
Functions | |
| static void | log_net_error (void *ctx, int level, const char *prefix) |
| static int | udp_set_multicast_ttl (int sockfd, int mcastTTL, struct sockaddr *addr) |
| static int | udp_join_multicast_group (int sockfd, struct sockaddr *addr) |
| static int | udp_leave_multicast_group (int sockfd, struct sockaddr *addr) |
| static struct addrinfo * | udp_resolve_host (const char *hostname, int port, int type, int family, int flags) |
| static int | udp_set_multicast_sources (int sockfd, struct sockaddr *addr, int addr_len, char **sources, int nb_sources, int include) |
| static int | udp_set_url (struct sockaddr_storage *addr, const char *hostname, int port) |
| static int | udp_socket_create (UDPContext *s, struct sockaddr_storage *addr, int *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. | |
| int | ff_udp_get_local_port (URLContext *h) |
| Return the local port used by the UDP connection. | |
| 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. | |
| static int | udp_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_context_class |
| URLProtocol | ff_udp_protocol |
Definition in file udp.c.
| #define HAVE_PTHREAD_CANCEL 0 |
| #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP |
| #define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP |
| #define OFFSET | ( | x | ) | offsetof(UDPContext, x) |
| #define UDP_MAX_PKT_SIZE 65536 |
| #define UDP_TX_BUF_SIZE 32768 |
| int ff_udp_get_local_port | ( | URLContext * | h | ) |
Return the local port used by the UDP connection.
| h | media file context |
Definition at line 420 of file udp.c.
Referenced by ff_rtp_get_local_rtcp_port(), ff_rtp_get_local_rtp_port(), and rtp_open().
| 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
| h | media file context | |
| uri | of the remote server |
Definition at line 381 of file udp.c.
Referenced by ff_rtp_set_remote_url(), and udp_open().
| static void log_net_error | ( | void * | ctx, | |
| int | level, | |||
| const char * | prefix | |||
| ) | [static] |
Definition at line 113 of file udp.c.
Referenced by ff_udp_set_remote_url(), udp_join_multicast_group(), udp_leave_multicast_group(), udp_open(), udp_set_multicast_sources(), udp_set_multicast_ttl(), and udp_socket_create().
| static int udp_close | ( | URLContext * | h | ) | [static] |
| static int udp_get_file_handle | ( | URLContext * | h | ) | [static] |
| static int udp_open | ( | URLContext * | h, | |
| const char * | uri, | |||
| int | flags | |||
| ) | [static] |
| static int udp_port | ( | struct sockaddr_storage * | addr, | |
| int | addr_len | |||
| ) | [static] |
| static int udp_read | ( | URLContext * | h, | |
| uint8_t * | buf, | |||
| int | size | |||
| ) | [static] |
| static struct addrinfo* udp_resolve_host | ( | const char * | hostname, | |
| int | port, | |||
| int | type, | |||
| int | family, | |||
| int | flags | |||
| ) | [static, read] |
Definition at line 200 of file udp.c.
Referenced by udp_set_multicast_sources(), udp_set_url(), and udp_socket_create().
| static int udp_set_url | ( | struct sockaddr_storage * | addr, | |
| const char * | hostname, | |||
| int | port | |||
| ) | [static] |
| static int udp_socket_create | ( | UDPContext * | s, | |
| struct sockaddr_storage * | addr, | |||
| int * | addr_len, | |||
| const char * | localaddr | |||
| ) | [static] |
| static int udp_write | ( | URLContext * | h, | |
| const uint8_t * | buf, | |||
| int | size | |||
| ) | [static] |
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_context_class,
.flags = URL_PROTOCOL_FLAG_NETWORK,
}
Initial value:
{
{"buffer_size", "Socket buffer size in bytes", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, D|E },
{"localport", "Set local port to bind to", OFFSET(local_port), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, D|E },
{"localaddr", "Choose local IP address", OFFSET(local_addr), AV_OPT_TYPE_STRING, {.str = ""}, 0, 0, D|E },
{"pkt_size", "Set size of UDP packets", OFFSET(packet_size), AV_OPT_TYPE_INT, {.i64 = 1472}, 0, INT_MAX, D|E },
{"reuse", "Explicitly allow or disallow reusing UDP sockets", OFFSET(reuse_socket), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, D|E },
{"ttl", "Set the time to live value (for multicast only)", OFFSET(ttl), AV_OPT_TYPE_INT, {.i64 = 16}, 0, INT_MAX, E },
{"connect", "Should connect() be called on socket", OFFSET(is_connected), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, 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_INT, {.i64 = 0}, 0, 1, D },
{"timeout", "In read mode: if no data arrived in more than this time interval, raise error", OFFSET(timeout), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, D },
{NULL}
}
const AVClass udp_context_class [static] |
Initial value:
{
.class_name = "udp",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
}
1.5.8