72 char host[1024], path[1024], url[1024], announce_addr[50] =
"";
74 int port = 9875, base_port = 5004, i, pos = 0, same_port = 0, ttl = 255;
78 socklen_t addrlen =
sizeof(localaddr);
87 path,
sizeof(path), s->
url);
92 option_list = strrchr(path,
'?');
96 port = strtol(buf,
NULL, 10);
99 same_port = strtol(buf,
NULL, 10);
102 ttl = strtol(buf,
NULL, 10);
105 av_strlcpy(announce_addr, buf,
sizeof(announce_addr));
109 if (!announce_addr[0]) {
117 if (ai->ai_family == AF_INET) {
119 av_strlcpy(announce_addr,
"224.2.127.254",
sizeof(announce_addr));
120 #if HAVE_STRUCT_SOCKADDR_IN6 121 }
else if (ai->ai_family == AF_INET6) {
125 av_strlcpy(announce_addr,
"ff0e::2:7ffe",
sizeof(announce_addr));
130 "address family\n", host);
177 "?ttl=%d&connect=1", ttl);
187 if (getsockname(udp_fd, (
struct sockaddr*) &localaddr, &addrlen)) {
191 if (localaddr.ss_family != AF_INET
193 && localaddr.ss_family != AF_INET6
206 sap->
ann[pos] = (1 << 5);
207 #if HAVE_STRUCT_SOCKADDR_IN6 208 if (localaddr.ss_family == AF_INET6)
209 sap->
ann[pos] |= 0x10;
215 if (localaddr.ss_family == AF_INET) {
216 memcpy(&sap->
ann[pos], &((
struct sockaddr_in*)&localaddr)->sin_addr,
217 sizeof(
struct in_addr));
218 pos +=
sizeof(
struct in_addr);
219 #if HAVE_STRUCT_SOCKADDR_IN6 221 memcpy(&sap->
ann[pos], &((
struct sockaddr_in6*)&localaddr)->sin6_addr,
222 sizeof(
struct in6_addr));
223 pos +=
sizeof(
struct in6_addr);
228 pos += strlen(&sap->
ann[pos]) + 1;
237 pos += strlen(&sap->
ann[pos]);
263 if (ret < 0 && ret !=
AVERROR(ECONNREFUSED))
274 .priv_data_size =
sizeof(
struct SAPState),
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int64_t start_time_realtime
Start time of the stream in real world time, in microseconds since the Unix epoch (00:00 1st January ...
int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist, URLContext *parent)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
Write size bytes from buf to the resource accessed by h.
#define AVIO_FLAG_WRITE
write-only
void ff_network_close(void)
AVOutputFormat ff_sap_muxer
static int sap_write_packet(AVFormatContext *s, AVPacket *pkt)
int ff_network_init(void)
miscellaneous OS support macros and functions.
AVStream ** streams
A list of all streams in the file.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
char * protocol_whitelist
',' separated list of allowed protocols.
#define AV_LOG_VERBOSE
Detailed information.
int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
Generate an SDP for an RTP session.
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
Attempt to find a specific tag in a URL.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVDictionary * metadata
Metadata that applies to the whole file.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
char * url
input or output URL.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
#define HAVE_STRUCT_SOCKADDR_IN6
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
static int sap_write_close(AVFormatContext *s)
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
int64_t av_gettime(void)
Get the current time in microseconds.
int ff_url_join(char *str, int size, const char *proto, const char *authorization, const char *hostname, int port, const char *fmt,...)
char * av_strdup(const char *s)
Duplicate a string.
static int sap_write_header(AVFormatContext *s)
AVIOContext * pb
I/O context.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point.
int ffurl_close(URLContext *h)
int ff_rtp_chain_mux_open(AVFormatContext **out, AVFormatContext *s, AVStream *st, URLContext *handle, int packet_size, int idx)
void * priv_data
Format private data.
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
char * protocol_blacklist
',' separated list of disallowed protocols.
int max_packet_size
if non zero, the stream is packetized with this max packet size
unbuffered private I/O API
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
This structure stores compressed data.
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
#define AV_NOPTS_VALUE
Undefined timestamp value.
void * av_mallocz_array(size_t nmemb, size_t size)
Allocate a memory block for an array with av_mallocz().