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

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

?? rtcp.c

?? VLC Player Source Code
?? C
字號:
/***************************************************************************** * rtcp.c: RTCP stream output support ***************************************************************************** * Copyright ? 2007 Rémi Denis-Courmont * $Id$ * * 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.1 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <vlc_common.h>#include <vlc_block.h>#include <vlc_network.h>#include <vlc_sout.h>#include "rtp.h"#include <assert.h>/* * NOTE on RTCP implementation: * - there is a single sender (us), no conferencing here! => n = sender = 1, * - as such we need not bother to include Receiver Reports, * - in unicast case, there is a single receiver => members = 1 + 1 = 2, *   and obviously n > 25% of members, * - in multicast case, we do not want to maintain the number of receivers *   and we assume it is big (i.e. than 3) because that's what broadcasting is *   all about, * - it is assumed we_sent = true (could be wrong), since we are THE sender, * - we always send SR + SDES, while running, * - FIXME: we do not implement separate rate limiting for SDES, * - we do not implement any profile-specific extensions for the time being. */struct rtcp_sender_t{    size_t   length;  /* RTCP packet length */    uint8_t  payload[28 + 8 + (2 * 257) + 8];    int      handle;  /* RTCP socket handler */    uint32_t packets; /* RTP packets sent */    uint32_t bytes;   /* RTP bytes sent */    unsigned counter; /* RTP packets sent since last RTCP packet */};rtcp_sender_t *OpenRTCP (vlc_object_t *obj, int rtp_fd, int proto,                         bool mux){    rtcp_sender_t *rtcp;    uint8_t *ptr;    int fd;    char src[NI_MAXNUMERICHOST];    int sport;    if (net_GetSockAddress (rtp_fd, src, &sport))        return NULL;    if (mux)    {        /* RTP/RTCP mux: duplicate the socket */#ifndef WIN32        fd = dup (rtp_fd);#else        WSAPROTOCOL_INFO info;        WSADuplicateSocket (rtp_fd, GetCurrentProcessId (), &info);        fd = WSASocket (info.iAddressFamily, info.iSocketType, info.iProtocol,                        &info, 0, 0);#endif    }    else    {        /* RTCP on a separate port */        char dst[NI_MAXNUMERICHOST];        int dport;        if (net_GetPeerAddress (rtp_fd, dst, &dport))            return NULL;        sport++;        dport++;        fd = net_OpenDgram (obj, src, sport, dst, dport, AF_UNSPEC, proto);    }    if (fd == -1)        return NULL;    rtcp = malloc (sizeof (*rtcp));    if (rtcp == NULL)    {        net_Close (fd);        return NULL;    }    rtcp->handle = fd;    rtcp->bytes = rtcp->packets = rtcp->counter = 0;    ptr = (uint8_t *)strchr (src, '%');    if (ptr != NULL)        *ptr = '\0'; /* remove scope ID frop IPv6 addresses */    ptr = rtcp->payload;    /* Sender report */    ptr[0] = 2 << 6; /* V = 2, P = RC = 0 */    ptr[1] = 200; /* payload type: Sender Report */    SetWBE (ptr + 2, 6); /* length = 6 (7 double words) */    memset (ptr + 4, 0, 4); /* SSRC unknown yet */    SetQWBE (ptr + 8, NTPtime64 ());    memset (ptr + 16, 0, 12); /* timestamp and counters */    ptr += 28;    /* Source description */    uint8_t *sdes = ptr;    ptr[0] = (2 << 6) | 1; /* V = 2, P = 0, SC = 1 */    ptr[1] = 202; /* payload type: Source Description */    uint8_t *lenptr = ptr + 2;    memset (ptr + 4, 0, 4); /* SSRC unknown yet */    ptr += 8;    ptr[0] = 1; /* CNAME - mandatory */    assert (NI_MAXNUMERICHOST <= 256);    ptr[1] = strlen (src);    memcpy (ptr + 2, src, ptr[1]);    ptr += ptr[1] + 2;    static const char tool[] = PACKAGE_STRING;    ptr[0] = 6; /* TOOL */    ptr[1] = (sizeof (tool) > 256) ? 255 : (sizeof (tool) - 1);    memcpy (ptr + 2, tool, ptr[1]);    ptr += ptr[1] + 2;    while ((ptr - sdes) & 3) /* 32-bits padding */        *ptr++ = 0;    SetWBE (lenptr, (ptr - sdes - 1) >> 2);    rtcp->length = ptr - rtcp->payload;    return rtcp;}void CloseRTCP (rtcp_sender_t *rtcp){    if (rtcp == NULL)        return;    uint8_t *ptr = rtcp->payload;    uint64_t now64 = NTPtime64 ();    SetQWBE (ptr + 8, now64); /* Update the Sender Report timestamp */    /* Bye */    ptr += rtcp->length;    ptr[0] = (2 << 6) | 1; /* V = 2, P = 0, SC = 1 */    ptr[1] = 203; /* payload type: Bye */    SetWBE (ptr + 2, 1);    memcpy (ptr + 4, rtcp->payload + 4, 4); /* Copy SSRC from Sender Report */    rtcp->length += 8;    /* We are THE sender, so we are more important than anybody else, so     * we can afford not to check bandwidth constraints here. */    send (rtcp->handle, rtcp->payload, rtcp->length, 0);    net_Close (rtcp->handle);    free (rtcp);}void SendRTCP (rtcp_sender_t *restrict rtcp, const block_t *rtp){    if ((rtcp == NULL) /* RTCP sender off */     || (rtp->i_buffer < 12)) /* too short RTP packet */        return;    /* Updates statistics */    rtcp->packets++;    rtcp->bytes += rtp->i_buffer;    rtcp->counter += rtp->i_buffer;    /* 1.25% rate limit */    if ((rtcp->counter / 80) < rtcp->length)        return;    uint8_t *ptr = rtcp->payload;    uint32_t last = GetDWBE (ptr + 8); // last RTCP SR send time    uint64_t now64 = NTPtime64 ();    if ((now64 >> 32) < (last + 5))        return; // no more than one SR every 5 seconds    memcpy (ptr + 4, rtp->p_buffer + 8, 4); /* SR SSRC */    SetQWBE (ptr + 8, now64);    memcpy (ptr + 16, rtp->p_buffer + 4, 4); /* RTP timestamp */    SetDWBE (ptr + 20, rtcp->packets);    SetDWBE (ptr + 24, rtcp->bytes);    memcpy (ptr + 28 + 4, rtp->p_buffer + 8, 4); /* SDES SSRC */    if (send (rtcp->handle, ptr, rtcp->length, 0) == (ssize_t)rtcp->length)        rtcp->counter = 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本一区二区| 国产一区不卡在线| 麻豆精品视频在线观看视频| 国产999精品久久久久久| 欧美亚日韩国产aⅴ精品中极品| 欧美一区二区三区婷婷月色| 日韩毛片视频在线看| 精品综合久久久久久8888| 欧美三级中文字| 国产精品久久久久久久久果冻传媒| 日韩福利视频导航| 欧美三级欧美一级| 亚洲欧美一区二区三区孕妇| 国产成人午夜片在线观看高清观看| 欧美日韩高清一区二区不卡| 亚洲欧美色一区| 国产91精品久久久久久久网曝门| 欧美一级欧美三级在线观看| 亚洲午夜久久久久中文字幕久| 成人看片黄a免费看在线| 亚洲精品一区二区三区四区高清 | 午夜不卡在线视频| 91老师国产黑色丝袜在线| 国产亚洲人成网站| 九九**精品视频免费播放| 久久亚洲精品小早川怜子| 亚洲国产乱码最新视频 | 91美女片黄在线观看91美女| 26uuu另类欧美亚洲曰本| 免费在线观看视频一区| 在线91免费看| 午夜亚洲福利老司机| 欧洲一区在线观看| 亚洲一区二区在线视频| 91电影在线观看| 亚洲一区二区偷拍精品| 欧美亚洲一区三区| 亚洲成人精品影院| 欧美人xxxx| 老司机精品视频在线| 欧美岛国在线观看| 国产精一区二区三区| 日韩精品一区国产麻豆| 国产一区二区精品在线观看| 久久久亚洲国产美女国产盗摄 | 欧美一区二区三区成人| 日韩精品午夜视频| 日韩免费观看高清完整版在线观看| 日本麻豆一区二区三区视频| 欧美大片拔萝卜| 国产一区二区三区久久悠悠色av| 国产午夜精品理论片a级大结局| 国产69精品久久777的优势| 国产精品久久午夜| 欧美亚洲综合久久| 久久精品二区亚洲w码| 日本一区二区三区免费乱视频| 丁香一区二区三区| 亚洲精品va在线观看| 91麻豆精品国产91久久久使用方法 | 91国产福利在线| 一区二区三区在线高清| 欧美精三区欧美精三区| 久久机这里只有精品| 国产精品视频第一区| 在线视频一区二区三区| 男女男精品视频| 亚洲国产电影在线观看| 欧美三片在线视频观看| 国产成人综合在线| 亚洲一区二区欧美激情| 欧美精品一区在线观看| 97se亚洲国产综合自在线| 美女性感视频久久| 中文字幕一区免费在线观看| 欧美麻豆精品久久久久久| 国产精品乡下勾搭老头1| 亚洲一区二区在线免费观看视频| 欧美精品一区二区三区一线天视频| 91色|porny| 精品一区二区久久久| 一区二区三区免费在线观看| 精品1区2区在线观看| 欧美视频在线一区| 丁香婷婷综合网| 免费不卡在线视频| 一区二区欧美国产| 中文字幕免费不卡在线| 日韩欧美国产三级电影视频| 91毛片在线观看| 国产成人亚洲精品狼色在线| 日韩专区在线视频| 一区二区三区资源| 亚洲国产电影在线观看| 精品国产成人系列| 欧美麻豆精品久久久久久| 99久久综合国产精品| 国产一区二区女| 蜜臀av亚洲一区中文字幕| 亚洲一区二区三区视频在线播放| 国产日韩欧美精品在线| www国产成人| 欧美xxx久久| 欧美一区二区在线免费观看| 欧美天堂亚洲电影院在线播放| 成人av动漫网站| 国产风韵犹存在线视精品| 精品中文字幕一区二区| 日韩高清国产一区在线| 国产一本一道久久香蕉| 蜜桃久久久久久| 五月天亚洲精品| 午夜久久久久久电影| 亚洲理论在线观看| 最新欧美精品一区二区三区| 国产精品嫩草99a| 亚洲国产精品成人综合色在线婷婷| 久久综合色天天久久综合图片| 日韩美女在线视频| 欧美xxxxxxxx| 久久你懂得1024| 国产欧美日韩亚州综合| 欧美经典三级视频一区二区三区| 国产农村妇女毛片精品久久麻豆| 国产日韩欧美亚洲| 欧美极品美女视频| 最近日韩中文字幕| 亚洲免费观看高清在线观看| 一区二区三区在线影院| 亚洲国产精品麻豆| 午夜欧美电影在线观看| 日韩精品国产欧美| 激情综合网天天干| 成人精品小蝌蚪| 色视频成人在线观看免| 91麻豆高清视频| 欧美福利视频导航| 久久网站最新地址| 成人免费在线视频观看| 亚洲五码中文字幕| 韩国一区二区三区| 不卡的av电影| 欧美性色欧美a在线播放| 欧美一区二区视频在线观看2020 | 欧美午夜影院一区| 欧美一区二区三区在线视频| 久久先锋影音av鲁色资源网| 国产精品国产三级国产aⅴ原创 | 精品在线观看免费| 不卡的av中国片| 欧美激情综合网| 亚洲日本成人在线观看| 日本视频在线一区| 成人午夜免费av| 欧美日韩在线观看一区二区 | 久久精品一区蜜桃臀影院| 亚洲视频精选在线| 美美哒免费高清在线观看视频一区二区| 国精品**一区二区三区在线蜜桃| 91天堂素人约啪| 日韩欧美国产高清| 亚洲男同性视频| 国产一区二区影院| 欧美精选一区二区| 亚洲人成网站在线| 国产综合色精品一区二区三区| 91老司机福利 在线| 久久女同互慰一区二区三区| 亚洲综合免费观看高清在线观看| 国产风韵犹存在线视精品| 欧美日韩国产中文| 亚洲欧洲色图综合| 国产一区二区三区四区五区入口| 在线观看成人小视频| 欧美经典三级视频一区二区三区| 午夜精品福利久久久| 色综合一区二区三区| 久久久精品欧美丰满| 日本v片在线高清不卡在线观看| 成人黄色综合网站| 国产网红主播福利一区二区| 奇米色一区二区| 欧美三级一区二区| 一区二区三区av电影| av不卡在线观看| 中文字幕+乱码+中文字幕一区| 九色综合国产一区二区三区| 欧美日韩在线播| 亚洲黄色免费网站| 91在线高清观看| 国产精品麻豆视频| 成人免费视频视频在线观看免费 | 极品少妇一区二区| 国产三级欧美三级日产三级99| 秋霞国产午夜精品免费视频| 欧美日韩激情在线| 亚洲一区二区三区四区在线免费观看 | 中文字幕高清不卡| 国产高清在线观看免费不卡| 久久久精品黄色|