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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ffserver.c

?? 現(xiàn)在關(guān)于h.264的源碼很多
?? C
?? 第 1 頁 / 共 5 頁
字號:
    get_word(protocol, sizeof(protocol), (const char **)&p);    if (strcmp(protocol, "HTTP/1.0") && strcmp(protocol, "HTTP/1.1"))        return -1;    pstrcpy(c->protocol, sizeof(c->protocol), protocol);    if (ffserver_debug)        http_log("New connection: %s %s\n", cmd, url);    /* find the filename and the optional info string in the request */    p = url;    if (*p == '/')        p++;    filename = p;    p = strchr(p, '?');    if (p) {        pstrcpy(info, sizeof(info), p);        *p = '\0';    } else {        info[0] = '\0';    }    for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) {        if (strncasecmp(p, "User-Agent:", 11) == 0) {            useragent = p + 11;            if (*useragent && *useragent != '\n' && isspace(*useragent))                useragent++;            break;        }        p = strchr(p, '\n');        if (!p)            break;        p++;    }    redir_type = REDIR_NONE;    if (match_ext(filename, "asx")) {        redir_type = REDIR_ASX;        filename[strlen(filename)-1] = 'f';    } else if (match_ext(filename, "asf") &&        (!useragent || strncasecmp(useragent, "NSPlayer", 8) != 0)) {        /* if this isn't WMP or lookalike, return the redirector file */        redir_type = REDIR_ASF;    } else if (match_ext(filename, "rpm,ram")) {        redir_type = REDIR_RAM;        strcpy(filename + strlen(filename)-2, "m");    } else if (match_ext(filename, "rtsp")) {        redir_type = REDIR_RTSP;        compute_real_filename(filename, sizeof(url) - 1);    } else if (match_ext(filename, "sdp")) {        redir_type = REDIR_SDP;        compute_real_filename(filename, sizeof(url) - 1);    }    stream = first_stream;    while (stream != NULL) {        if (!strcmp(stream->filename, filename) && validate_acl(stream, c))            break;        stream = stream->next;    }    if (stream == NULL) {        snprintf(msg, sizeof(msg), "File '%s' not found", url);        goto send_error;    }    c->stream = stream;    memcpy(c->feed_streams, stream->feed_streams, sizeof(c->feed_streams));    memset(c->switch_feed_streams, -1, sizeof(c->switch_feed_streams));    if (stream->stream_type == STREAM_TYPE_REDIRECT) {        c->http_error = 301;        q = c->buffer;        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 301 Moved\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Location: %s\r\n", stream->feed_filename);        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: text/html\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<html><head><title>Moved</title></head><body>\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "You should be <a href=\"%s\">redirected</a>.\r\n", stream->feed_filename);        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "</body></html>\r\n");        /* prepare output buffer */        c->buffer_ptr = c->buffer;        c->buffer_end = q;        c->state = HTTPSTATE_SEND_HEADER;        return 0;    }    /* If this is WMP, get the rate information */    if (extract_rates(ratebuf, sizeof(ratebuf), c->buffer)) {        if (modify_current_stream(c, ratebuf)) {            for (i = 0; i < sizeof(c->feed_streams) / sizeof(c->feed_streams[0]); i++) {                if (c->switch_feed_streams[i] >= 0)                    do_switch_stream(c, i);            }        }    }    if (c->post == 0 && stream->stream_type == STREAM_TYPE_LIVE) {        current_bandwidth += stream->bandwidth;    }    if (c->post == 0 && max_bandwidth < current_bandwidth) {        c->http_error = 200;        q = c->buffer;        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 Server too busy\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: text/html\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<html><head><title>Too busy</title></head><body>\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<p>The server is too busy to serve your request at this time.</p>\r\n");        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<p>The bandwidth being served (including your stream) is %dkbit/sec, and this exceeds the limit of %dkbit/sec.</p>\r\n",            current_bandwidth, max_bandwidth);        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "</body></html>\r\n");        /* prepare output buffer */        c->buffer_ptr = c->buffer;        c->buffer_end = q;        c->state = HTTPSTATE_SEND_HEADER;        return 0;    }    if (redir_type != REDIR_NONE) {        char *hostinfo = 0;        for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) {            if (strncasecmp(p, "Host:", 5) == 0) {                hostinfo = p + 5;                break;            }            p = strchr(p, '\n');            if (!p)                break;            p++;        }        if (hostinfo) {            char *eoh;            char hostbuf[260];            while (isspace(*hostinfo))                hostinfo++;            eoh = strchr(hostinfo, '\n');            if (eoh) {                if (eoh[-1] == '\r')                    eoh--;                if (eoh - hostinfo < sizeof(hostbuf) - 1) {                    memcpy(hostbuf, hostinfo, eoh - hostinfo);                    hostbuf[eoh - hostinfo] = 0;                    c->http_error = 200;                    q = c->buffer;                    switch(redir_type) {                    case REDIR_ASX:                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 ASX Follows\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: video/x-ms-asf\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<ASX Version=\"3\">\r\n");                        //q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<!-- Autogenerated by ffserver -->\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<ENTRY><REF HREF=\"http://%s/%s%s\"/></ENTRY>\r\n",                                hostbuf, filename, info);                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "</ASX>\r\n");                        break;                    case REDIR_RAM:                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 RAM Follows\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: audio/x-pn-realaudio\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "# Autogenerated by ffserver\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "http://%s/%s%s\r\n",                                hostbuf, filename, info);                        break;                    case REDIR_ASF:                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 ASF Redirect follows\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: video/x-ms-asf\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "[Reference]\r\n");                        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Ref1=http://%s/%s%s\r\n",                                hostbuf, filename, info);                        break;                    case REDIR_RTSP:                        {                            char hostname[256], *p;                            /* extract only hostname */                            pstrcpy(hostname, sizeof(hostname), hostbuf);                            p = strrchr(hostname, ':');                            if (p)                                *p = '\0';                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 RTSP Redirect follows\r\n");                            /* XXX: incorrect mime type ? */                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: application/x-rtsp\r\n");                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "rtsp://%s:%d/%s\r\n",                                         hostname, ntohs(my_rtsp_addr.sin_port),                                         filename);                        }                        break;                    case REDIR_SDP:                        {                            uint8_t *sdp_data;                            int sdp_data_size, len;                            struct sockaddr_in my_addr;                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 OK\r\n");                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: application/sdp\r\n");                            q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");                            len = sizeof(my_addr);                            getsockname(c->fd, (struct sockaddr *)&my_addr, &len);                            /* XXX: should use a dynamic buffer */                            sdp_data_size = prepare_sdp_description(stream,                                                                    &sdp_data,                                                                    my_addr.sin_addr);                            if (sdp_data_size > 0) {                                memcpy(q, sdp_data, sdp_data_size);                                q += sdp_data_size;                                *q = '\0';                                av_free(sdp_data);                            }                        }                        break;                    default:                        av_abort();                        break;                    }                    /* prepare output buffer */                    c->buffer_ptr = c->buffer;                    c->buffer_end = q;                    c->state = HTTPSTATE_SEND_HEADER;                    return 0;                }            }        }        snprintf(msg, sizeof(msg), "ASX/RAM file not handled");        goto send_error;    }    stream->conns_served++;    /* XXX: add there authenticate and IP match */    if (c->post) {        /* if post, it means a feed is being sent */        if (!stream->is_feed) {            /* However it might be a status report from WMP! Lets log the data             * as it might come in handy one day             */            char *logline = 0;            int client_id = 0;            for (p = c->buffer; *p && *p != '\r' && *p != '\n'; ) {                if (strncasecmp(p, "Pragma: log-line=", 17) == 0) {                    logline = p;                    break;                }                if (strncasecmp(p, "Pragma: client-id=", 18) == 0) {                    client_id = strtol(p + 18, 0, 10);                }                p = strchr(p, '\n');                if (!p)                    break;                p++;            }            if (logline) {                char *eol = strchr(logline, '\n');                logline += 17;                if (eol) {                    if (eol[-1] == '\r')                        eol--;                    http_log("%.*s\n", (int) (eol - logline), logline);                    c->suppress_log = 1;                }            }#ifdef DEBUG_WMP            http_log("\nGot request:\n%s\n", c->buffer);#endif            if (client_id && extract_rates(ratebuf, sizeof(ratebuf), c->buffer)) {                HTTPContext *wmpc;                /* Now we have to find the client_id */                for (wmpc = first_http_ctx; wmpc; wmpc = wmpc->next) {                    if (wmpc->wmp_client_id == client_id)                        break;                }                if (wmpc) {                    if (modify_current_stream(wmpc, ratebuf)) {                        wmpc->switch_pending = 1;                    }                }            }            snprintf(msg, sizeof(msg), "POST command not handled");            c->stream = 0;            goto send_error;        }        if (http_start_receive_data(c) < 0) {            snprintf(msg, sizeof(msg), "could not open feed");            goto send_error;        }        c->http_error = 0;        c->state = HTTPSTATE_RECEIVE_DATA;        return 0;    }#ifdef DEBUG_WMP    if (strcmp(stream->filename + strlen(stream->filename) - 4, ".asf") == 0) {        http_log("\nGot request:\n%s\n", c->buffer);    }#endif    if (c->stream->stream_type == STREAM_TYPE_STATUS)        goto send_stats;    /* open input stream */    if (open_input_stream(c, info) < 0) {        snprintf(msg, sizeof(msg), "Input stream corresponding to '%s' not found", url);        goto send_error;    }    /* prepare http header */    q = c->buffer;    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 OK\r\n");    mime_type = c->stream->fmt->mime_type;    if (!mime_type)        mime_type = "application/x-octet_stream";    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Pragma: no-cache\r\n");    /* for asf, we need extra headers */    if (!strcmp(c->stream->fmt->name,"asf_stream")) {        /* Need to allocate a client id */        c->wmp_client_id = random() & 0x7fffffff;        q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Server: Cougar 4.1.0.3923\r\nCache-Control: no-cache\r\nPragma: client-id=%d\r\nPragma: features=\"broadcast\"\r\n", c->wmp_client_id);    }    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-Type: %s\r\n", mime_type);    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");    /* prepare output buffer */    c->http_error = 0;    c->buffer_ptr = c->buffer;    c->buffer_end = q;    c->state = HTTPSTATE_SEND_HEADER;    return 0; send_error:    c->http_error = 404;    q = c->buffer;    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 404 Not Found\r\n");    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "Content-type: %s\r\n", "text/html");    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "\r\n");    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<HTML>\n");    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<HEAD><TITLE>404 Not Found</TITLE></HEAD>\n");    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "<BODY>%s</BODY>\n", msg);    q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "</HTML>\n");    /* prepare output buffer */    c->buffer_ptr = c->buffer;    c->buffer_end = q;    c->state = HTTPSTATE_SEND_HEADER;    return 0; send_stats:    compute_stats(c);    c->http_error = 200; /* horrible : we use this value to avoid                            going to the send data state */    c->state = HTTPSTATE_SEND_HEADER;    return 0;}static void fmt_bytecount(ByteIOContext *pb, int64_t count){    static const char *suffix = " kMGTP";    const char *s;    for (s = suffix; count >= 100000 && s[1]; count /= 1000, s++) {    }    url_fprintf(pb, "%"PRId64"%c", count, *s);}static void compute_stats(HTTPContext *c){    HTTPContext *c1;    FFStream *stream;    char *p;    time_t ti;    int i, len;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精久久久久久久久久久| 91亚洲永久精品| 亚洲天堂2016| 69堂亚洲精品首页| 波多野结衣中文字幕一区二区三区| 亚洲激情av在线| 久久综合九色综合欧美亚洲| 色噜噜久久综合| 国产精品资源网| 偷拍与自拍一区| 最新不卡av在线| 久久综合久久鬼色中文字| 欧美视频在线播放| 成人午夜电影久久影院| 日本不卡视频一二三区| 亚洲欧美一区二区不卡| 久久日一线二线三线suv| 欧美日韩视频不卡| a4yy欧美一区二区三区| 国产制服丝袜一区| 丝瓜av网站精品一区二区| ●精品国产综合乱码久久久久| 欧美tk—视频vk| 欧美群妇大交群中文字幕| 99久久精品费精品国产一区二区| 极品少妇xxxx精品少妇偷拍| 亚洲成人免费在线观看| 亚洲免费三区一区二区| 中文字幕精品一区二区精品绿巨人| 欧美一区二区三区爱爱| 欧美日韩免费在线视频| 色域天天综合网| 成人爽a毛片一区二区免费| 韩国v欧美v亚洲v日本v| 久久精品国产免费| 免费在线观看成人| 日本va欧美va精品发布| 亚洲第一主播视频| 亚洲成人免费视频| 亚洲永久免费视频| 亚洲曰韩产成在线| 亚洲成人在线网站| 亚洲国产视频在线| 亚洲va天堂va国产va久| 亚洲一二三区视频在线观看| 亚洲老司机在线| 伊人夜夜躁av伊人久久| 一区二区理论电影在线观看| 亚洲精品国产a| 夜夜嗨av一区二区三区| 夜夜操天天操亚洲| 首页国产丝袜综合| 91免费看片在线观看| 成人高清免费观看| jlzzjlzz欧美大全| 91国偷自产一区二区使用方法| 91麻豆视频网站| 在线看国产日韩| 在线观看国产一区二区| 欧美日韩高清一区| 日韩欧美一区二区免费| 久久久亚洲精华液精华液精华液| 久久色视频免费观看| 中文字幕乱码久久午夜不卡 | 99r国产精品| 色狠狠综合天天综合综合| 在线精品亚洲一区二区不卡| 欧美日韩高清影院| 精品国产乱码久久久久久浪潮| 2022国产精品视频| 国产精品妹子av| 亚洲综合999| 久久97超碰国产精品超碰| 国产不卡一区视频| 色欧美88888久久久久久影院| 欧美三级韩国三级日本一级| 日韩你懂的电影在线观看| 久久奇米777| 亚洲制服丝袜av| 精品一区二区影视| eeuss鲁片一区二区三区在线看| 在线观看视频91| 精品区一区二区| 自拍偷自拍亚洲精品播放| 亚洲成人激情社区| 国产精品一区二区在线观看网站| 91在线观看一区二区| 欧美视频一区二区三区| 精品成人免费观看| 亚洲精品菠萝久久久久久久| 日韩高清在线一区| 盗摄精品av一区二区三区| 在线免费观看日本一区| 26uuu色噜噜精品一区| 亚洲色图在线看| 久久爱www久久做| 91美女福利视频| 日韩视频免费观看高清完整版| 欧美高清在线精品一区| 午夜精品久久久久久久| 国产宾馆实践打屁股91| 欧洲精品中文字幕| 日本一区二区三级电影在线观看 | 欧美自拍偷拍一区| 久久免费电影网| 天天做天天摸天天爽国产一区| 丰满白嫩尤物一区二区| 欧美三级电影在线观看| 美国毛片一区二区| 日本大香伊一区二区三区| 久久精品人人做人人爽人人| 午夜久久福利影院| 北条麻妃一区二区三区| 精品国产一区二区亚洲人成毛片| 亚洲一区影音先锋| 成人av免费在线播放| 久久众筹精品私拍模特| 香蕉成人啪国产精品视频综合网| 成人免费看片app下载| 日韩美女主播在线视频一区二区三区 | 亚洲自拍偷拍麻豆| 成人18视频在线播放| 久久免费偷拍视频| 精品一区二区三区日韩| 69久久99精品久久久久婷婷| 亚洲最大成人网4388xx| 99视频在线精品| 国产欧美日韩在线看| 韩国女主播一区二区三区| 欧美一级日韩一级| 日韩中文字幕不卡| 欧美天天综合网| 亚洲一区二区三区自拍| 色综合天天性综合| 亚洲少妇最新在线视频| av成人老司机| 成人免费在线视频观看| 99精品欧美一区二区三区综合在线| 国产欧美日韩在线看| 大桥未久av一区二区三区中文| 久久婷婷成人综合色| 国产美女av一区二区三区| 久久久综合九色合综国产精品| 精品综合免费视频观看| 亚洲精品在线观看视频| 激情综合网av| 久久精品视频一区二区| 国产91露脸合集magnet| 中文在线免费一区三区高中清不卡| 国产精品一区在线观看乱码 | 美女视频黄 久久| 日韩欧美一级二级三级| 久草精品在线观看| 久久久综合九色合综国产精品| 国产精品一区二区黑丝| 久久久国产精品午夜一区ai换脸| 国产aⅴ综合色| 国产精品国产三级国产普通话99 | 国产成人亚洲综合a∨婷婷图片| 久久精品男人的天堂| 成人永久免费视频| 国产精品久久久99| 欧美曰成人黄网| 丝袜脚交一区二区| 久久影视一区二区| 99精品偷自拍| 亚洲成人av免费| 精品免费日韩av| 国产91精品精华液一区二区三区| 国产精品白丝在线| 欧美午夜精品一区二区蜜桃| 五月综合激情网| 2024国产精品视频| 91蝌蚪porny成人天涯| 丝袜亚洲另类欧美| 国产午夜三级一区二区三| 色综合久久天天综合网| 午夜精品久久久久久久99水蜜桃 | 欧美va日韩va| 99精品欧美一区二区三区小说 | 自拍偷拍亚洲综合| 91精品国产品国语在线不卡| 国产麻豆一精品一av一免费 | 亚洲综合激情网| 精品国产第一区二区三区观看体验 | 舔着乳尖日韩一区| 欧美激情综合在线| 欧美日韩一区二区三区四区| 麻豆精品国产传媒mv男同 | 一区在线中文字幕| 日韩亚洲欧美高清| 91麻豆自制传媒国产之光| 久久国产人妖系列| 亚洲乱码国产乱码精品精的特点 | 亚洲精品国产一区二区精华液 | 4438x成人网最大色成网站| 丁香六月综合激情| 日韩精品午夜视频| 日韩久久一区二区| 久久久久99精品一区|