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

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

?? rtpproto.c

?? arm平臺下的H264編碼和解碼源代碼
?? C
字號:
/* * RTP network protocol * Copyright (c) 2002 Fabrice Bellard. * * This library 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 of the License, or (at your option) any later version. * * This library 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 this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "avformat.h"#include <unistd.h>#include <stdarg.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#ifndef __BEOS__# include <arpa/inet.h>#else# include "barpainet.h"#endif#include <netdb.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, 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, '?'))        pstrcat(buf, buf_size, "&");    else        pstrcat(buf, buf_size, "?");    vsnprintf(buf1, sizeof(buf1), fmt, ap);    pstrcat(buf, buf_size, buf1);    va_end(ap);}static void build_udp_url(char *buf, int buf_size,			  const char *hostname, int port,			  int local_port, int multicast, int ttl){    snprintf(buf, buf_size, "udp://%s:%d", hostname, port);    if (local_port >= 0)        url_add_option(buf, buf_size, "localport=%d", local_port);    if (multicast)        url_add_option(buf, buf_size, "multicast=1", multicast);    if (ttl >= 0)        url_add_option(buf, buf_size, "ttl=%d", ttl);}/* * url syntax: rtp://host:port[?option=val...] * option: 'multicast=1' : enable multicast  *         'ttl=n'       : set the ttl value (for multicast only) *         'localport=n' : set the local port to n * */static int rtp_open(URLContext *h, const char *uri, int flags){    RTPContext *s;    int port, is_output, is_multicast, ttl, local_port;    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 -ENOMEM;    h->priv_data = s;        url_split(NULL, 0, hostname, sizeof(hostname), &port,               path, sizeof(path), uri);    /* extract parameters */    is_multicast = 0;    ttl = -1;    local_port = -1;    p = strchr(uri, '?');    if (p) {        is_multicast = find_info_tag(buf, sizeof(buf), "multicast", 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);        }    }    build_udp_url(buf, sizeof(buf),                  hostname, port, local_port, is_multicast, ttl);    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 connexion if the port is not even */    /* well, should suppress localport in path */        build_udp_url(buf, sizeof(buf),                  hostname, port + 1, local_port + 1, is_multicast, ttl);    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 -EIO;}static int rtp_read(URLContext *h, uint8_t *buf, int size){    RTPContext *s = h->priv_data;    struct sockaddr_in from;    int from_len, 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 (errno == EAGAIN || errno == EINTR)                continue;            return -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 (errno == EAGAIN || errno == EINTR)                        continue;                    return -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 (errno == EAGAIN || errno == EINTR)                        continue;                    return -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 connexion * @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,};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人动漫在线一区| 中文字幕欧美三区| 色噜噜狠狠成人网p站| 国产一区二区三区黄视频| 日本中文一区二区三区| 午夜成人免费电影| 又紧又大又爽精品一区二区| 一区二区成人在线| 亚洲精品国产精华液| 亚洲男人的天堂网| 亚洲综合成人在线视频| 一区二区三区资源| 午夜私人影院久久久久| 亚洲成人精品一区| 亚洲国产一区二区三区青草影视 | 91麻豆精品久久久久蜜臀| 91福利在线看| 欧美精品v国产精品v日韩精品| 欧美精品亚洲一区二区在线播放| 日韩视频一区在线观看| 日韩欧美亚洲另类制服综合在线| 精品奇米国产一区二区三区| 欧美激情一区在线观看| 亚洲柠檬福利资源导航| 亚洲一区国产视频| 美女国产一区二区三区| 国产综合色在线视频区| 91视视频在线直接观看在线看网页在线看 | 久久亚洲一级片| 国产精品欧美一区二区三区| 一区二区三区在线不卡| 水野朝阳av一区二区三区| 精品午夜久久福利影院| 北岛玲一区二区三区四区| 91久久奴性调教| 亚洲精品一区二区三区影院| 国产精品免费网站在线观看| 一二三区精品福利视频| 久久99精品久久久久久动态图| 高清beeg欧美| 91精品欧美福利在线观看| 日本一区二区三区电影| 亚洲bt欧美bt精品777| 激情文学综合丁香| 在线观看国产日韩| 久久精品亚洲一区二区三区浴池| 亚洲啪啪综合av一区二区三区| 日韩精品电影一区亚洲| 91蜜桃免费观看视频| 日韩午夜av电影| 一区二区三区四区视频精品免费| 日本成人在线不卡视频| 色综合久久久久久久久| 欧美精品一区二区三区蜜桃| 一区二区三区成人| 成人激情午夜影院| 欧美成人官网二区| 亚洲chinese男男1069| 色综合久久综合网| 日本一区二区三区国色天香 | 日韩二区在线观看| 99精品国产91久久久久久 | 国产风韵犹存在线视精品| 日本高清不卡视频| 国产日本亚洲高清| 另类中文字幕网| 欧美日韩一卡二卡| 最新中文字幕一区二区三区 | 在线免费不卡电影| 中文字幕中文字幕在线一区| 国产一区二区精品久久91| 日韩一区二区三区在线视频| 日欧美一区二区| 欧美日韩成人在线| 亚洲地区一二三色| 欧美精品电影在线播放| 调教+趴+乳夹+国产+精品| 欧美日韩精品福利| 日韩福利视频导航| 日韩一区二区在线看| 日韩av午夜在线观看| 欧美日韩国产中文| 午夜精品久久久久久久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲伦在线观看| 欧美亚洲精品一区| 丝袜美腿亚洲一区| 欧美一区二区在线播放| 韩国视频一区二区| 国产视频亚洲色图| 成人精品视频一区二区三区尤物| 久久午夜免费电影| 国产成a人亚洲| 日韩理论片在线| 一本久久精品一区二区| 欧美一区二区在线视频| 亚洲最大成人网4388xx| 成人免费毛片嘿嘿连载视频| 国产精品的网站| 欧美精品在线视频| 亚洲午夜激情网站| 91麻豆精品国产91久久久| 日本美女一区二区三区| 欧美zozozo| 色猫猫国产区一区二在线视频| 国产精品色婷婷久久58| 91麻豆国产自产在线观看| 日韩影视精彩在线| 国产亚洲精久久久久久| 色噜噜久久综合| 五月激情丁香一区二区三区| 337p日本欧洲亚洲大胆精品| 91亚洲大成网污www| 日韩 欧美一区二区三区| 国产精品麻豆视频| 欧美日韩www| 99久久精品免费看| 婷婷激情综合网| 日本一区二区免费在线观看视频 | 日本精品裸体写真集在线观看| 亚洲午夜精品一区二区三区他趣| 精品噜噜噜噜久久久久久久久试看| 不卡一区二区中文字幕| 一区二区三区蜜桃网| 久久网站热最新地址| 欧美日韩亚洲国产综合| 国产美女娇喘av呻吟久久| 一区二区三区不卡视频| 亚洲精品一区二区三区精华液| 欧美视频一区在线| 99免费精品在线| 国产一区二区视频在线| 日韩精品一级二级 | 国产99久久久精品| 免费在线观看视频一区| 亚洲一二三专区| 综合av第一页| 国产欧美一区二区精品久导航| 91精品国产综合久久久久久久久久| 97久久精品人人做人人爽50路| 激情六月婷婷久久| 麻豆精品一二三| 日韩成人dvd| 性欧美大战久久久久久久久| 亚洲香蕉伊在人在线观| 亚洲色图色小说| 中文字幕一区二区三区蜜月| 国产日韩精品一区二区浪潮av| 欧美一区二区三区四区视频 | 国产成人精品一区二区三区网站观看| 午夜国产不卡在线观看视频| 一区二区三区丝袜| 一区二区三区在线观看国产| 最新日韩av在线| 亚洲一区二区四区蜜桃| 一区二区三区免费| 亚洲成在人线免费| 偷拍一区二区三区| 一区二区三区国产精品| 一区二区免费在线| 亚洲狠狠爱一区二区三区| 亚洲成av人片在线| 欧美aaaaaa午夜精品| 黑人巨大精品欧美一区| 国产精品亚洲综合一区在线观看| 免费在线观看成人| 国产丶欧美丶日本不卡视频| 国产成人精品影视| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 中文字幕一区二区三区蜜月| 中文字幕一区av| 一区二区三区精密机械公司| 亚洲成人av一区| 亚洲va中文字幕| 紧缚奴在线一区二区三区| 成人丝袜高跟foot| 在线看一区二区| 欧美zozozo| 中文字幕一区二区三区不卡| 亚洲韩国精品一区| 韩国在线一区二区| 色综合色狠狠天天综合色| 在线视频中文字幕一区二区| 欧美日韩高清影院| 久久久久久久久久久久久女国产乱| 国产精品电影一区二区| 天堂在线一区二区| 国产盗摄一区二区| 欧美三区在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲视频一区在线观看| 日本不卡一二三区黄网| 成人深夜在线观看| 欧美一区二区三区的| 中文字幕一区二区不卡| 日本不卡一区二区三区高清视频| 丁香六月综合激情| 欧美日韩色综合| 国产欧美精品一区| 亚洲成av人片一区二区三区 |