36#include <librist/librist.h>
37#include <librist/version.h>
40#define MAX_PAYLOAD_SIZE (10000-28)
41#define FIFO_SIZE_DEFAULT 8192
62#define D AV_OPT_FLAG_DECODING_PARAM
63#define E AV_OPT_FLAG_ENCODING_PARAM
64#define OFFSET(x) offsetof(RISTContext, x)
69 {
"advanced",
NULL, 0,
AV_OPT_TYPE_CONST, {.i64=RIST_PROFILE_ADVANCED}, 0, 0, .flags =
D|
E, .unit =
"profile" },
70 {
"buffer_size",
"set buffer_size in ms",
OFFSET(buffer_size),
AV_OPT_TYPE_INT, {.i64=0}, 0, 30000, .flags =
D|
E },
72 {
"overrun_nonfatal",
"survive in case of receiving fifo buffer overrun",
OFFSET(overrun_nonfatal),
AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1,
D },
74 {
"log_level",
"set loglevel",
OFFSET(log_level),
AV_OPT_TYPE_INT, {.i64=RIST_LOG_INFO}, -1, INT_MAX, .flags =
D|
E },
90static int log_cb(
void *
arg,
enum rist_log_level log_level,
const char *msg)
117 ret = rist_destroy(
s->ctx);
126 struct rist_logging_settings *logging_settings = &
s->logging_settings;
127 struct rist_peer_config *peer_config = &
s->peer_config;
133 s->logging_settings = (
struct rist_logging_settings)LOGGING_SETTINGS_INITIALIZER;
134 ret = rist_logging_set(&logging_settings,
s->log_level,
log_cb,
h,
NULL,
NULL);
139 h->max_packet_size =
s->packet_size;
140 ret = rist_sender_create(&
s->ctx,
s->profile, 0, logging_settings);
147 ret = rist_receiver_create(&
s->ctx,
s->profile, logging_settings);
152 ret = rist_peer_config_defaults_set(peer_config);
156 ret = rist_parse_address2(uri, &peer_config);
161 ret = rist_receiver_set_output_fifo_size(
s->ctx,
s->fifo_size);
166 if (((
s->encryption == 128 ||
s->encryption == 256) && !
s->secret) ||
167 ((peer_config->key_size == 128 || peer_config->key_size == 256) && !peer_config->secret[0])) {
173 if (
s->secret && peer_config->secret[0] == 0)
174 av_strlcpy(peer_config->secret,
s->secret, RIST_MAX_STRING_SHORT);
176 if (
s->secret && (
s->encryption == 128 ||
s->encryption == 256))
177 peer_config->key_size =
s->encryption;
179 if (
s->buffer_size) {
180 peer_config->recovery_length_min =
s->buffer_size;
181 peer_config->recovery_length_max =
s->buffer_size;
184 ret = rist_peer_create(
s->ctx, &
s->peer, &
s->peer_config);
188 ret = rist_start(
s->ctx);
205 struct rist_data_block *data_block;
206 ret = rist_receiver_data_read2(
s->ctx, &data_block,
POLLING_TIME);
215 rist_receiver_data_block_free2(&data_block);
219 if (data_block->flags & RIST_DATA_FLAGS_OVERFLOW) {
220 if (!
s->overrun_nonfatal) {
222 "To avoid, increase fifo_size option. "
223 "To survive in such case, use overrun_nonfatal option\n");
230 memcpy(buf, data_block->payload,
size);
232 rist_receiver_data_block_free2(&data_block);
239 struct rist_data_block data_block = { 0 };
242 data_block.ts_ntp = 0;
243 data_block.payload = buf;
244 data_block.payload_len =
size;
246 ret = rist_sender_data_write(
s->ctx, &data_block);
254 .class_name =
"librist",
simple assert() macros that are a bit more flexible than ISO C assert().
#define AVIO_FLAG_READ
read-only
#define AVIO_FLAG_WRITE
write-only
#define AVIO_FLAG_READ_WRITE
read-write pseudo flag
#define flags(name, subs,...)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
#define AVERROR_EXTERNAL
Generic error in an external library.
#define AV_LOG_QUIET
Print no output.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
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 LIBAVUTIL_VERSION_INT
static void log_cb(cmsContext ctx, cmsUInt32Number error, const char *str)
static int librist_open(URLContext *h, const char *uri, int flags)
static const AVOption librist_options[]
const URLProtocol ff_librist_protocol
static int risterr2ret(int err)
#define FIFO_SIZE_DEFAULT
static int librist_read(URLContext *h, uint8_t *buf, int size)
static int librist_write(URLContext *h, const uint8_t *buf, int size)
static const AVClass librist_class
static int log_cb(void *arg, enum rist_log_level log_level, const char *msg)
static int librist_close(URLContext *h)
miscellaneous OS support macros and functions.
Describe the class of an AVClass context structure.
struct rist_peer_config peer_config
struct rist_logging_settings logging_settings
unbuffered private I/O API
#define URL_PROTOCOL_FLAG_NETWORK