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

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

?? rtsp.c

?? uclinux 下的vlc播放器源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************** * rtsp.c: minimalistic implementation of rtsp protocol. *         Not RFC 2326 compilant yet and only handle REAL RTSP. ***************************************************************************** * Copyright (C) 2002-2004 the xine project * Copyright (C) 2005 VideoLAN * $Id: rtsp.c 18336 2006-12-09 01:01:02Z hartman $ * * Authors: Gildas Bazin <gbazin@videolan.org> *          Adapted from xine which itself adapted it from joschkas real tools. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include <stdio.h>#include <stdlib.h>#include <vlc/vlc.h>#include "rtsp.h"#define BUF_SIZE 4096#define HEADER_SIZE 1024#define MAX_FIELDS 256struct rtsp_s {  int           s;  char         *host;  int           port;  char         *path;  char         *mrl;  char         *user_agent;  char         *server;  unsigned int  server_state;  uint32_t      server_caps;  unsigned int  cseq;  char         *session;  char        *answers[MAX_FIELDS];   /* data of last message */  char        *scheduled[MAX_FIELDS]; /* will be sent with next message */};/* * constants */const char rtsp_protocol_version[]="RTSP/1.0";/* server states */#define RTSP_CONNECTED 1#define RTSP_INIT      2#define RTSP_READY     4#define RTSP_PLAYING   8#define RTSP_RECORDING 16/* server capabilities */#define RTSP_OPTIONS       0x001#define RTSP_DESCRIBE      0x002#define RTSP_ANNOUNCE      0x004#define RTSP_SETUP         0x008#define RTSP_GET_PARAMETER 0x010#define RTSP_SET_PARAMETER 0x020#define RTSP_TEARDOWN      0x040#define RTSP_PLAY          0x080#define RTSP_RECORD        0x100/* * rtsp_get gets a line from stream * and returns a null terminated string (must be freed). */ static char *rtsp_get( rtsp_client_t *rtsp ){  char *psz_buffer = malloc( BUF_SIZE );  char *psz_string = NULL;  if( rtsp->pf_read_line( rtsp->p_userdata, psz_buffer, (unsigned int)BUF_SIZE ) >= 0 )  {    //printf( "<< '%s'\n", psz_buffer );      psz_string = strdup( psz_buffer );  }  free( psz_buffer );  return psz_string;}/* * rtsp_put puts a line on stream */static int rtsp_put( rtsp_client_t *rtsp, const char *psz_string ){    unsigned int i_buffer = strlen( psz_string );    char *psz_buffer = malloc( i_buffer + 3 );    int i_ret;    strcpy( psz_buffer, psz_string );    psz_buffer[i_buffer] = '\r'; psz_buffer[i_buffer+1] = '\n';    psz_buffer[i_buffer+2] = 0;    i_ret = rtsp->pf_write( rtsp->p_userdata, psz_buffer, i_buffer + 2 );    free( psz_buffer );    return i_ret;}/* * extract server status code */static int rtsp_get_status_code( rtsp_client_t *rtsp, const char *psz_string ){    char psz_buffer[4];    int i_code = 0;    if( !strncmp( psz_string, "RTSP/1.0", sizeof("RTSP/1.0") - 1 ) )    {        memcpy( psz_buffer, psz_string + sizeof("RTSP/1.0"), 3 );        psz_buffer[3] = 0;        i_code = atoi( psz_buffer );    }    else if( !strncmp( psz_string, "SET_PARAMETER", 8 ) )    {        return RTSP_STATUS_SET_PARAMETER;    }    if( i_code != 200 )    {        //fprintf( stderr, "librtsp: server responds: '%s'\n", psz_string );    }    return i_code;}/* * send a request */static int rtsp_send_request( rtsp_client_t *rtsp, const char *psz_type,                              const char *psz_what ){    char **ppsz_payload = rtsp->p_private->scheduled;    char *psz_buffer;    int i_ret;    psz_buffer = malloc( strlen(psz_type) + strlen(psz_what) +                         sizeof("RTSP/1.0") + 2 );    sprintf( psz_buffer, "%s %s %s", psz_type, psz_what, "RTSP/1.0" );    i_ret = rtsp_put( rtsp, psz_buffer );    free( psz_buffer );    if( ppsz_payload )        while( *ppsz_payload )        {            rtsp_put( rtsp, *ppsz_payload );            ppsz_payload++;        }    rtsp_put( rtsp, "" );    rtsp_unschedule_all( rtsp );    return i_ret;}/* * schedule standard fields */static void rtsp_schedule_standard( rtsp_client_t *rtsp ){    char tmp[17];    sprintf( tmp, "Cseq: %u", rtsp->p_private->cseq);    rtsp_schedule_field( rtsp, tmp );    if( rtsp->p_private->session )    {        char *buf;        buf = malloc( strlen(rtsp->p_private->session) + 15 );        sprintf( buf, "Session: %s", rtsp->p_private->session );        rtsp_schedule_field( rtsp, buf );        free( buf );    }}/* * get the answers, if server responses with something != 200, return NULL */static int rtsp_get_answers( rtsp_client_t *rtsp ){    char *answer = NULL;    unsigned int answer_seq;    char **answer_ptr = rtsp->p_private->answers;    int code;    int ans_count = 0;    answer = rtsp_get( rtsp );    if( !answer ) return 0;    code = rtsp_get_status_code( rtsp, answer );    free( answer );    rtsp_free_answers( rtsp );    do { /* while we get answer lines */      answer = rtsp_get( rtsp );      if( !answer ) return 0;      if( !strncasecmp( answer, "Cseq:", 5 ) )      {          sscanf( answer, "%*s %u", &answer_seq );          if( rtsp->p_private->cseq != answer_seq )          {            //fprintf( stderr, "warning: Cseq mismatch. got %u, assumed %u",            //       answer_seq, rtsp->p_private->cseq );              rtsp->p_private->cseq = answer_seq;          }      }      if( !strncasecmp( answer, "Server:", 7 ) )      {          char *buf = malloc( strlen(answer) );          sscanf( answer, "%*s %s", buf );          if( rtsp->p_private->server ) free( rtsp->p_private->server );          rtsp->p_private->server = buf;      }      if( !strncasecmp( answer, "Session:", 8 ) )      {          char *buf = malloc( strlen(answer) );          sscanf( answer, "%*s %s", buf );          if( rtsp->p_private->session )          {              if( strcmp( buf, rtsp->p_private->session ) )              {                  //fprintf( stderr,                   //         "rtsp: warning: setting NEW session: %s\n", buf );                  free( rtsp->p_private->session );                  rtsp->p_private->session = strdup( buf );              }          }          else          {              //fprintf( stderr, "setting session id to: %s\n", buf );              rtsp->p_private->session = strdup( buf );          }          free( buf );      }      *answer_ptr = answer;      answer_ptr++;    } while( (strlen(answer) != 0) && (++ans_count < MAX_FIELDS) );    rtsp->p_private->cseq++;    *answer_ptr = NULL;    rtsp_schedule_standard( rtsp );    return code;}/* * send an ok message */int rtsp_send_ok( rtsp_client_t *rtsp ){    char cseq[16];    rtsp_put( rtsp, "RTSP/1.0 200 OK" );    sprintf( cseq, "CSeq: %u", rtsp->p_private->cseq );    rtsp_put( rtsp, cseq );    rtsp_put( rtsp, "" );    return 0;}/* * implementation of must-have rtsp requests; functions return * server status code. */int rtsp_request_options( rtsp_client_t *rtsp, const char *what ){    char *buf;    if( what ) buf = strdup(what);    else    {        buf = malloc( strlen(rtsp->p_private->host) + 16 );        sprintf( buf, "rtsp://%s:%i", rtsp->p_private->host,                 rtsp->p_private->port );    }    rtsp_send_request( rtsp, "OPTIONS", buf );    free( buf );    return rtsp_get_answers( rtsp );}int rtsp_request_describe( rtsp_client_t *rtsp, const char *what ){    char *buf;    if( what )    {        buf = strdup(what);    }    else    {        buf = malloc( strlen(rtsp->p_private->host) +                      strlen(rtsp->p_private->path) + 16 );        sprintf( buf, "rtsp://%s:%i/%s", rtsp->p_private->host,                 rtsp->p_private->port, rtsp->p_private->path );    }    rtsp_send_request( rtsp, "DESCRIBE", buf );    free( buf );    return rtsp_get_answers( rtsp );}int rtsp_request_setup( rtsp_client_t *rtsp, const char *what ){    rtsp_send_request( rtsp, "SETUP", what );    return rtsp_get_answers( rtsp );}int rtsp_request_setparameter( rtsp_client_t *rtsp, const char *what ){    char *buf;    if( what )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影视频在线| 久久精品亚洲一区二区三区浴池| 亚洲小说春色综合另类电影| 91视频一区二区三区| 亚洲免费伊人电影| 欧美日韩免费在线视频| 污片在线观看一区二区| 精品国产一区二区亚洲人成毛片| 国产一区二区不卡老阿姨| 中文幕一区二区三区久久蜜桃| 99热这里都是精品| 午夜国产不卡在线观看视频| 日韩精品中文字幕在线不卡尤物 | 久久99久久久欧美国产| 日韩欧美一级在线播放| 国产乱子轮精品视频| 亚洲色图19p| 欧美一区二区在线观看| 国产精品亚洲一区二区三区妖精 | 久久国产精品区| 国产午夜精品一区二区 | 色欧美日韩亚洲| 日韩成人一区二区| 国产午夜精品久久| 欧美怡红院视频| 国产高清在线观看免费不卡| 一区二区不卡在线视频 午夜欧美不卡在 | 精品少妇一区二区三区在线视频| 成人动漫一区二区| 日韩电影免费一区| 亚洲视频一区二区在线| 日韩午夜在线影院| 一本色道**综合亚洲精品蜜桃冫 | 久久品道一品道久久精品| 色美美综合视频| 国产在线视频一区二区| 一区二区在线观看免费视频播放| 精品国产免费视频| 欧美福利电影网| 99综合电影在线视频| 久久精品国产亚洲5555| 一区二区日韩电影| 欧美高清在线视频| 日韩一级欧美一级| 欧美日韩视频在线一区二区| av电影天堂一区二区在线观看| 狠狠色狠狠色综合系列| 午夜视频久久久久久| 亚洲欧美综合在线精品| 久久综合久久综合亚洲| 欧美电影一区二区三区| 色综合久久88色综合天天6 | 国产精品萝li| 在线观看www91| 国产精品久久久久久久久免费相片 | 亚洲四区在线观看| 高清国产午夜精品久久久久久| 日本一二三四高清不卡| 欧美在线视频日韩| 国产乱码精品1区2区3区| 国产精品综合一区二区三区| 亚洲高清免费观看高清完整版在线观看 | 日韩欧美中文字幕公布| 欧美揉bbbbb揉bbbbb| 色欲综合视频天天天| 国产精品99久久久| 国产乱子伦一区二区三区国色天香| 日韩精品一级中文字幕精品视频免费观看| 18成人在线观看| 亚洲日本青草视频在线怡红院| 日本一区二区电影| 国产日韩v精品一区二区| 欧美激情在线一区二区三区| 久久影院视频免费| 久久久蜜臀国产一区二区| 久久亚洲一级片| 国产日韩精品一区二区三区| 国产日产欧美一区二区视频| 久久女同互慰一区二区三区| 久久久久国产成人精品亚洲午夜| 精品av综合导航| 久久久久97国产精华液好用吗| 久久久久成人黄色影片| 国产精品久久久久久户外露出 | 亚洲老司机在线| 一区二区三区四区不卡在线 | 蜜臀久久99精品久久久久久9| 首页国产欧美久久| 久久99国产精品尤物| 国产高清在线精品| 99精品欧美一区二区蜜桃免费 | 欧美制服丝袜第一页| 欧美日韩在线三级| 日韩欧美激情一区| 国产三级精品在线| 亚洲欧美一区二区三区久本道91| 亚洲一区二区四区蜜桃| 美女视频一区二区| 夫妻av一区二区| 在线视频国内自拍亚洲视频| 欧美日本在线看| 久久久午夜精品| 亚洲另类一区二区| 久久99精品国产.久久久久久| 成人免费观看av| 欧美三日本三级三级在线播放| 欧美一区二区三区在线| 中文av一区特黄| 视频一区视频二区中文| 国产成人av福利| 在线免费观看日本一区| 日韩视频中午一区| 亚洲欧美自拍偷拍| 麻豆久久一区二区| 94-欧美-setu| 26uuu国产在线精品一区二区| 亚洲女同女同女同女同女同69| 人人超碰91尤物精品国产| 成人国产精品免费观看动漫| 欧美夫妻性生活| 亚洲丝袜另类动漫二区| 日本少妇一区二区| 91黄色免费看| 欧美激情综合在线| 蜜桃视频一区二区| 91国产免费看| 国产精品久久午夜夜伦鲁鲁| 美日韩黄色大片| 色噜噜夜夜夜综合网| 久久精品夜色噜噜亚洲a∨| 午夜欧美一区二区三区在线播放| 国产.欧美.日韩| 日韩一区二区三区电影在线观看| 最新国产の精品合集bt伙计| 免费观看成人av| 欧美无砖专区一中文字| 国产精品卡一卡二卡三| 韩国v欧美v日本v亚洲v| 91麻豆精品国产91久久久久| 日韩美女视频一区二区| 国产精品一区二区你懂的| 欧美一区在线视频| 亚洲国产精品尤物yw在线观看| 99久久久久久| 国产精品蜜臀在线观看| 韩国精品久久久| 欧美成人精品3d动漫h| 亚洲电影一区二区三区| 色猫猫国产区一区二在线视频| 国产精品妹子av| 成人做爰69片免费看网站| 久久综合久色欧美综合狠狠| 蜜桃av一区二区| 欧美男人的天堂一二区| 亚洲午夜精品久久久久久久久| 99久久精品国产导航| 国产精品久久久久久久岛一牛影视| 国产资源精品在线观看| 精品国产一区二区亚洲人成毛片 | 一区二区三区日韩欧美| 91香蕉视频黄| 亚洲欧洲成人自拍| 99久久精品免费看| 一区在线中文字幕| gogo大胆日本视频一区| 中文字幕欧美一| 99国产精品一区| 亚洲欧美影音先锋| 色综合久久88色综合天天6| 樱桃国产成人精品视频| 91福利在线播放| 天天色综合成人网| 欧美一级免费观看| 精品一区二区三区在线播放视频 | 欧美日韩国产高清一区| 天堂av在线一区| 欧美大尺度电影在线| 国产一区二区中文字幕| 久久精品视频在线看| 国产a区久久久| 亚洲男人都懂的| 欧美日韩精品一区二区三区蜜桃 | 色欧美片视频在线观看| 亚洲国产日韩av| 精品日韩一区二区三区免费视频| 黄网站免费久久| 日韩理论电影院| 欧美日韩免费高清一区色橹橹| 捆绑调教一区二区三区| 国产日韩欧美制服另类| 91成人在线免费观看| 日韩中文字幕区一区有砖一区 | 一本久道中文字幕精品亚洲嫩| 亚洲欧洲一区二区三区| 欧美剧情片在线观看| 国产尤物一区二区在线| 中文字幕一区二区三区精华液| 欧美日韩精品欧美日韩精品| 国产曰批免费观看久久久| 亚洲视频在线一区|