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

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

?? ffserver.c

?? 現在關于h.264的源碼很多
?? C
?? 第 1 頁 / 共 5 頁
字號:
            return -1;        } else {            /* search for end of request. */            uint8_t *ptr;            c->buffer_ptr += len;            ptr = c->buffer_ptr;            if ((ptr >= c->buffer + 2 && !memcmp(ptr-2, "\n\n", 2)) ||                (ptr >= c->buffer + 4 && !memcmp(ptr-4, "\r\n\r\n", 4))) {                /* request found : parse it and reply */                if (c->state == HTTPSTATE_WAIT_REQUEST) {                    ret = http_parse_request(c);                } else {                    ret = rtsp_parse_request(c);                }                if (ret < 0)                    return -1;            } else if (ptr >= c->buffer_end) {                /* request too long: cannot do anything */                return -1;            } else goto read_loop;        }        break;    case HTTPSTATE_SEND_HEADER:        if (c->poll_entry->revents & (POLLERR | POLLHUP))            return -1;        /* no need to write if no events */        if (!(c->poll_entry->revents & POLLOUT))            return 0;        len = write(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr);        if (len < 0) {            if (errno != EAGAIN && errno != EINTR) {                /* error : close connection */                av_freep(&c->pb_buffer);                return -1;            }        } else {            c->buffer_ptr += len;            if (c->stream)                c->stream->bytes_served += len;            c->data_count += len;            if (c->buffer_ptr >= c->buffer_end) {                av_freep(&c->pb_buffer);                /* if error, exit */                if (c->http_error) {                    return -1;                }                /* all the buffer was sent : synchronize to the incoming stream */                c->state = HTTPSTATE_SEND_DATA_HEADER;                c->buffer_ptr = c->buffer_end = c->buffer;            }        }        break;    case HTTPSTATE_SEND_DATA:    case HTTPSTATE_SEND_DATA_HEADER:    case HTTPSTATE_SEND_DATA_TRAILER:        /* for packetized output, we consider we can always write (the           input streams sets the speed). It may be better to verify           that we do not rely too much on the kernel queues */        if (!c->is_packetized) {            if (c->poll_entry->revents & (POLLERR | POLLHUP))                return -1;            /* no need to read if no events */            if (!(c->poll_entry->revents & POLLOUT))                return 0;        }        if (http_send_data(c) < 0)            return -1;        break;    case HTTPSTATE_RECEIVE_DATA:        /* no need to read if no events */        if (c->poll_entry->revents & (POLLERR | POLLHUP))            return -1;        if (!(c->poll_entry->revents & POLLIN))            return 0;        if (http_receive_data(c) < 0)            return -1;        break;    case HTTPSTATE_WAIT_FEED:        /* no need to read if no events */        if (c->poll_entry->revents & (POLLIN | POLLERR | POLLHUP))            return -1;        /* nothing to do, we'll be waken up by incoming feed packets */        break;    case RTSPSTATE_SEND_REPLY:        if (c->poll_entry->revents & (POLLERR | POLLHUP)) {            av_freep(&c->pb_buffer);            return -1;        }        /* no need to write if no events */        if (!(c->poll_entry->revents & POLLOUT))            return 0;        len = write(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr);        if (len < 0) {            if (errno != EAGAIN && errno != EINTR) {                /* error : close connection */                av_freep(&c->pb_buffer);                return -1;            }        } else {            c->buffer_ptr += len;            c->data_count += len;            if (c->buffer_ptr >= c->buffer_end) {                /* all the buffer was sent : wait for a new request */                av_freep(&c->pb_buffer);                start_wait_request(c, 1);            }        }        break;    case RTSPSTATE_SEND_PACKET:        if (c->poll_entry->revents & (POLLERR | POLLHUP)) {            av_freep(&c->packet_buffer);            return -1;        }        /* no need to write if no events */        if (!(c->poll_entry->revents & POLLOUT))            return 0;        len = write(c->fd, c->packet_buffer_ptr,                    c->packet_buffer_end - c->packet_buffer_ptr);        if (len < 0) {            if (errno != EAGAIN && errno != EINTR) {                /* error : close connection */                av_freep(&c->packet_buffer);                return -1;            }        } else {            c->packet_buffer_ptr += len;            if (c->packet_buffer_ptr >= c->packet_buffer_end) {                /* all the buffer was sent : wait for a new request */                av_freep(&c->packet_buffer);                c->state = RTSPSTATE_WAIT_REQUEST;            }        }        break;    case HTTPSTATE_READY:        /* nothing to do */        break;    default:        return -1;    }    return 0;}static int extract_rates(char *rates, int ratelen, const char *request){    const char *p;    for (p = request; *p && *p != '\r' && *p != '\n'; ) {        if (strncasecmp(p, "Pragma:", 7) == 0) {            const char *q = p + 7;            while (*q && *q != '\n' && isspace(*q))                q++;            if (strncasecmp(q, "stream-switch-entry=", 20) == 0) {                int stream_no;                int rate_no;                q += 20;                memset(rates, 0xff, ratelen);                while (1) {                    while (*q && *q != '\n' && *q != ':')                        q++;                    if (sscanf(q, ":%d:%d", &stream_no, &rate_no) != 2) {                        break;                    }                    stream_no--;                    if (stream_no < ratelen && stream_no >= 0) {                        rates[stream_no] = rate_no;                    }                    while (*q && *q != '\n' && !isspace(*q))                        q++;                }                return 1;            }        }        p = strchr(p, '\n');        if (!p)            break;        p++;    }    return 0;}static int find_stream_in_feed(FFStream *feed, AVCodecContext *codec, int bit_rate){    int i;    int best_bitrate = 100000000;    int best = -1;    for (i = 0; i < feed->nb_streams; i++) {        AVCodecContext *feed_codec = feed->streams[i]->codec;        if (feed_codec->codec_id != codec->codec_id ||            feed_codec->sample_rate != codec->sample_rate ||            feed_codec->width != codec->width ||            feed_codec->height != codec->height) {            continue;        }        /* Potential stream */        /* We want the fastest stream less than bit_rate, or the slowest         * faster than bit_rate         */        if (feed_codec->bit_rate <= bit_rate) {            if (best_bitrate > bit_rate || feed_codec->bit_rate > best_bitrate) {                best_bitrate = feed_codec->bit_rate;                best = i;            }        } else {            if (feed_codec->bit_rate < best_bitrate) {                best_bitrate = feed_codec->bit_rate;                best = i;            }        }    }    return best;}static int modify_current_stream(HTTPContext *c, char *rates){    int i;    FFStream *req = c->stream;    int action_required = 0;    /* Not much we can do for a feed */    if (!req->feed)        return 0;    for (i = 0; i < req->nb_streams; i++) {        AVCodecContext *codec = req->streams[i]->codec;        switch(rates[i]) {            case 0:                c->switch_feed_streams[i] = req->feed_streams[i];                break;            case 1:                c->switch_feed_streams[i] = find_stream_in_feed(req->feed, codec, codec->bit_rate / 2);                break;            case 2:                /* Wants off or slow */                c->switch_feed_streams[i] = find_stream_in_feed(req->feed, codec, codec->bit_rate / 4);#ifdef WANTS_OFF                /* This doesn't work well when it turns off the only stream! */                c->switch_feed_streams[i] = -2;                c->feed_streams[i] = -2;#endif                break;        }        if (c->switch_feed_streams[i] >= 0 && c->switch_feed_streams[i] != c->feed_streams[i])            action_required = 1;    }    return action_required;}static void do_switch_stream(HTTPContext *c, int i){    if (c->switch_feed_streams[i] >= 0) {#ifdef PHILIP        c->feed_streams[i] = c->switch_feed_streams[i];#endif        /* Now update the stream */    }    c->switch_feed_streams[i] = -1;}/* XXX: factorize in utils.c ? *//* XXX: take care with different space meaning */static void skip_spaces(const char **pp){    const char *p;    p = *pp;    while (*p == ' ' || *p == '\t')        p++;    *pp = p;}static void get_word(char *buf, int buf_size, const char **pp){    const char *p;    char *q;    p = *pp;    skip_spaces(&p);    q = buf;    while (!isspace(*p) && *p != '\0') {        if ((q - buf) < buf_size - 1)            *q++ = *p;        p++;    }    if (buf_size > 0)        *q = '\0';    *pp = p;}static int validate_acl(FFStream *stream, HTTPContext *c){    enum IPAddressAction last_action = IP_DENY;    IPAddressACL *acl;    struct in_addr *src = &c->from_addr.sin_addr;    unsigned long src_addr = ntohl(src->s_addr);    for (acl = stream->acl; acl; acl = acl->next) {        if (src_addr >= acl->first.s_addr && src_addr <= acl->last.s_addr) {            return (acl->action == IP_ALLOW) ? 1 : 0;        }        last_action = acl->action;    }    /* Nothing matched, so return not the last action */    return (last_action == IP_DENY) ? 1 : 0;}/* compute the real filename of a file by matching it without its   extensions to all the stream filenames */static void compute_real_filename(char *filename, int max_size){    char file1[1024];    char file2[1024];    char *p;    FFStream *stream;    /* compute filename by matching without the file extensions */    pstrcpy(file1, sizeof(file1), filename);    p = strrchr(file1, '.');    if (p)        *p = '\0';    for(stream = first_stream; stream != NULL; stream = stream->next) {        pstrcpy(file2, sizeof(file2), stream->filename);        p = strrchr(file2, '.');        if (p)            *p = '\0';        if (!strcmp(file1, file2)) {            pstrcpy(filename, max_size, stream->filename);            break;        }    }}enum RedirType {    REDIR_NONE,    REDIR_ASX,    REDIR_RAM,    REDIR_ASF,    REDIR_RTSP,    REDIR_SDP,};/* parse http request and prepare header */static int http_parse_request(HTTPContext *c){    char *p;    enum RedirType redir_type;    char cmd[32];    char info[1024], *filename;    char url[1024], *q;    char protocol[32];    char msg[1024];    const char *mime_type;    FFStream *stream;    int i;    char ratebuf[32];    char *useragent = 0;    p = c->buffer;    get_word(cmd, sizeof(cmd), (const char **)&p);    pstrcpy(c->method, sizeof(c->method), cmd);    if (!strcmp(cmd, "GET"))        c->post = 0;    else if (!strcmp(cmd, "POST"))        c->post = 1;    else        return -1;    get_word(url, sizeof(url), (const char **)&p);    pstrcpy(c->url, sizeof(c->url), url);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级中文字幕| 国产不卡免费视频| 激情丁香综合五月| 不卡区在线中文字幕| 欧美日韩精品专区| 中文字幕精品一区二区精品绿巨人| 亚洲精品高清在线观看| 黄页网站大全一区二区| 欧美日韩国产片| 国产精品久久久久久久久免费丝袜 | 亚洲人精品一区| 成人成人成人在线视频| 亚洲欧美日韩综合aⅴ视频| 亚洲高清不卡在线观看| 国产精品一区在线观看你懂的| 欧美午夜精品久久久久久超碰| 国产亚洲精品精华液| 日韩精品国产精品| 91国产成人在线| 国产精品久久久久影视| 国产一区二区三区在线观看免费视频| 欧美日韩在线综合| 亚洲欧美一区二区三区久本道91| 精品在线观看免费| 日韩免费观看2025年上映的电影| 亚洲激情校园春色| 色综合视频在线观看| 中文字幕精品三区| 国产成人a级片| 久久精品一二三| 亚洲三级视频在线观看| 蜜臀99久久精品久久久久久软件| 色哟哟国产精品| 中文字幕在线一区二区三区| 国产寡妇亲子伦一区二区| ww久久中文字幕| 精品影院一区二区久久久| 日韩一区二区三区观看| 在线免费不卡视频| 亚洲免费在线观看视频| 97成人超碰视| 亚洲女女做受ⅹxx高潮| 色综合久久66| 亚洲综合视频网| 欧美手机在线视频| 日韩一区精品视频| 欧美tickle裸体挠脚心vk| 捆绑紧缚一区二区三区视频 | 久久久午夜电影| 日韩福利电影在线| 在线不卡一区二区| 日韩av中文字幕一区二区| 欧美一二三四区在线| 狠狠色狠狠色综合日日91app| 久久先锋影音av鲁色资源| 国产盗摄女厕一区二区三区| 国产精品美女久久久久久2018| 99vv1com这只有精品| 亚洲综合色视频| 欧美一区二区在线免费观看| 精品一区二区三区免费视频| 国产喷白浆一区二区三区| 国产美女一区二区| 亚洲乱码国产乱码精品精小说| 欧美日韩在线播放三区四区| 久久99久久精品欧美| 欧美激情一区二区三区不卡| 在线日韩国产精品| 久久黄色级2电影| 欧美一区二区三区免费在线看| 久久精品国产久精国产| 日本一区二区在线不卡| 欧美日韩国产bt| 国产一区二区在线观看视频| 亚洲男女一区二区三区| 91精品国产综合久久久久久| 国产精品自产自拍| 亚洲aaa精品| 欧美激情一区不卡| 欧美精选午夜久久久乱码6080| 国产毛片精品视频| 亚洲一区二区三区四区在线免费观看| 717成人午夜免费福利电影| 粉嫩高潮美女一区二区三区 | 国产精品国产自产拍高清av王其| 欧美色国产精品| 国产成人免费视频精品含羞草妖精| 怡红院av一区二区三区| 久久综合九色综合欧美就去吻| 欧美午夜理伦三级在线观看| 国产精品一区免费在线观看| 亚洲一区二区视频在线观看| 国产女同互慰高潮91漫画| 777xxx欧美| 在线看不卡av| gogo大胆日本视频一区| 韩国视频一区二区| 青青草原综合久久大伊人精品优势| 综合欧美亚洲日本| 国产女同性恋一区二区| 久久午夜色播影院免费高清| 欧美久久久久久久久中文字幕| 成人av集中营| 国产成人午夜片在线观看高清观看| 日韩av一区二区在线影视| 亚洲一区二区三区不卡国产欧美| 国产精品二三区| 国产女人水真多18毛片18精品视频| 日韩欧美综合一区| 欧美一二三四区在线| 欧美一区二区视频在线观看 | 老司机精品视频线观看86 | 日韩成人精品在线观看| 一区2区3区在线看| 亚洲视频你懂的| 精品国产一区二区三区不卡| 欧美日韩久久久久久| 欧美中文字幕不卡| 91福利社在线观看| 91色乱码一区二区三区| 91免费版在线看| 91福利社在线观看| 欧美日韩一二三| 欧美日本一区二区三区| 欧美日韩精品欧美日韩精品| 欧美日韩在线三区| 欧美一区二区久久久| 欧美一级黄色片| 亚洲精品一区二区三区香蕉| 久久色在线视频| 国产调教视频一区| 国产精品国产自产拍高清av | 欧美电影在线免费观看| 国产日韩欧美a| 午夜影视日本亚洲欧洲精品| 亚洲综合激情另类小说区| 夜夜爽夜夜爽精品视频| 日韩影院在线观看| 美女爽到高潮91| 国产精品一卡二卡在线观看| 成人动漫一区二区在线| 色婷婷激情综合| 欧美日韩高清一区二区不卡| 欧美一卡二卡三卡| 国产蜜臀97一区二区三区| 亚洲欧美韩国综合色| 亚洲国产aⅴ天堂久久| 香港成人在线视频| 国产另类ts人妖一区二区| 成人a免费在线看| 欧美影片第一页| 欧美zozo另类异族| 自拍偷在线精品自拍偷无码专区| 亚洲国产中文字幕在线视频综合| 日本大胆欧美人术艺术动态| 国产成人综合在线| 欧美亚洲国产一区二区三区va | 久久久国产一区二区三区四区小说| 美国一区二区三区在线播放| 国内精品免费**视频| 99re亚洲国产精品| 日韩欧美一区二区不卡| 国产精品免费av| 蜜臀av国产精品久久久久| 成人av网址在线观看| 日韩精品最新网址| 亚洲精品菠萝久久久久久久| 韩国一区二区在线观看| 欧美天堂一区二区三区| 久久精品视频一区二区三区| 亚洲综合一二区| 高清国产一区二区| 日韩欧美一二三| 一区二区三区在线高清| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩一区三区四区| 国产精品视频在线看| 久久精品99国产精品日本| 日本黄色一区二区| 国产女主播视频一区二区| 看国产成人h片视频| 在线免费一区三区| 最新高清无码专区| 国产成人免费网站| 精品成人在线观看| 色婷婷久久一区二区三区麻豆| 精品毛片乱码1区2区3区| 性做久久久久久免费观看欧美| 99这里都是精品| 国产欧美一区视频| 国产美女一区二区三区| 日韩一区国产二区欧美三区| 亚洲国产成人91porn| 在线观看成人免费视频| 亚洲视频一二三区| 99精品久久只有精品| 中文字幕国产一区二区| 国产91精品精华液一区二区三区| 精品福利av导航| 狠狠色丁香婷综合久久|