亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ffserver.c

?? 現在關于h.264的源碼很多
?? C
?? 第 1 頁 / 共 5 頁
字號:
                pstrcpy(pathname, sizeof(pathname), my_program_name);                slash = strrchr(pathname, '/');                if (!slash) {                    slash = pathname;                } else {                    slash++;                }                strcpy(slash, "ffmpeg");                /* This is needed to make relative pathnames work */                chdir(my_program_dir);                signal(SIGPIPE, SIG_DFL);                execvp(pathname, feed->child_argv);                _exit(1);            }        }    }}/* open a listening socket */static int socket_open_listen(struct sockaddr_in *my_addr){    int server_fd, tmp;    server_fd = socket(AF_INET,SOCK_STREAM,0);    if (server_fd < 0) {        perror ("socket");        return -1;    }    tmp = 1;    setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(tmp));    if (bind (server_fd, (struct sockaddr *) my_addr, sizeof (*my_addr)) < 0) {        char bindmsg[32];        snprintf(bindmsg, sizeof(bindmsg), "bind(port %d)", ntohs(my_addr->sin_port));        perror (bindmsg);        close(server_fd);        return -1;    }    if (listen (server_fd, 5) < 0) {        perror ("listen");        close(server_fd);        return -1;    }    fcntl(server_fd, F_SETFL, O_NONBLOCK);    return server_fd;}/* start all multicast streams */static void start_multicast(void){    FFStream *stream;    char session_id[32];    HTTPContext *rtp_c;    struct sockaddr_in dest_addr;    int default_port, stream_index;    default_port = 6000;    for(stream = first_stream; stream != NULL; stream = stream->next) {        if (stream->is_multicast) {            /* open the RTP connection */            snprintf(session_id, sizeof(session_id),                     "%08x%08x", (int)random(), (int)random());            /* choose a port if none given */            if (stream->multicast_port == 0) {                stream->multicast_port = default_port;                default_port += 100;            }            dest_addr.sin_family = AF_INET;            dest_addr.sin_addr = stream->multicast_ip;            dest_addr.sin_port = htons(stream->multicast_port);            rtp_c = rtp_new_connection(&dest_addr, stream, session_id,                                       RTSP_PROTOCOL_RTP_UDP_MULTICAST);            if (!rtp_c) {                continue;            }            if (open_input_stream(rtp_c, "") < 0) {                fprintf(stderr, "Could not open input stream for stream '%s'\n",                        stream->filename);                continue;            }            /* open each RTP stream */            for(stream_index = 0; stream_index < stream->nb_streams;                stream_index++) {                dest_addr.sin_port = htons(stream->multicast_port +                                           2 * stream_index);                if (rtp_new_av_stream(rtp_c, stream_index, &dest_addr, NULL) < 0) {                    fprintf(stderr, "Could not open output stream '%s/streamid=%d'\n",                            stream->filename, stream_index);                    exit(1);                }            }            /* change state to send data */            rtp_c->state = HTTPSTATE_SEND_DATA;        }    }}/* main loop of the http server */static int http_server(void){    int server_fd, ret, rtsp_server_fd, delay, delay1;    struct pollfd poll_table[HTTP_MAX_CONNECTIONS + 2], *poll_entry;    HTTPContext *c, *c_next;    server_fd = socket_open_listen(&my_http_addr);    if (server_fd < 0)        return -1;    rtsp_server_fd = socket_open_listen(&my_rtsp_addr);    if (rtsp_server_fd < 0)        return -1;    http_log("ffserver started.\n");    start_children(first_feed);    first_http_ctx = NULL;    nb_connections = 0;    start_multicast();    for(;;) {        poll_entry = poll_table;        poll_entry->fd = server_fd;        poll_entry->events = POLLIN;        poll_entry++;        poll_entry->fd = rtsp_server_fd;        poll_entry->events = POLLIN;        poll_entry++;        /* wait for events on each HTTP handle */        c = first_http_ctx;        delay = 1000;        while (c != NULL) {            int fd;            fd = c->fd;            switch(c->state) {            case HTTPSTATE_SEND_HEADER:            case RTSPSTATE_SEND_REPLY:            case RTSPSTATE_SEND_PACKET:                c->poll_entry = poll_entry;                poll_entry->fd = fd;                poll_entry->events = POLLOUT;                poll_entry++;                break;            case HTTPSTATE_SEND_DATA_HEADER:            case HTTPSTATE_SEND_DATA:            case HTTPSTATE_SEND_DATA_TRAILER:                if (!c->is_packetized) {                    /* for TCP, we output as much as we can (may need to put a limit) */                    c->poll_entry = poll_entry;                    poll_entry->fd = fd;                    poll_entry->events = POLLOUT;                    poll_entry++;                } else {                    /* when ffserver is doing the timing, we work by                       looking at which packet need to be sent every                       10 ms */                    delay1 = 10; /* one tick wait XXX: 10 ms assumed */                    if (delay1 < delay)                        delay = delay1;                }                break;            case HTTPSTATE_WAIT_REQUEST:            case HTTPSTATE_RECEIVE_DATA:            case HTTPSTATE_WAIT_FEED:            case RTSPSTATE_WAIT_REQUEST:                /* need to catch errors */                c->poll_entry = poll_entry;                poll_entry->fd = fd;                poll_entry->events = POLLIN;/* Maybe this will work */                poll_entry++;                break;            default:                c->poll_entry = NULL;                break;            }            c = c->next;        }        /* wait for an event on one connection. We poll at least every           second to handle timeouts */        do {            ret = poll(poll_table, poll_entry - poll_table, delay);            if (ret < 0 && errno != EAGAIN && errno != EINTR)                return -1;        } while (ret <= 0);        cur_time = gettime_ms();        if (need_to_start_children) {            need_to_start_children = 0;            start_children(first_feed);        }        /* now handle the events */        for(c = first_http_ctx; c != NULL; c = c_next) {            c_next = c->next;            if (handle_connection(c) < 0) {                /* close and free the connection */                log_connection(c);                close_connection(c);            }        }        poll_entry = poll_table;        /* new HTTP connection request ? */        if (poll_entry->revents & POLLIN) {            new_connection(server_fd, 0);        }        poll_entry++;        /* new RTSP connection request ? */        if (poll_entry->revents & POLLIN) {            new_connection(rtsp_server_fd, 1);        }    }}/* start waiting for a new HTTP/RTSP request */static void start_wait_request(HTTPContext *c, int is_rtsp){    c->buffer_ptr = c->buffer;    c->buffer_end = c->buffer + c->buffer_size - 1; /* leave room for '\0' */    if (is_rtsp) {        c->timeout = cur_time + RTSP_REQUEST_TIMEOUT;        c->state = RTSPSTATE_WAIT_REQUEST;    } else {        c->timeout = cur_time + HTTP_REQUEST_TIMEOUT;        c->state = HTTPSTATE_WAIT_REQUEST;    }}static void new_connection(int server_fd, int is_rtsp){    struct sockaddr_in from_addr;    int fd, len;    HTTPContext *c = NULL;    len = sizeof(from_addr);    fd = accept(server_fd, (struct sockaddr *)&from_addr,                &len);    if (fd < 0)        return;    fcntl(fd, F_SETFL, O_NONBLOCK);    /* XXX: should output a warning page when coming       close to the connection limit */    if (nb_connections >= nb_max_connections)        goto fail;    /* add a new connection */    c = av_mallocz(sizeof(HTTPContext));    if (!c)        goto fail;    c->fd = fd;    c->poll_entry = NULL;    c->from_addr = from_addr;    c->buffer_size = IOBUFFER_INIT_SIZE;    c->buffer = av_malloc(c->buffer_size);    if (!c->buffer)        goto fail;    c->next = first_http_ctx;    first_http_ctx = c;    nb_connections++;    start_wait_request(c, is_rtsp);    return; fail:    if (c) {        av_free(c->buffer);        av_free(c);    }    close(fd);}static void close_connection(HTTPContext *c){    HTTPContext **cp, *c1;    int i, nb_streams;    AVFormatContext *ctx;    URLContext *h;    AVStream *st;    /* remove connection from list */    cp = &first_http_ctx;    while ((*cp) != NULL) {        c1 = *cp;        if (c1 == c) {            *cp = c->next;        } else {            cp = &c1->next;        }    }    /* remove references, if any (XXX: do it faster) */    for(c1 = first_http_ctx; c1 != NULL; c1 = c1->next) {        if (c1->rtsp_c == c)            c1->rtsp_c = NULL;    }    /* remove connection associated resources */    if (c->fd >= 0)        close(c->fd);    if (c->fmt_in) {        /* close each frame parser */        for(i=0;i<c->fmt_in->nb_streams;i++) {            st = c->fmt_in->streams[i];            if (st->codec->codec) {                avcodec_close(st->codec);            }        }        av_close_input_file(c->fmt_in);    }    /* free RTP output streams if any */    nb_streams = 0;    if (c->stream)        nb_streams = c->stream->nb_streams;    for(i=0;i<nb_streams;i++) {        ctx = c->rtp_ctx[i];        if (ctx) {            av_write_trailer(ctx);            av_free(ctx);        }        h = c->rtp_handles[i];        if (h) {            url_close(h);        }    }    ctx = &c->fmt_ctx;    if (!c->last_packet_sent) {        if (ctx->oformat) {            /* prepare header */            if (url_open_dyn_buf(&ctx->pb) >= 0) {                av_write_trailer(ctx);                url_close_dyn_buf(&ctx->pb, &c->pb_buffer);            }        }    }    for(i=0; i<ctx->nb_streams; i++)        av_free(ctx->streams[i]) ;    if (c->stream && !c->post && c->stream->stream_type == STREAM_TYPE_LIVE)        current_bandwidth -= c->stream->bandwidth;    av_freep(&c->pb_buffer);    av_freep(&c->packet_buffer);    av_free(c->buffer);    av_free(c);    nb_connections--;}static int handle_connection(HTTPContext *c){    int len, ret;    switch(c->state) {    case HTTPSTATE_WAIT_REQUEST:    case RTSPSTATE_WAIT_REQUEST:        /* timeout ? */        if ((c->timeout - cur_time) < 0)            return -1;        if (c->poll_entry->revents & (POLLERR | POLLHUP))            return -1;        /* no need to read if no events */        if (!(c->poll_entry->revents & POLLIN))            return 0;        /* read the data */    read_loop:        len = read(c->fd, c->buffer_ptr, 1);        if (len < 0) {            if (errno != EAGAIN && errno != EINTR)                return -1;        } else if (len == 0) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩电影| 午夜av一区二区三区| 中文字幕在线视频一区| 视频在线在亚洲| 91片在线免费观看| 久久久午夜精品| 日本aⅴ免费视频一区二区三区| 久久久.com| www.日韩av| 26uuu久久天堂性欧美| 亚洲电影一级黄| 色综合久久88色综合天天6| 日韩视频免费观看高清完整版 | 在线观看日韩高清av| 99re成人精品视频| 国产日本亚洲高清| 精品一区二区三区的国产在线播放| 麻豆freexxxx性91精品| 欧美日韩国产另类不卡| 玉米视频成人免费看| 91视频在线观看免费| 国产精品人成在线观看免费| 精品在线观看视频| 日韩一区二区三区四区| 日韩激情中文字幕| 在线不卡中文字幕| 天堂一区二区在线| 884aa四虎影成人精品一区| 成人免费毛片嘿嘿连载视频| 久久午夜羞羞影院免费观看| 中文字幕av不卡| 国产成人精品免费看| 国产三级欧美三级| 国产成人av电影在线| 在线免费观看成人短视频| 日韩午夜在线观看视频| 国产精品色一区二区三区| 高清国产一区二区| 欧美精品电影在线播放| 日韩不卡一区二区| 日韩视频在线观看一区二区| 久久国产精品第一页| 精品福利视频一区二区三区| 国产精品一区久久久久| 在线视频观看一区| 亚洲福利视频三区| 日韩一二在线观看| 国产成人综合亚洲网站| 亚洲欧美一区二区视频| 欧美日韩亚洲综合在线| 国产精品丝袜久久久久久app| 一二三区精品视频| 国产精品88888| 最新成人av在线| 91.xcao| 韩国成人在线视频| 日韩毛片一二三区| 欧美美女一区二区| 国产精品18久久久久| 亚洲欧美色图小说| 3751色影院一区二区三区| 精品一区二区免费视频| 中文字幕中文字幕中文字幕亚洲无线| 久久精品国产亚洲高清剧情介绍| 色婷婷国产精品| 亚洲欧洲成人精品av97| 在线免费视频一区二区| 久久99精品国产.久久久久| 欧美激情一区三区| 欧美精品一二三| 国产成人久久精品77777最新版本| 91精品免费观看| 不卡在线视频中文字幕| 五月激情综合网| 综合亚洲深深色噜噜狠狠网站| 国产精品一区二区你懂的| 精品不卡在线视频| 在线免费视频一区二区| 国产传媒久久文化传媒| 丝袜脚交一区二区| 69av一区二区三区| 日韩av一级片| 亚洲日本青草视频在线怡红院| 成人av资源网站| 久久国产精品免费| 亚洲成人av一区二区三区| 欧美日韩国产成人在线免费| 国产成人在线视频网站| 色综合天天综合| 国产精品白丝av| 麻豆国产欧美一区二区三区| 精品日韩一区二区| 欧美日韩中文字幕精品| 99久久综合色| 国产成人av一区二区三区在线 | 欧美一区二区三区视频在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 成a人片国产精品| 精品亚洲国内自在自线福利| 久久久久国产精品厨房| 成人免费高清在线观看| 免费黄网站欧美| 天堂在线一区二区| 亚洲第一福利一区| 亚洲一区自拍偷拍| 亚洲乱码一区二区三区在线观看| 欧美三级日韩三级| 欧美亚男人的天堂| 蜜桃视频免费观看一区| 国产欧美日韩精品在线| 久久久不卡网国产精品一区| 精品欧美黑人一区二区三区| 国产超碰在线一区| 国产成人亚洲综合色影视| 国产一区二区看久久| 亚洲美女屁股眼交| 亚洲欧美一区二区三区国产精品| 91精品国产一区二区三区| 国产伦精品一区二区三区在线观看| 亚洲欧美色一区| 一区二区三区日韩精品| 一区二区视频免费在线观看| 亚洲免费观看高清在线观看| 亚洲视频一区二区在线观看| 日韩美女视频一区二区| 一区二区三区中文免费| 亚洲午夜精品17c| 日韩专区一卡二卡| 激情综合一区二区三区| 国产成人精品免费视频网站| 日本视频中文字幕一区二区三区 | 欧美日韩成人在线| 欧美午夜精品一区二区蜜桃| 欧美日韩国产大片| 亚洲精品一线二线三线| 国产精品美女一区二区在线观看| 欧美一区二区三区免费视频| 2023国产精品| 国产精品久久久久久久第一福利| 日韩精品一区二区三区中文精品| 91在线视频18| 日韩一区二区三区av| 国产校园另类小说区| 91精品国产免费| 久久精品欧美一区二区三区不卡| 911精品国产一区二区在线| 色哟哟精品一区| 日韩一区二区三区在线视频| 欧美午夜不卡在线观看免费| 日韩欧美综合在线| 国产精品久久久久一区二区三区| 日韩欧美激情在线| 成人免费一区二区三区视频| 日本中文在线一区| 成人蜜臀av电影| 日韩一区二区精品葵司在线| 国产精品美女久久久久av爽李琼| 久久看人人爽人人| 亚洲成人综合在线| 粉嫩av一区二区三区粉嫩| 欧美日韩精品一区二区天天拍小说| 91激情在线视频| 国产日韩精品一区二区三区| 亚洲一区二区三区四区的| 国产成人av一区二区三区在线观看| 国产成人激情av| 欧美久久高跟鞋激| 在线播放中文字幕一区| 国产精品欧美极品| 91蝌蚪porny| 国产亲近乱来精品视频| 国产欧美一区二区三区在线看蜜臀 | 亚洲精品一区二区三区精华液| 欧美一区二区黄色| 亚洲激情五月婷婷| 成人高清av在线| 国产午夜亚洲精品理论片色戒| 国产日韩精品一区二区三区在线| 国产精品日产欧美久久久久| 久久成人久久鬼色| 777奇米成人网| 亚洲成a人片在线不卡一二三区| 午夜精品一区二区三区免费视频| 日韩成人免费电影| 精品在线亚洲视频| 欧美一区二区三区人| 久久久久久久久久久久久久久99| 久久久精品影视| 麻豆精品精品国产自在97香蕉| 国产成人日日夜夜| 色吧成人激情小说| 亚洲人成精品久久久久久| 成人高清视频在线| 国产精品久久福利| 成人激情小说乱人伦| 中文字幕电影一区| 国产成a人无v码亚洲福利| 欧美视频精品在线观看| 一区二区国产盗摄色噜噜| 色噜噜偷拍精品综合在线|