This example will serve a file without decoding or demuxing it over http.
This example will serve a file without decoding or demuxing it over http.Multiple clients can connect and will receive the same file.
#include <unistd.h>
{
uint8_t buf[1024];
int ret, n, reply_code;
uint8_t *resource = NULL;
if (resource && strlen(resource))
break;
}
if (ret < 0)
goto end;
if (resource && resource[0] == '/' && !strcmp((resource + 1), in_uri)) {
reply_code = 200;
} else {
}
goto end;
}
if (ret < 0)
goto end;
fprintf(stderr, "Handshake performed.\n");
if (reply_code != 200)
goto end;
fprintf(stderr, "Opening input file.\n");
goto end;
}
for(;;) {
if (n < 0) {
break;
break;
}
}
end:
fprintf(stderr, "Flushing client\n");
fprintf(stderr, "Closing client\n");
fprintf(stderr, "Closing input\n");
}
int main(
int argc,
char **argv)
{
const char *in_uri, *out_uri;
int ret, pid;
if (argc < 3) {
printf("usage: %s input http://hostname[:port]\n"
"API example program to serve http to multiple clients.\n"
"\n", argv[0]);
return 1;
}
in_uri = argv[1];
out_uri = argv[2];
if ((ret =
av_dict_set(&options,
"listen",
"2", 0)) < 0) {
fprintf(stderr,
"Failed to set listen mode for server: %s\n",
av_err2str(ret));
return ret;
}
fprintf(stderr,
"Failed to open server: %s\n",
av_err2str(ret));
return ret;
}
fprintf(stderr, "Entering main loop.\n");
for(;;) {
goto end;
fprintf(stderr, "Accepted client, forking process.\n");
pid = fork();
if (pid < 0) {
perror("Fork failed");
goto end;
}
if (pid == 0) {
fprintf(stderr, "In child.\n");
exit(0);
}
if (pid > 0)
}
end:
fprintf(stderr,
"Some errors occurred: %s\n",
av_err2str(ret));
return 1;
}
return 0;
}
int avio_handshake(AVIOContext *c)
Perform one step of the protocol handshake to accept a new client.
#define AVIO_FLAG_READ
read-only
#define AVIO_FLAG_WRITE
write-only
int avio_accept(AVIOContext *s, AVIOContext **c)
Accept and allocate a client context on a server context.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
void avio_flush(AVIOContext *s)
Force flushing of buffered data.
int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
int avformat_network_init(void)
Do global initialization of network libraries.
struct AVDictionary AVDictionary
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define AVERROR_EOF
End of file.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
#define AVERROR_HTTP_NOT_FOUND
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_log_set_level(int level)
Set the log level.
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level.
void av_freep(void *ptr)
Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family,...
int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
int main(int argc, char **argv)
static void process_client(AVIOContext *client, const char *in_uri)