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

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

?? rtpproto.c.svn-base

?? ffmpeg最新源碼
?? SVN-BASE
字號:
/* * RTP network protocol * Copyright (c) 2002 Fabrice Bellard. * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *//** * @file rtpproto.c * RTP protocol */#include "libavutil/avstring.h"#include "avformat.h"#include <unistd.h>#include <stdarg.h>#include "network.h"#include "os_support.h"#include <fcntl.h>#define RTP_TX_BUF_SIZE  (64 * 1024)#define RTP_RX_BUF_SIZE  (128 * 1024)typedef struct RTPContext {    URLContext *rtp_hd, *rtcp_hd;    int rtp_fd, rtcp_fd;} RTPContext;/** * If no filename is given to av_open_input_file because you want to * get the local port first, then you must call this function to set * the remote server address. * * @param s1 media file context * @param uri of the remote server * @return zero if no error. */int rtp_set_remote_url(URLContext *h, const char *uri){    RTPContext *s = h->priv_data;    char hostname[256];    int port;    char buf[1024];    char path[1024];    url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,              path, sizeof(path), uri);    snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port, path);    udp_set_remote_url(s->rtp_hd, buf);    snprintf(buf, sizeof(buf), "udp://%s:%d%s", hostname, port + 1, path);    udp_set_remote_url(s->rtcp_hd, buf);    return 0;}/** * add option to url of the form: * "http://host:port/path?option1=val1&option2=val2... */static void url_add_option(char *buf, int buf_size, const char *fmt, ...){    char buf1[1024];    va_list ap;    va_start(ap, fmt);    if (strchr(buf, '?'))        av_strlcat(buf, "&", buf_size);    else        av_strlcat(buf, "?", buf_size);    vsnprintf(buf1, sizeof(buf1), fmt, ap);    av_strlcat(buf, buf1, buf_size);    va_end(ap);}static void build_udp_url(char *buf, int buf_size,                          const char *hostname, int port,                          int local_port, int ttl,                          int max_packet_size){    snprintf(buf, buf_size, "udp://%s:%d", hostname, port);    if (local_port >= 0)        url_add_option(buf, buf_size, "localport=%d", local_port);    if (ttl >= 0)        url_add_option(buf, buf_size, "ttl=%d", ttl);    if (max_packet_size >=0)        url_add_option(buf, buf_size, "pkt_size=%d", max_packet_size);}/** * url syntax: rtp://host:port[?option=val...] * option: 'ttl=n'       : set the ttl value (for multicast only) *         'localport=n' : set the local port to n *         'pkt_size=n'  : set max packet size * */static int rtp_open(URLContext *h, const char *uri, int flags){    RTPContext *s;    int port, is_output, ttl, local_port, max_packet_size;    char hostname[256];    char buf[1024];    char path[1024];    const char *p;    is_output = (flags & URL_WRONLY);    s = av_mallocz(sizeof(RTPContext));    if (!s)        return AVERROR(ENOMEM);    h->priv_data = s;    url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,              path, sizeof(path), uri);    /* extract parameters */    ttl = -1;    local_port = -1;    max_packet_size = -1;    p = strchr(uri, '?');    if (p) {        if (find_info_tag(buf, sizeof(buf), "ttl", p)) {            ttl = strtol(buf, NULL, 10);        }        if (find_info_tag(buf, sizeof(buf), "localport", p)) {            local_port = strtol(buf, NULL, 10);        }        if (find_info_tag(buf, sizeof(buf), "pkt_size", p)) {            max_packet_size = strtol(buf, NULL, 10);        }    }    build_udp_url(buf, sizeof(buf),                  hostname, port, local_port, ttl, max_packet_size);    if (url_open(&s->rtp_hd, buf, flags) < 0)        goto fail;    local_port = udp_get_local_port(s->rtp_hd);    /* XXX: need to open another connection if the port is not even */    /* well, should suppress localport in path */    build_udp_url(buf, sizeof(buf),                  hostname, port + 1, local_port + 1, ttl, max_packet_size);    if (url_open(&s->rtcp_hd, buf, flags) < 0)        goto fail;    /* just to ease handle access. XXX: need to suppress direct handle       access */    s->rtp_fd = udp_get_file_handle(s->rtp_hd);    s->rtcp_fd = udp_get_file_handle(s->rtcp_hd);    h->max_packet_size = url_get_max_packet_size(s->rtp_hd);    h->is_streamed = 1;    return 0; fail:    if (s->rtp_hd)        url_close(s->rtp_hd);    if (s->rtcp_hd)        url_close(s->rtcp_hd);    av_free(s);    return AVERROR(EIO);}static int rtp_read(URLContext *h, uint8_t *buf, int size){    RTPContext *s = h->priv_data;    struct sockaddr_in from;    socklen_t from_len;    int len, fd_max, n;    fd_set rfds;#if 0    for(;;) {        from_len = sizeof(from);        len = recvfrom (s->rtp_fd, buf, size, 0,                        (struct sockaddr *)&from, &from_len);        if (len < 0) {            if (ff_neterrno() == FF_NETERROR(EAGAIN) ||                ff_neterrno() == FF_NETERROR(EINTR))                continue;            return AVERROR(EIO);        }        break;    }#else    for(;;) {        /* build fdset to listen to RTP and RTCP packets */        FD_ZERO(&rfds);        fd_max = s->rtp_fd;        FD_SET(s->rtp_fd, &rfds);        if (s->rtcp_fd > fd_max)            fd_max = s->rtcp_fd;        FD_SET(s->rtcp_fd, &rfds);        n = select(fd_max + 1, &rfds, NULL, NULL, NULL);        if (n > 0) {            /* first try RTCP */            if (FD_ISSET(s->rtcp_fd, &rfds)) {                from_len = sizeof(from);                len = recvfrom (s->rtcp_fd, buf, size, 0,                                (struct sockaddr *)&from, &from_len);                if (len < 0) {                    if (ff_neterrno() == FF_NETERROR(EAGAIN) ||                        ff_neterrno() == FF_NETERROR(EINTR))                        continue;                    return AVERROR(EIO);                }                break;            }            /* then RTP */            if (FD_ISSET(s->rtp_fd, &rfds)) {                from_len = sizeof(from);                len = recvfrom (s->rtp_fd, buf, size, 0,                                (struct sockaddr *)&from, &from_len);                if (len < 0) {                    if (ff_neterrno() == FF_NETERROR(EAGAIN) ||                        ff_neterrno() == FF_NETERROR(EINTR))                        continue;                    return AVERROR(EIO);                }                break;            }        }    }#endif    return len;}static int rtp_write(URLContext *h, uint8_t *buf, int size){    RTPContext *s = h->priv_data;    int ret;    URLContext *hd;    if (buf[1] >= 200 && buf[1] <= 204) {        /* RTCP payload type */        hd = s->rtcp_hd;    } else {        /* RTP payload type */        hd = s->rtp_hd;    }    ret = url_write(hd, buf, size);#if 0    {        struct timespec ts;        ts.tv_sec = 0;        ts.tv_nsec = 10 * 1000000;        nanosleep(&ts, NULL);    }#endif    return ret;}static int rtp_close(URLContext *h){    RTPContext *s = h->priv_data;    url_close(s->rtp_hd);    url_close(s->rtcp_hd);    av_free(s);    return 0;}/** * Return the local port used by the RTP connection * @param s1 media file context * @return the local port number */int rtp_get_local_port(URLContext *h){    RTPContext *s = h->priv_data;    return udp_get_local_port(s->rtp_hd);}/** * Return the rtp and rtcp file handles for select() usage to wait for * several RTP streams at the same time. * @param h media file context */void rtp_get_file_handles(URLContext *h, int *prtp_fd, int *prtcp_fd){    RTPContext *s = h->priv_data;    *prtp_fd = s->rtp_fd;    *prtcp_fd = s->rtcp_fd;}URLProtocol rtp_protocol = {    "rtp",    rtp_open,    rtp_read,    rtp_write,    NULL, /* seek */    rtp_close,};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777色狠狠一区二区三区| 91成人在线观看喷潮| 精品国产欧美一区二区| 免费观看在线色综合| 制服丝袜av成人在线看| 久久国产精品露脸对白| 久久综合国产精品| 成人免费的视频| 一区二区三区精品在线观看| 欧美性色黄大片| 秋霞午夜av一区二区三区| 精品福利在线导航| 成人午夜激情片| 亚洲自拍偷拍九九九| 4438成人网| 国产福利精品一区| 一区二区三区中文在线观看| 欧美精品一二三| 国产专区欧美精品| 国产精品久久免费看| 在线观看日韩精品| 日本不卡视频在线观看| 中文字幕乱码亚洲精品一区| 欧美自拍偷拍午夜视频| 日韩制服丝袜av| 国产午夜精品久久久久久久| 日本精品裸体写真集在线观看| 午夜精品福利一区二区三区蜜桃| 久久这里只有精品首页| 色噜噜狠狠色综合中国| 蜜臀av性久久久久蜜臀aⅴ| 国产精品网曝门| 欧美老肥妇做.爰bbww视频| 国产精品一区二区在线观看不卡| 成人欧美一区二区三区| 制服丝袜亚洲播放| 91啪亚洲精品| 国产一区二区三区在线看麻豆| 亚洲欧美韩国综合色| 日韩免费成人网| 91视频一区二区| 大白屁股一区二区视频| 在线观看91av| 欧美精品一区二区蜜臀亚洲| 日韩**一区毛片| 久久久久久久久久久久电影 | 91精品国产乱| 成人在线视频首页| 久久精品国产99| 亚洲va欧美va人人爽| 最新国产成人在线观看| 日韩精品最新网址| 欧美性xxxxx极品少妇| 波多野结衣精品在线| 日本美女视频一区二区| 亚洲一区二区欧美| 亚洲欧美日韩中文播放| 国产亚洲综合色| 欧美xxxx在线观看| 欧美另类videos死尸| 在线免费不卡电影| 91免费在线看| 99精品视频在线观看免费| 国产99久久久久久免费看农村| 视频一区二区三区入口| 一区二区激情视频| 一区二区欧美精品| 亚洲视频 欧洲视频| 国产精品人人做人人爽人人添| 精品噜噜噜噜久久久久久久久试看| 欧美日韩高清在线播放| 91福利在线免费观看| 972aa.com艺术欧美| 9i在线看片成人免费| 成人av手机在线观看| 国产91高潮流白浆在线麻豆| 国产麻豆91精品| 国产成人av福利| 国产成人aaa| 波多野结衣一区二区三区| 福利电影一区二区| 成人免费va视频| av电影天堂一区二区在线| 99精品视频一区二区三区| 99精品久久久久久| 日本久久电影网| 欧美精品乱码久久久久久| 欧美美女视频在线观看| 欧美精品久久一区| 精品美女在线观看| 中文字幕精品—区二区四季| 亚洲国产精品ⅴa在线观看| 中文字幕一区二区三区四区| 亚洲欧美另类小说| 亚洲一区二区三区四区的| 五月天欧美精品| 视频一区二区不卡| 国产一区二区三区av电影| 不卡的av在线播放| 欧美在线影院一区二区| 欧美日本在线播放| 日韩精品一区二| 久久综合99re88久久爱| 一区二区中文视频| 一区二区三区丝袜| 麻豆精品一区二区| 国产成人高清视频| 欧美综合天天夜夜久久| 欧美成人video| 中文字幕亚洲一区二区av在线 | 欧美日韩一区二区不卡| 欧美一级久久久久久久大片| 国产亚洲欧美日韩日本| 亚洲资源在线观看| 精品一区二区免费| 一本大道综合伊人精品热热 | 欧洲精品视频在线观看| 在线综合+亚洲+欧美中文字幕| 久久噜噜亚洲综合| 一区二区在线观看视频 | 午夜精品123| 国产精品亚洲一区二区三区在线| 99久久精品免费精品国产| 欧美久久高跟鞋激| 国产精品久久久久永久免费观看 | 欧美成人性战久久| 日韩理论在线观看| 另类小说色综合网站| 色偷偷88欧美精品久久久| 欧美成人福利视频| 亚洲国产综合在线| www.日韩精品| 精品国精品国产| 一区二区三区中文在线| 国产91在线观看| 欧美一二三在线| 亚洲日本青草视频在线怡红院| 蜜臀av国产精品久久久久| 91在线视频观看| 国产午夜亚洲精品午夜鲁丝片| 婷婷国产在线综合| 色就色 综合激情| 国产精品欧美一区喷水| 国内精品视频一区二区三区八戒| 在线免费观看日本一区| 欧美激情在线观看视频免费| 蜜桃av一区二区三区电影| 欧美视频一区二区三区在线观看| 欧美激情艳妇裸体舞| 精品一区二区三区香蕉蜜桃 | 亚洲美女视频在线观看| 国产精品一区二区你懂的| 欧美一级专区免费大片| 亚洲一二三四在线观看| av不卡在线播放| 欧美日韩综合色| 亚洲欧美偷拍卡通变态| 成人精品免费视频| 国产清纯白嫩初高生在线观看91| 日韩国产在线一| 欧美三级电影网站| 亚洲网友自拍偷拍| 一本大道久久a久久综合婷婷| 国产精品美女久久久久aⅴ| 国产高清无密码一区二区三区| 日韩精品中文字幕一区二区三区| 天天操天天干天天综合网| 色久综合一二码| 一区二区三区四区不卡视频| 91精品1区2区| 亚洲午夜免费电影| 337p亚洲精品色噜噜狠狠| 日韩高清欧美激情| 日韩女优av电影| 精品亚洲porn| 国产亚洲美州欧州综合国| 国产成人鲁色资源国产91色综 | 亚洲欧美日本韩国| 色综合视频在线观看| 一区二区三区波多野结衣在线观看| 91福利视频网站| 舔着乳尖日韩一区| 精品久久国产老人久久综合| 国内精品伊人久久久久影院对白| 久久久久久久久久久黄色| 国产盗摄视频一区二区三区| 亚洲国产成人私人影院tom| 99精品一区二区三区| 亚洲图片一区二区| 欧美日韩免费一区二区三区视频 | 美女视频免费一区| 亚洲精品在线观看视频| 豆国产96在线|亚洲| 亚洲欧美日韩人成在线播放| 欧美日本精品一区二区三区| 青青草成人在线观看| 国产视频不卡一区| 一本在线高清不卡dvd| 婷婷六月综合亚洲| 久久久亚洲高清|